(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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren