Gast
#5039303
Guten Tag zusammen,
ich beginne gerade mit Assembler programmierung an einem 80C517 mit
12MHz und soll unter anderem eine kleine Zeitmessung programmieren.
Die Messung soll mit einem Port gestartet und gestoppt werden.
Und der Wert in ms über die serielle Schnitstelle ausgegeben werden.
Meine erste Idee war es natürlich das ganze mit einem Timer zu
realisieren.
Ich hab mich erstmal für den timer1 entschieden, da ich durch das 16bit
Register weniger Überläufe hab.
mov TMOD, #00010001B
clr tr0
mov TH0, #0H
mov TL0, #0H
clr tf0
Ich warte nun auf das Setzten des Ports und starte dann den timer
jb P4.1,$
setb tr0
call Timer1
call Auswertung
Timer1:
jnb tf0,$
clr tf0
inc 2DH ;(Hier speicher ich die Timerüberläufe)
jnb P4.1,Timer1
clr tr0
ret
Die Auswertung des Wert klappt, sprich die Umrechnung von 1,2 Registern
in ms oder µs und bisschen Textausgabe über die Schnittstelle bekomme
ich hin.
Mein größstes Problem ist gerade dass ich immer auf einen Timerüberlauf
warte um diesen zu speichern und danach erst prüfe ob überhaupt noch
gestoppt werden soll.
Sprich im ungünstigsten Fall ist mein Ergebnis um ~65,5 ms falsch.
Gibt es eine Möglichkeit den Timer direkt zu stoppen wenn mein Port 0
ist und dennoch die Überläufe zu zählen, sodass ich später den aktuellen
Timerstand auslesen kann?
Vielen Dank schonmal im Voraus