Das alle Bits nur auf einmal geschrieben werden können, hast Du ja schon verstanden. Um nun bei gezielten Bitmanipulationen die anderen Bits nicht zu beeinflussen, ist es unabdingbar, sich die zuletzt ausgegeben Daten in einer Variablen zu merken. Ich benutze jetzt mal Java, um das konkret zu machen
Code: Select all
int data = 0;
Wenn Du jetzt Bits manipulieren möchtest, tust Du das mit der Variabel "data" und wenn Du damit fertig bist, gibts Du "data" erneut aus. Wie manipuliert man nun ein Bit? Bits setzten (auf 1 oder High) funktioniert mit "bitweisem Oder '|'" und Bits rücksetzen (auf 0 oder Low) mit "bitweisem Und '&'". Dafür benötigst du Bitmasken, die Du am besten in Konstanten definierst und Namen vergibst, unter denen Du Dir etwas vorstellen kann (bei mir steht CLR für "CLEAR" = rücksetzen).
Für die ersten 4 Bit:
Code: Select all
final int BIT_0_SET = 0x01; //binär: 0000 0001
final int BIT_1_SET = 0x02; //binär: 0000 0010
final int BIT_2_SET = 0x04; //binär: 0000 0100
final int BIT_3_SET = 0x08; //binär: 0000 1000
Code: Select all
final int BIT_0_CLR = 0xFE; //binär: 1111 1110
final int BIT_1_CLR = 0xFD; //binär 1111 1101
final int BIT_2_CLR = 0xFB; //binär: 1111 1011
final int BIT_3_CLR = 0xF7; //binär: 1111 0111
Ein Bit setzen geht jetzt so (Beispiel Bit1):
Code: Select all
data = data | BIT_1_SET;
Code: Select all
data = data & BIT_1_CLR;