Moin!
Ich bin gerade dabei von Avr-Assembler auf den avr-gcc umzusteigen.
Dabei ist mir aufgefallen, dass PORTB = (1<<Pinnummer) nicht das Gleiche
wie PORTB |= (1<<Pinnummer) ist. Bei der "normalen" Variablenzuweisung
ist es so, dass der Rest des Registers auf 0 gesetzt wird und damit z.B.
alle LEDs leuchten (beim STK500). Warum wird diese Schreibweise genutzt
und sollte man die direkte Anweisung von PORTB nur nutzen, wenn man den
genauen Status aller LEDs kennt und auch ggf. setzen möchte?
1 | int main(void)
|
2 | {
|
3 | DDRB = 0xFF; //PORTB --> AUSGANG
|
4 | PORTB = 0xFF;
|
5 | while(1)
|
6 | {
|
7 | PORTB |= (1<<PB0);
|
8 | _delay_ms(1000);
|
9 | PORTB &= ~(1<<PB0);
|
10 | _delay_ms(1000);
|
11 | }
|
12 | return 1;
|
13 | }
|