TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
Das geht in Schichten
das bedeutet erstens:
TWCR = (daseine) | (wasanderes) | (nochwas);
TWCR = (daseine) OR (wasanderes) OR (nochwas);
d.h. in TWCR sammeln sich alle Einser der drei Werte
zweitens:
(daseine) ---> (1<<TWINT)
(TWINT ist in irgendeiner .h-file definiert als eine Zahl 0-7)
das bedeutet: nimm einen EINSER ( 1 ) und schiebe ihn nach links ( << ), und zwar "TWINT"-mal
Also
(1 << 0 ) = 1 = B"00000001"
(1 << 1 ) = 2 = B"00000010"
(1 << 2 ) = 4 = B"00000100"
(1 << 3 ) = 8 = B"00001000"
......
(1 << 7 ) = 128 = B"10000000"
Und nun zu etwas völlig anderem:
while(!(TWCR & (1<<TWINT)));
auch das mußt du aufdröseln
ganz innen steht (1<<TWINT) ---> siehe oben
Dann:
TWCR & (1<<TWINT)
das in Klammer ist also EIN Bit von 8
& = AND
das ganze ergibt also einen Wert <> 0 , wenn in beiden an derselben Stelle ein Einser ist, sonst 0
! (TWCR & (1<<TWINT));
! = NOT
das ganze ergibt also einen Werte <> 0 , wenn vorher ein Nuller rausgekommen ist ( Also einfach das Gegenteil)
While ( nnn) = Solange nnnn nicht Null ist, mach die Befehle bis zum nächsten Strichpunkt.
Da steht aber nix
Also rotiert er.
Auf deutsch, komplett
while(!(TWCR & (1<<TWINT)));
warte, solange das bit (1<<TWINT) in TWCR auf 0 steht
Seltsame Sprache , gelle ?
Lesezeichen