Tag an alle, ich benutze in 8051-Derivat. Meine Frage ist: Wenn ich die Timer0 bzw. 1 als 16Bit-Timer benutze und in der ISR den Timer neu lade, muss ich, um die Ablaufzeit konstant zu halten, die Zeit, die zum Ausführen der Instruktionen zum Neuladen des Timers ja benötigt wird, berücksichtigen?! Beispiel: ;Timer0_ISR clr tcon.4 ;1 Zyklus mov th0,#123 ;2 Zyklen mov tl0,#234 ;2 Zyklen setb tcon.4 ;1 Zyklus Das ich die ersten drei Anweisungen berücksichtigen muss, ist mir klar. Was ist aber mit der letzten Anweisung, die den Timer0 wieder startet? Muss ich die auch von dem Zählwert des Timers abziehen??? Danke schon mal für eure Antworten, MC
Hallo, ganz sicher bin ich mir nicht, aber ich würde sagen, du musst die letzte Anweisung auch abziehen, weil die ja auch Zeit braucht, bis das Bit gesetzt ist. Je nachdem, welches Derivat du hast, könntest du auch Timer 2 verwenden, der kann 16-Bit mit AutoReload. Ralf
Danke für deine Antwort, >Je nachdem, welches Derivat du hast, könntest du auch Timer 2 verwenden, >der kann 16-Bit mit AutoReload. Der ist leider schon benutzt. Ich verwende den AT89S8253 von Atmel. Insgesamt benutze ich alle drei Timer, die serielle Schnittstelle,das interne EEPROM, den X2-Mode, später noch die SPI,... Werde mit nem Speicheroszilloskop mal versuchen, eine Differenz zwischen "letze Antweisung mitberücksichtig" und "letzte Anweisung nicht berücksichtit" zu messen.
Habe mal mit meinem Oszilloskop nachgemessen. Es kann noch nichtmal nen Unterschied feststellen, wenn ich die Zeit zum Neuladen des Timers nicht beachte. Eigentlich sollte der Zeitunterschied bei 11,059MHz ohne X2-Mode 6,5µs betragen. Das sollte ein Speicheroszilloskop bis 60MHz doch auflösen können, oder nicht?
Wenn Du ein präzises Timing willst, das ist mit MOV unmöglich, da die Interrupteinsprungzeit nicht konstant ist. Präzises Timing geht nur mit Addition zu der real vergangenen Zeit: http://home.tiscali.de/peterd/appl/soft/clock/index.htm Peter
Danke für die Antwort, an die Verzögerung für den Interrupt habe ich gar nicht gedacht. Habe noch mal nachgemessen. Um bei 11,059MHz auf 50ms zu kommen, muss ich deutlich mehr Zyklen berücksichtigen, als beim Neuladen des Timers ausgeführt werden (14 anstatt von 6). Die werden wohl von der Interrupt-Verzögerung kommen. MfG, MC
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.