Timer 1 Interrupt

Gast #33080
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?
Gast #33081
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.
Angehängte Dateien:
Gast #33083
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
Gast #33084
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.