Hallo zusammen,
ich habe ein Problem mit einer Interruptroutine. Über einen Timer soll u. a. eine Zählvariable inkrementiert werden. Irgendwie funktioniert da leider nicht, der Wert der Variablen ändert sich nicht.
Ich habe das Programm mal auf folgendes Beispiel zusammenschneiden können, wobei der Fehler hier immer noch auftritt.
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
volatile char count = 0;
ISR(TIMER0_COMPA_vect) {
count++;
PIND = (1 << PD5);
}
int main(int argc, char **argv) {
// Hier wird Port D und Timer 0 initialisiert
sei();
// Timer 0 starten
while (1)
if (counter != 0)
PORTD |= (1 << PD6);
}
}
Der Timer 0 ruft alle 2.5 ms die obige Interrupt-Routine auf. Das kann ich auch mit meines Oszi am Pin PD5 schön verfolgen. Nur leider ändert sich an der LED am Pin PD6 nie etwas. Auch das Oszi zeigt keine Veränderung am Pin.
Compiliert wird das ganze mit AVR-GCC unter Debian Linux.
Kann mir jemand nen Tipp geben, woran's liegt, dass sich der Inhalt von counter nicht ändert? Ich seh grad die Bits vor lauter Bytes nicht mehr...
Danke und viele Grüße,
Markus
Lesezeichen