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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren