Ähm.. ein bisschen verwirrend(und überkompliziert)hast du das ganze
schon programmiert.
Ich nehme mal an, dass du entweder das TimerInterruptFlag und/oder den
Timer Wert zurücksetzen musst.(Ich hab mit AVRs noch nichts gemacht
;-))
Aber deine Abfragen sind doch ziemlich... verwirrend bis sinnlos. Die
Variable Counter wird um 1 erhöht wenn diese 0 ist. Sobald sie einen
anderen Wert als 0 hat wird sie auf Null gesetz?!
Also ich würd folgende Wege nehmen.
1.(ohne interrupt)
while(1)
{
LED=!LED;
delay_ms(1000); //Eine Einfache delay-funktion ist sicher in einer Lib
}
2.(Mit interrupt)
Einfach den Timer so einstellen, dass er,wenn möglich, jede Sekunde
einen Interrupt macht und danach einfach den Zustand des Leds wechseln
SIGNAL(SIG_OVERFLOW1)/* signal handler for tcnt1TCNT1 = 61935; overflow
interrupt */
{
LED=!LED;
}
in diesem Sinne
Oder ansonst halt ein Variable Hochzählen und dann das LEd wechseln
SIGNAL(SIG_OVERFLOW1)/* signal handler for tcnt1TCNT1 = 61935; overflow
interrupt */
{
if(counter==1000) //Gilt nur wenn jede Millisekunde ein Interrupt
erfolgt
{
LED=!LED;
counter=0;
}
counter++;
}