Bis zur 'vor vor letzten'?
Sicher?
Aus dem Programm heraus würde ich sagen, dass du das leuchten der
letzten übrig gebliebenen LED nicht sehen wirst.
wenn i den Wert 1 hat, schaltest du am Anfang der ISR mit deiner
Maskensteuerung diese einzelne LED ein, nur um sie kurz darauf hier
i--;
if(i==0){
zaehlflag=0;
P2=P2|0xFF00;
}
sofort wieder abzuschalten. Hat i den Wert i, dann ergibt i-- den Wert 0
worauf hin die LED sofort alle abgeschaltet werden.
Im Ernst:
Dein Quelltext ist furchtbar. Keine Einrückungen und ich denke du hast
dich mit deiner komplizierten Steuerung auch ein Eigentor geschossen.
Mach eine 2 teilige ISR
ISR
{
... bestimme welche LED leuchten müssen
... lass dann auch genau diese LED leuchten
}
den Teil über die Bestimmung zerteilst du wieder in 2 Teile
ISR
{
if( LED Kette soll von rechts nach links wachsen )
... bestimmte welche LED als nächstes leuchten müssen
else // (LED Kette soll von links nach rechts wachsen
... bestimme welche LED als nächstes leuchten müssen
... lass dann auch genau diese LED leuchten
}
jetzt überlegst du dir für den ersten der beiden Fälle, wie die Logik
lauten muss damit du dort, ausgehend von einem bestimmten Wert für i der
nächste Wert für i aussehen muss
dann überlegst du dir den umgekehrten Fall
und du überlegst dir, wie in den jeweiligen Fällen die Bedingungen sein
müssen, damit beim nächsten ISR Aufruf dann auch die Richtungen
gewechselt werden.
Alles nur eine Frage der Organisation. Und manchmal muss man die auch
ändern und bestehenden Code auch verwerfen.