www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu Timer0 bei 8051


Autor: MC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: MC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: MC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: MC (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.