Moin,
ich versuche gerade ein Lauflicht auf einem MEGA644 zu realisieren. Dazu
zählt ein Timer und ruft eine ISR auf.
Wenn meine Variable gesetzt ist soll das Licht andersherum laufen als
wenn sie null ist:
1 | int r = 0x80;
|
2 | int l = 0x00;
|
3 |
|
4 | ISR(TIMER0_COMPA_vect)
|
5 | {
|
6 | cli();
|
7 |
|
8 | if (s == 1)
|
9 | {
|
10 |
|
11 | if (d == 1)
|
12 | {
|
13 |
|
14 | PORTC = r;
|
15 | r = r >>1;
|
16 | if (r == 0)
|
17 | {
|
18 | r = 0x80;
|
19 | }
|
20 | }
|
21 | else
|
22 | {
|
23 |
|
24 | PORTC = l;
|
25 | l = l <<1;
|
26 | if (l == 0x80)
|
27 | {
|
28 | l = 0x00;
|
29 | }
|
30 | }
|
31 |
|
32 | }
|
33 |
|
34 |
|
35 | sei();
|
36 | }
|
Mein Problem ist der Teil in der else-Bedingung. Sie wird nicht
ausgeführt; entweder das erste oder keine Aktion. Ich habe auch schon
den nicht funktionierenden Teil in der ISR gehabt ohne das eine
Bedingung erfüllt sein muss trotzdem funktioniert es nicht. Wo könnte
der Fehler liegen?