Erstens ist hier
1 | if( Status == 4 )
|
2 | Status = 0;
|
3 |
|
4 | Status++;
|
die Reihenfolge falsch.
Nimm mal an, Status hätte den Wert 0.
So weit so gut.
Jetzt drückst du eine Taste. Was passiert?
Hat Status den Wert 4? Nein. Also wird der abhängige Teil nicht
ausgeführt.
Wie gehts weiter?
aus 0 wird 1. So weit so gut.
wieder drückst du die Taste. Was passiert jetzt?
Hat Status den Wert 4? Nein. Status ist jetzt ja 1, und 1 ist nicht 4.
Also wird die abhängige ANweisung nicht ausgeführt und es geht weiter
mit
Aus 1 wird 2
Nächster Tastendruck. Wieder landet der Code hier
2 ist nicht 4, also wird das davon abhängige 0-setzen von Status nicht
gemacht
aus 2 wird 3.
Nächster Tastendruck
Status hat den Wert 3, daher passiert wieder weiter nichts und es geht
weiter mit
aus 3 wird 4.
Moment, deine if weiter unten behandeln aber den Fall gar nicht, dass
Status jemals 4 werden könnte!
Nächster Tastendruck. Der Code landet wieder hier
Diesmal hat STatus den Wert 4. Also wird ausgeführt
aus 4 wird 0. Wie gehts weiter? Mit
Aus der soeben zugewiesenen 0 wird eine 1.
usw. use.
Deine Statusvariable nimmt also bei den Tastendrücken nacheinander diese
Werte an
1 | 0 1 2 3 4 1 2 3 4 1 2 3 4 ....
|
die erste 0 ist nur mehr oder weniger zufällig entstanden, weil Status
vor dem ersten Tastendruck mit 0 initialisiert wurde.
Das passt also schon mal nicht.
Dann
1 | //if( Status == 0 )
|
2 | //PORTA |= ( 1 << PA0 );
|
3 | //else
|
4 | //PORTA &= ~( 1 << PA0 );
|
5 |
|
6 | //if( Status == 1 )
|
7 | //PORTA |= ( 1 << PA1 );
|
8 | //else
|
9 | //PORTA &= ~( 1 << PA1 );
|
10 |
|
11 | //if( Status == 2 )
|
12 | //PORTA &= ~( 1 << PA0 );
|
13 |
|
14 | //if( Status == 3 )
|
15 | //PORTA &= ~( 1 << PA1);
|
bei den Stati 2 und 3 schaltest du ja jeweils nur einen Port-pin aus.
Aber wie soll da was eingeschaltet werden?
Mach dir halt mal eine Tabelle! Bei welchem Status (diesmal dann aber
mit den krorrekten Status-Nummern), muss welcher Output-Pin wie stehen?
Und das implementierst du dann.