Forum: Compiler & IDEs (1<<PB3) ???


von tronic (Gast)


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

von xeho (Gast)


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.

von Werner B. (Gast)


Lesenswert?

Port B ist       00100001
(1<<PB3)    eine 00000001 wird drei mal nach links geschoben
                 00000010  1 Mal
                 00000100  2 Mal
                 00001000  3 Mal
   jetzt wird verodert
             00100001 | 00001000 = 00101001

von tronic (Gast)


Lesenswert?

ach so, danke vielmal

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
Noch kein Account? Hier anmelden.