PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timer Problem



Mr-400-Volt
06.10.2008, 22:44
Hallo, ich habe ein problem mit dem timer1 im Mega8.

Wenn ich den Timer mit START Timer1 starte und ihn später mit STOP Timer1 anhalte, läuft alles soweit wie gewollt. Beim zweiten stert läuft er auch bis zum Stop, und resetet den M8. Könnte mir bitte jemand helfen ?



If Taster3 = 0 And _tr = 0 Then
_tr = 1
Start Timer1
End If
.
.
.
.
.
.
.
.
.
.
.
.
.
Timer_irq:
Timer1 = Timervorgabe

If Sekunde = 0 And Minute = 0 Then

Stop Timer1

Goto Done
End If

Sekunde = Sekunde - 1
If Sekunde > 60 Then
Sekunde = 59
Minute = Minute - 1
End If
Return

Sauerbruch
07.10.2008, 08:09
Ich kann zwar um diese Uhrzeit noch nicht 100% genau verstehen, was wann wie passieren soll - aber mir fällt in Deinem Code ein klassischer Fehler auf:





If Sekunde = 0 And Minute = 0 Then
Stop Timer1
Goto Done


Dadurch verlässt der Controller die ISR, ohne über "return" gegangen zu sein. Das geht ein paar mal gut, aber irgendwann läuft der Stack über, weil immer nur was draufgepackt wird, aber nichts wieder runtergenommen wird. Das ist eine der sichersten methoden, ein Porgramm "aufzuhängen" =P~

Eine Lösung wäre, mit der If-Abfrage das Setzen eines Flag-Bits zu verbinden, die ISR ganz normal über Return zu beenden, und in der Hauptschleife eben dieses Flag abzufragen.

Mr-400-Volt
07.10.2008, 09:35
Danke für deinen Tip. Ich habe nun die abfrage in die Hauptschleife gepackt und im Interrupt nur die sekunden runter gezählt. Läuft super....



Do
.
.
.
.
If Sekunde = 0 And Minute = 0 Then
Stop Timer1
Goto Done
End If
.
Loop
.
.
.
.
.
Timer_irq:

Timer1 = Timervorgabe
Decr Sekunde
If Sekunde >= 255 And Minute > 0 Then
Minute = Minute - 1
Sekunde = 59
End If

Return