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?
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.
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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.