Ich habe noch ein Problem:

Ich muss einen Timer-Interrupt unter bestimmten Umständen zwischendurch "erzwingen", d.h. zwischen zwei Überläufen. Der Grundrhythmus darf sich dabei aber nicht verschieben. Im Datenblatt habe ich gelesen, dass man dazu nur das Overflow-Flag setzen muss, und schon soll der Interrupt ausgeführt werden (vorausgesetzt, der spezielle und die Interrupts im allgemeinen sind freigegeben).

Um das zu probieren, habe ich mal folgenden Code geschrieben: Timer1 toggelt eine LED alle ca. 1,5 Sekunden. Ein Taster löst INT0 aus, in dessen ISR das Overflow-Flag von Timer1 (TIFR.2) gesetzt wird.


Code:
$regfile = "m8def.dat"
$crystal = 1000000

$hwstack = 128
$swstack = 128
$framesize = 160

Ddrb.0 = 1                              'LED-Ausgang
Portd.2 = 1                             'PullUp

Config Timer1 = Timer , Prescale = 1024
Timer1 = 64000                          'Überlauf alle ca. 1,5 Sek.
On Timer1 Isr_timer1
Enable Timer1

Config Int0 = Falling                   'Taste gegen Masse
On Int0 Isr_int0
Enable Int0

Enable Interrupts

Do
Loop

Isr_timer1:
Toggle Portb.0
Timer1 = 64000
Return

Isr_int0:                               'Tastendruck:
Waitms 10                               'Prellen abwarten (ich weiß - schlechter Stil...)
Tifr.2 = 0                              'Timer1-Overflow-Flag setzen
Return
Die LED blinkt zwar stabil im 1,5-Sekundentakt - auf Tastendruck passiert aber gar nichts Die INT0-ISR wird dabei korrekt angesprungen (ich habe in der ISR versuchsweise mal eine andere LED toggeln lassen - das geschieht bei jedem Tastendruck einwandfrei).

Was mach´ ich falsch???