Zitat Zitat von oberallgeier
Du verwendest den Sekundentimer SCNT offenbar für mehrere Routinen, kann da ein/der Fehler liegen?
ja, ich verwende den SCNT für mehrere routinen - aber immer nur in EINER aktiv.
zb. OPNDOOR: hier wird TSEC auf 5 sekunden timeout gesetzt. wenn nun der timeout tatsächlich eintritt (oder auch nicht) wird der timer wieder gestoppt, bevor DOORIMP und damit WAIT (mit str und stptmr) aufgerufen wird.
somit sehe ich keine möglichkeit von "nested interrupts" und auch keine doppelverwendung des registers von 2 routinen gleichzeitig.

Zitat Zitat von oberallgeier
Ausserdem wird SCNT im WAIT mit TSEC verglichen, und TSEC kann sowohl den Wert 5 haben - in CLSLATCH und OPNDOOR - als auch den Wert 1 - in DOORIMP.
richtig, aber diese routinen laufen NACHEINANDER ab.
die WAIT routine wird nur über die routine DOORIMP aufgerufen. sonst nirgendwo. also auch nichts "nested".

Zitat Zitat von oberallgeier
Mögliche Abhilfe:
In der ISR vor dem rcall wait ein push tsec machen und vor dem reti ein pop tsec ? ?
in welcher ISR meinst du? es gibt deren nur 2: IMPULS und TMROVF
und beide haben kein rcall WAIT.
alle timerfunktionen, ob 1 oder 5 sekunden werden abgeschlossen und auch der timer gestoppt, bevor die nächste aufgerufen wird.

Zitat Zitat von oberallgeier
Aber bestimmt unschön ist es in STRTMR den Interrupt generell zu erlauben - "sei".
wenn du mir sagst, wie ich interrupts enablen kann OHNE den befehl SEI zu verwenden. soweit ich das datenblatt verstanden habe werden interrupts nur dann abgearbeitet, wenn das "I" bit (7, global interrupt enable) gesetzt ist, sonst wird zwar das interrupt bit des entsprechenden interrupts gesetzt, aber keine ISR ausgeführt. habe ich das falsch verstanden?

halt, aber gerade jetzt fällt mir was ein/auf - ich stoppe zwar den timer aber mache kein CLI !!!
da mag was drin liegen ...

werde es am abend probieren.

aber nochmal: brauche ich das "I" bit on oder nicht zum ausführen der ISR?

noch eine frage ist aufgetaucht, die ich auf die schnelle dem datenblatt nicht zu entnehmen vermag:
was passiert, wenn der timer gestoppt und wieder gestartet wird?
werden seine internen register zurück gesetzt oder läuft er bei dem wert weiter, bei dem er gerade gestoppt wurde?
meine register TIM1 + TIM2 werden ja wieder neu gesetzt - bis auf eines: TIM2 sehe ich gerade!
werde das auch noch berichtigen und testen!!