Gast
#1193908
ich habe versucht eine Verzögerungsfunktion mithilfe von TIMER0 zu
schreiben:
void delay_8ms(uint8_t m8s) //@m8s max 256, @m8s=#8ms-Schritte
// TIMER0 verwendet
{
TCCR0B=0x00; //timer angehalten
TCCR0A=0x00; //Ports normal, operation mode
normal
TIMSK&=~0x18; //f overflow interrupt aktiviert
TIMSK|=0x02;
TCNT0=0xff-m8s; //timer auf ausgangsposition
gesetzt
bf0.timer0=true; // bool um aus der schleife zu
springen (global definiert)
TCCR0B=0x05; // 1024 prescaler => 8ms pro
Zählschritt (bei 128kHz)
// timer gestartet
while(bf0.timer0) // Warteschleife
{
}
TIMSK&=~0x02; // Zurücksetzen der
overflow-interrupt einstellung
}
und
ISR(TIM0_OVF_vect)
{
bf0.timer0=false;
}
wobei das Programm immer an der Stelle der Verzögerung hängenbleibt,
woraus ich schliesse, dass die Interruptfunktion nie aufgerufen wird,
was ich mir nicht erklären kann. (Watchdog hab ich ausgeschaltet)
Auch eine zweite Funktion, die Timer1 braucht funktioniert nicht.
Deshalb denke ich, dass ich irgendwas mit dem Timer-starten falsch
mache. Aber was?