Anfängerfrage Operatoren

#628143
Lesenswert?
• ▲
▼
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.
#628144
Lesenswert?
• ▲
▼
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...
#628146
Lesenswert?
• ▲
▼
von Flo:
> 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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.