(1<<PB3) ???

Gast #410526
Lesenswert?
• ▲
▼
ich bleib irgendwie bei folgendem C-Befehl hängen:

wenn ich schreibe:

PORTB |=(1<<PB3); sollte eigentlich PinB3 gesetzt werden, doch wenn ich
jetzt versuche dies "nachzurechnen":

PORTB hat z.B den Wert (binär): 00100001
PB3 ist ja binär: 00000011,
jetzt wird alles ein bit nach links geschoben, also: 00000110,

wenn man jetzt aber PortB mit dem geschobenen Wert oderverknüpft, wird
nicht nur PINB3 sondern auch PINB2 gesetzt,

welcher überlegungsfehler mach ich da?
PB3 ist ja im avr/iom8.h der Wert 3 zugewiesen und das ist nun mal
binär: 0011,

kann mir jemand auf die Sprünge helfen?!

thx.
tronic
Gast #410527
Lesenswert?
• ▲
▼
Hallo,

der Ausdruck (1<<PB3) bewirkt nicht, dass PB3 um eine Stelle nach links
geshiftet wird, sondern, dass 1 um "PB3"-Stellen nach links verschoben
wird, also der gewünschte Shift um drei Stellen ...

Und nach der Oder-Verknüpfung ist dann auch PB3 auf logisch high.

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.