www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Timer 1 Interrupt


Autor: Rainman Huhu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

habe ein kleines Problem mit einem Interrupt.

Aufgabenstellung:
Timer1 invertiert durch Nutzung seines Interrupts und Reload Modus im 
Abstand von 200us den Port 4.1. Rest ist klar!

wie muss ich diesen Timer1 einstellen, das er nach 200us den Interrupt 
auslöst?

ich verwende den A51!

heißt dieser Timer1 "Timer1 Overflow", sonst habe ich keinen gefunden, 
wo man einen Interrupt bei diesem Timer auslösen kann?

Autor: Christian Bischoff (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich fürchte Du hast ein paar Informationen vergessen. Welcher 
Prozessor/Controller wird verwendet? Programmierst Du in Assembler oder 
C?

Wenn ich die wenigen Infos richtig interpretiere programmierst Du ein 
8051-Controller in Assembler. Wenn diese Annahme richtig ist hilft Dir 
vielleicht das Assembler-Beispiel im Anhang weiter. Es läuft auf einem 
AT89C2051 mit recht guter Genauigkeit. Evtl. sind einige Anpassungen an 
den verwendeten Assembler notwendig da Deiner vielleicht die Eine oder 
Andere Direktive ($XREF, $DEVICE, $DATE, $PAGELENGTH, $SYMBOLS, ORG, 
etc.) nicht versteht.

Autor: Rainman Huhu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
uC: 80535
Programmieren in Assembler

hoffe, das es so besser geht!

Autor: Christian Bischoff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

perfekt! Dann sollte das Beispiel für Dich funktionieren. Du kannst die 
Werte für die Timerinitialisierung daraus entnehmen. Wenn ich mich recht 
entsinne laufen beide Timer im Auto-Reload.

Ups! Dabei fällt mir ein das der 80535 eine kleine Inkompatibilität bei 
den Interrupts hat. Da er mehr Interruptquellen kennt hat er zwei 
Control-Register die etwas anders heißen als das Original. Wenn Du 
Deinem Assembler dies den Zielprozessor nicht als 80535 bekannt machst 
(vielleicht geht es auch nicht?) dann merkt er den Fehler auch nicht. Da 
ich lange nichts mehr damit gemacht habe muß ich im Datenbuch 
nachschauen [oder Du ;-)].

Tschau

Christian

Autor: hoschi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aufgabenstellung:
Timer1 invertiert durch Nutzung seines Interrupts und Reload Modus im 
Abstand von 200us den Port 4.1. Rest ist klar!


ganz einfach:

org  001Bh             ; Interrupt-Vektor Timer1
cpl  p4.1
RETI

; Initialisierung
anl  tmod,#00001111b      ; Timer 0 retten
orl  tmod,#00100000b      ; Timer 1 Auto-Reload (8 Bit)
mov  TL1,#55d         ; 255-55 = 200 us Überlauf
mov  TL1,#55d      ; Startwert (damit es bei 1.Mal auch passt)
setb  ET1                ; Timer 1-Interrupt freigeben
setb  EAL                ; globale Interruptfreigabe
setb  TR1                ; Timer 1 starten
.
.     (Hauptprogramm, etc.)
.

Damit lässt du Timer0 unberührt.
Eventuell musst du den Interrupt-Vektor von Timer1 anpassen, d.h. wenn 
du z.B. so ein Entwicklungssystem 80c535 mit Monitorprogramm hast ist 
der Vektor sicher im RAM bei 801Bh.
Achso: Das ganze gilt für Quarz 12Mhz!

gruß,
hoschi

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.