Hi Johannes,
hast du schon die HW/SW-Stack Einstellungen überprüft?
Die stehen nämlich bei Bascom von Haus aus zu niedrig ein, wenn mit
Interrupts arbeitest.
Wenn Timer0 jede Sekunde aufgerufen wird, sehe ich keine Probleme,
dauert der Code aber eine Sekunde, das ist vieeeeeeel zu lang für ne
Interruptroutine.
Timer1 funkt ja auch noch kräftig dazwischen.
Bei Bascom werden bei jedem Interruptaufruf alle Register(32) + SREg
gesichert.
Also brauchst schonmal reichlich Stack.
Es sei denn du verwendest "NOSAVE", aber das würde ich nicht
empfehlen, denn dann werden einfach Register überschrieben und man
weiss ja nie an welcher Stelle sich das Programm gerade befindet, wenn
der Interrupt dazwischenfunkt.
Meine Devise bei Interruptroutinen ist immer: so schnell raus wie nur
geht ;-)
In der Hauptschleife kann´s ruhig schonmal länger dauern, die
unterbricht ja auch niemand bei der Arbeit ;-)
Es reicht völlig aus in der Interruptroutine Zähler laufen zu lassen
bzw. bits zu setzen, die dann in der Hauptschleife abgefragt werden und
ggf. bearbeitet werden.
Es werden z.b. keine Strings in Interruptroutinen sortiert ;-)
Seit ich das beherzige, spare ich mir viel Zeit bei der Fehlersuche.
Das Gemeine ist ja, dass viele Dinger am Anfang laufen, dann ändert man
irgendwo was und peng ist der Wurm drin.
Und keiner denkt mehr an die Interruptroutine, die viel zu lang war.
Hoffe, das hilft dir
lg Ralf