hi, ich lede gerade das GCC Tutorial. Nur verstehe ich nicht was das konkret macht: PORTB |= (1<<PB2); es setzt Bit3 an Port B. Aber wieso 1<<PB2? und |= ist or oder? Wäre jemand so freundlich mir das mit Zahlen herzuleiten? Mfg. Thomas R.
Wie kommst du auf Bit 3? Der Befehl setzt zwar das dritte Bit von rechts, aber das ist Bit 2.
Thomas wrote: > ich lede gerade das GCC Tutorial. Nur verstehe ich nicht was das konkret > macht: > > PORTB |= (1<<PB2); Das ist äquivalent zu
1 | PORTB = PORTB | (1 << PB2); |
und macht eine bitweise ODER-Verknüpfung von PORTB mit der Bitmaske 1 << PB2. > es setzt Bit3 an Port B. Aber wieso 1<<PB2? und |= ist or oder? Wäre > jemand so freundlich mir das mit Zahlen herzuleiten? Nein, es setzt Bit 2 an Port B! Merke: Die Zählung fängt grundsätzlich bei 0 an. Es ist das dritte Bit, das hat aber die Nummer 2... 1 << PB2 ist in Binärschreibweise eine 1, die um PB2 Stellen nach links verschoben ist. PB2 hat den Wert 2, also ergibt sich die Bitmaske 0b00000100. Mit dieser Bitmaske wird das Portregister bitweise ODER-verknüpft, was dazu führt, dass das Bit Nummer 2 gesetzt wird und alle anderen Bits unverändert bleiben. Das ganze Prozedere steht im AVR-GCC-Tutorial eigentlich ganz gut beschrieben.
ich versuchs mal: also PortB ist binär: 0b101000001 jetzt wird 0b000000001 2x nach links verschoben 0b000000001 0b000000010 0b000000100 jetzt kommt das or: 0b10100001 or 0b00000100 --> 0b10100101 ich hoffe das war richtig so... €dit: uups da hat wohl jemand schneller getippt als ich...
Florentin Schirmer wrote: > 00000000 und 00000100 --> 00000100 Wohl eher ODER statt UND... > ich hoffe das war richtig so... Naja, Deine Annahme, dass PORTB vorher null ist, macht das ganze ein bisschen sinnlos. Der Witz der Verknüpfung ist doch gerade, dass es pupsegal ist, was vorher in dem Register steht, weil nur das gewählte Bit gesetzt wird, alle anderen aber unverändert bleiben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.