www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 8051-Timer Interrupt erfolgt nur einmal


Autor: Martin Kerner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

ich versuche gerade, mit dem Timer0 beim 8051er (Cypress AN2131)
regelmäßig einen Interrupt auszulösen. Als Initialisierung verwende ich
folgendes:

MOV TMOD,#00010001b  ;TMOD-Register: Timer, 16bit
SETB ET0    ;Timer0-Interrupt freigeben
SETB TR0    ;Timer 0 starten
SETB EA      ;Alle Interrupts freigeben

In der Interrupt-Routine steht folgendes:

CLR TF0
SETB TR0

Der Interrupt wird jedoch nur einmal ausgelöst, dann nicht
mehr. Wo liegt der Fehler?

Gruß, Martin.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
reti?

Autor: Martin Kerner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

@crazy horse

>reti?

das habe ich gemacht. Interessant ist, daß die Funktion mit
dem Cypress FX2 funktioniert, jedoch nicht mit dem AN2131.
Offensichtlich gibts da Unterschiede zwischen den 8051-Kernen.

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> In der Interrupt-Routine steht folgendes:
>
> CLR TF0
> SETB TR0


Das ist völlig überflüssig !

TF0 wird beim Eintritt automatisch gelöscht.
Wäre TR0 nicht bereits gesetzt, gäbe es erst gar keinen Interrupt.

Wo steht denn das RETI ?


Peter

Autor: F. Haase (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ist sichergestellt das wichtige Register wie z.B. das TMOD, TCON und IE
nicht an anderer Stelle im Programm überschrieben werden!? ... auch
nicht die relevanten Bits davon/darin. Gruß Frank

Autor: Markus_8051 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So wie ich das sehe, sollte Dein Programm laufen. Denkst Du daran, daß
der Timer0 im 16bit-Modus keine Auto-Reload-Funktion hat? Sprich, Du
mußt den Startwert jedesmal selbst reinschreiben, sonst fängt er halt
bei null an zu zählen.

Poste mal den vollständigen Source-Code. Wie Frank schon geschrieben
hat, evtl. wird irgendwo an anderer Stelle etwas Böses mit den
Timerbits angestellt.

Gruß,
Markus_8051

Autor: Niels Huesken (monarch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moment! Wie sieht denn der Vektor für den Timerinterrupt aus?

Ich hab, als ich noch noob war, statt JMP ein JSR gemacht. Das ging
natürlich fürchterlich in die Hose.

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leute, der Thread ist 10 Tage alt.

Wohl ein typischer Fall von "Problem gelöst -> Schweigen im Walde"

Spart Euch also Eure Mühe.


Peter

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.