Hi, Ich habe ein AT89c51ed2 und sdcc als compiler. In meiner Applikation benutzte ich die P3_4(T0) P3_5(T1) als Inkrementaleingänge. Timer0 und Timer1 benutzte ich hierfür nur als Zähler (Counter), mit TL0/TH0 und TL1/TH1. Also zählen mit wenig CPU Intervention und ohne Interrupt. Hierfür habe ich folgende Register konfiguriert: TMOD=0x55; TR1=ON; TR0=ON; Das ganze klappt auch sehr gut so. Was mir nur aufgefallen ist, ist das wenn es eine Interruprt routine gibt diese auch ausgeführt wird: void interex0 (void) interrupt IE0_VECTOR { Int0++; return; } Wenn ich diese aus dem Code entferne, funktioniert es auch. Aber warum wird überhaupt ein Interrupt generiert??? Zudem nie Überlauf des Zählers statt findet. Ich habe nirgends ein Bit gefunden wo man denn Interrupt unterbinden kann. Abgesehen TR0 und TR1,doch dann funktionieren die Zähler auch nicht mehr. Was jemand bescheid warum das so ist ? Danke im voraus.
>Ich habe nirgends ein Bit gefunden wo man denn Interrupt unterbinden >kann. Das versteh ich nicht. Es gibt doch das SFR IEN0, da kannst Du die Interrupts einzeln freischalten.
Ja das stimmt,aber die sind alle auf 0 (ET0 ET1 EX0 EX1). Habs nochmal getestet und jetzt funktionierts !! Hmmmmm, wiedermal ein bug irgendwo. Suchen suchen suchen ... danke
TOTO wrote:
> Hmmmmm, wiedermal ein bug irgendwo.
Warscheinlich in dem ganzen Rest des Codes, den Du nicht gepostet hast.
Ich kann Dir versichern, ohne die Enable-Bits zu setzen, gibts auch
keine Interrupts.
Und wenn man sie setzt, muß auch unbedingt ein Interrupthandler
aufgesetzt werden. Sonst krachts und zwar an einer ganz anderen, völlig
unverdächtigen Stelle.
Peter
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.