Hallo Ulli

Mit der zusammengesetzten Zuweisung |= (bitweises ODER) werden doch immer nur die gesetzten Bits des rechten Operanden dem linken zugewiesen und der linke ansonsten nicht beeinflußt, oder ?
Richtig!

beispiel1:
DDRD|=0x22
ist gleich wie
DDRD = DDRD | 0x22
ist gleich wie
DDRD = DDRD oder 0x22


0000 1111 (DDRD = 0x0F)
0010 0010 (|= 0x22) (oder 0x22)
------------
0010 1111 (DDRD = 0x2F)

mit |= macht jeden einzelne '1' bit (von 0x22)
aus ein '0' bit von DDRD ein '1' bit <== das ubereinstimmende bit wird '1'
aus ein '1' bit von DDRD ein '1' bit (bleibt '1')

beispiel2:
DDRD&=~0x22 ('~' heisst invertiert/umgekehrt)
ist gleich wie
DDRD = DDRD & ~0x22
ist gleich wie
DDRD = DDRD & 0xDD
ist gleich wie
DDRD = DDRD und 0xDD

0000 1111 (DDRD = 0x0F)
1101 1101 (&= ~0x22) (&=0xDD)
------------
0000 1101 (DDRD = 0x0D)

mit &= ~ macht jeden einzelne '1' bit (von 0x22)
aus ein '0' bit von DDRD ein '0' bit (bleibt '0')
aus ein '1' bit von DDRD ein '0' bit <== das ubereinstimmende bit wird '0'

|= macht einzelne bit(s) '1'
&= ~ macht einzelne bit(s) '0'


gruss

Henk