Ganz am Anfang steht die Zeile DDRB=0x00001100. Im ersten Moment sind
also beide LED eingeschaltet. Einige Mikrosekunden später folgt in der
Schleife das erste XOR, welches eine der LED wieder ausknipst - es
leuchtet nur eine LED.
Es folgt die Verzögerung, dann das zweite XOR. Dieses knipst die zweite
LED aus - beide sind also dunkel. Nur wenige Mikrosekunden später
erreichen wir durch die Schleife wieder das erste XOR, das die erste
LED wieder anknipst, wieder leuchtet nur eine LED.
Erneut die Verzögerung, dann das zweite XOR, beide LED leuchten - aber
nur ein paar µs, denn wir erreichen wieder das erste XOR, das LED
Nummer 1 wieder ausschaltet.
Ein wirklicher Wechselblinker ist das nicht, schließlich sind die LED
manchmal beide an oder aus. Die Zeiträume, in denen das der Fall ist,
sind aber so kurz, das man das optisch nicht mehr wahrnimmt.
Eine elegante und pfiffige Lösung, finde ich - aber nicht wirklich
perfekt. Ich schlage vor, das ganze ein wenig anders zu formulieren:
1 | DDRB=0x00001000;
|
2 |
|
3 | while(1)
|
4 | {
|
5 | PORTB ^= 0b00001100;
|
6 | for (i=0; i<n; i++) _delay_ms(25);
|
7 | }
|