Hallo, ANFÄNGERFRAGE: !!! Ich habe hier ein Projekt in das ich mich einarbeiten möchte, leider zum ersten mal im Bereich der MC Programmierung! Controller: 80C517 / 80C537 Und gleich beim Timer fängt es an! #define ZEIT 0xFC17 void timer1_init(void) { TMOD&=0x1F; TMOD|=0x10; TH1=ZEIT>>8; TL1=ZEIT&0x00FF; ms_timer = 10; } Soweit klar, (hoffe ich) Timer1 = keine Abhängigkeit von externer Freigabe = ist ein Timer, kein Zähler = Modus ist 1 (16-Bit Timer, ohne Autoreload) TH1 = FCh TL1 = 17h somit im Timer1 Counter FC17h, als nächstes folgt der Start des Timers mit: void timer1_start(void) { TR1=1; // Timer1 wird gestartet ET1=1; // Interrupt für Timer1 wird freigegeben } Nun zählt doch der "Timer 1 Counter" hoch und setzt (nach 1ms) das Interruptflag TF1. Soweit sollte ich es doch richtig verstanden haben, oder? Nun da dieser Interrupt ausgelöst wurde suche ich in der Interruptvektor Tabelle nach diesem Interrupt. In der User Manual für meinen Baustein steht das nach Adresse 001Bh gesprungen wird. Wie kann ich rausfinden, ob auf diesen Interrupt reagiert wird? Den nach meinen Verständnid sollte darauf reagiert werden, im Anhang ist ein Teil einer Init() Methode die den Timer startet und drauf reagiert. Ich hoffe ich habe mich nicht zu kompliziert ausgedrückt, oder gar zu blöd! Danke für eure Hilfe! Sven
Da musst Du eine Interrupt-Routine schreiben, die eine Aktion ausführt, wenn der Interrupt auftritt. Alternativ kann man natürlich das Interrupt-Flag auch im Polling-Verfahren abfragen. Weiß jetzt nicht, was für nen Compiler Du benutzt, aber in der dazugehörigen Dokumentation sollte drinstehen, wie ein Interrupt-Handler auszusehen hat (im Prinzip wie eine Funktion, nur mit dem Hinweis auf den entsprechenden Interrupt-Vektor).
Danke dir erstmal für die rasche antwort! Es ist bereits ein lauffähiges Programm, an dem ich auch schon einige Änderungen (Nur Berechnungen und Auswertungen, nicht an Registern oder Interrupts) gemacht habe. Da es mein erstes Projekt im MC Bereich ist, wollte ich dieses Programm einfach mal aufdröseln. Ich vermute du meinst so : void timer_int (void) interrupt 3 { // Bla .. } Davon habe ich einige mit verschiedenen Interrupts, nur weiß ich leider nicht welche Methode, von welchen Interrupt aufgerufen wird? Dieses muss ja irgendwo zugeordnet sein, nur wo??? Sven
> Dieses muss ja irgendwo zugeordnet sein, nur wo???
Im Zweifelsfall in der Headerdatei. Ist ne Weile her, dass ich mit mit
8051ern und Keil beschäftigt habe. Habe Keil auch net auf dem Rechner,
so dass ich jetzt nicht nachsehen kann.
Der Wink mit dem Zaunpfahl war gut! ;-) Habe meine Googlesuche um Keil erweitert ;-) Es ist Compiler abhänging beim Keil Compiler wird es so ermittelt: http://www.phytec.de/phytec/faqs_tools/keil_c51_interruptnummer_fuer_eine_interruptquelle_.html kurz: n = (int_adresse aus vektortabelle -3 ) / 8 bei mir: n = 1Bh = ( 27d - 3 ) / 8 n = 3 Nach dem Timer1 Interrupt wird : "void timer_int (void) interrupt 3" aufgerufen. Hatte ich mir schon gedacht, nur wusste ich nicht sicher! thx a lot Sven
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.