Hallo, Ich bin blutiger Anfänger und habe folgende Frage: Ich habe an einem AVR einen Port, z.B. PortB. Dort habe ich an PB0 bis PB5 z.B. je eine LED angeschlossen. PB6 und PB7 ist etwas anderes. Nun möchte ich alle Ausgänge von PB0 bis PB5 auf einmal low setzen, ohne aber PB6 und PB7 zu verändern. Wie schreibe ich das in c am kürzesten?
David schrieb: > Wie schreibe ich das in c am kürzesten? PORTB = PORTB & ( (1<<PB6)|(1<<PB7) ) Aber das ganze ist nicht Atomar - könte als Probeme machen wenn noch ein interupt auf PORTB zugreift.
Als Anfänger würde ich das so machen: PORTB &= ~( (1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3) | (1 << PB4) | (1 << PB5); Geht das denn oder wie könnte man es kürzer machen (atomar)
Siehe Bitmanipulation. Und mach dir um das atomare erstmal keine Gedanken, das hat für dich im Moment noch keinerlei Bedeutung.
Machs einfach so:
1 | uint8_t u8tmp; |
2 | |
3 | |
4 | void main ( void ) |
5 | {
|
6 | ...
|
7 | |
8 | u8tmp = PORTC; |
9 | u8Tmp &= ~(2b11000000); |
10 | u8Tmp |= (2b00111111); |
11 | PORTC = u8Tmp; |
12 | }
|
Matthias Lipinsky schrieb: > Machs einfach so: was ist daran einfach? Und PB0 bis PB5 auf LOW kommt da auch nicht raus.
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.