Hallo,
ich habe folgendes Problem mit welchem ich nicht so recht klar komme. Ich habe ein Gerät welches eine 4 Bit Dezimalzahl, also eine Zahl zwischen 0 und 15 erwartet um entsprechende Ausgänge zu steuern.
Beispiel:
1 := Ausgang1 = high
2 := Ausgang2 = high
3 := Ausgang1+2 = high
...
Jetzt möchte ich einen der 4 Ausgänge schalten ohne dabei jedoch die anderen Ausgänge zu verändern. Wie mache ich das am besten, gibt es da schon eine Funktion für? Ich stelle mit das so vor:
- Aktuellen Wert mit "get Device IOPort" auslesen
- Umwandlung in Binär
- Und verknüpfung mit entsprechenden Bit
- Neuen Wert setzen mit "set Device xxx"
Ich kann leider kein Perl, ich weiß aber auch nicht wie man das am geschicktesten plaziert, in diese my utils datei oder wo kommt sowas hin. Kann mit hier einer helfen mit einem Beispiel code?
Danke und Gruß
Daniel
make mit links shiften erzeugen, bit setzen mit oder verknüpfung des alten wertes mit der maske, bit löschen mit und verknüpfung des alten wertes mit der negierten maske. also z.b. etwas in der art:
sub
switchBit($$$) {
my ($old,$bit,$state) = @_;
my $mask = 0x01 << $bit;
if( $state ) {
$old |= $mask;
} else {
$old &= ~$mask;
}
$old &= 0x0F;
return $old;
}
aufruf mit altem wert, bit nummer beginnend bei 0 und 0 oder 1 zum löschen oder setzen.
gruss
andre
Ahh super, danke Andre das haut hin!
Gruß
Daniel