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
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.
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
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.