Forum: Mikrocontroller und Digitale Elektronik PIC18F2550 Timer0 interrupt


von Ron N. (blitzgeist)


Lesenswert?

HI,
ich möchte eigendlich was ganz einfaches machen: einen Interrupt 
auslösen. und zwar von timer0 (16 bit modus)
Welche bits muss ich hierzu setzen?

INTCONbits.GIE = 1; // enables/disables all interrupt sources
RCONbits.IPEN = 0;
INTCONbits.TMR0IE = 1; // IRQ aktiv

das dürfte doch schon alles gewesen sein. ich habe nur diesen einen 
interrupt, also nix mit high oder low.

laut datenblatt soll nun an die stelle 0x000008 gesprungen werden. dort 
ist ne while(1); und somit soll meine LED aufören zu blinken. er springt 
aber einfach nicht in die ISR!!! wiso? habe schon alles probiert. kan 
mir jemand bitte behilflich sein?
lg

von holger (Gast)


Lesenswert?

Schau dir im Datenblatt T0CON mal an !

von Ron N. (blitzgeist)


Lesenswert?

ja habe ich, und nun? du meinst etwa den timer starten?!

von holger (Gast)


Lesenswert?

Ja, könnte nicht schaden, aber eher auf internen Takt umschalten.
Die Bits dort sind bei Reset alle auf 1.
Für internen Takt muss T0CS aber 0 sein.
Auch T08BIT musst du auf 0 setzen für
16 Bit Timer. Prescaler nach deinem belieben.

von Ron N. (blitzgeist)


Lesenswert?

also der timer ist richtig konfiguriert. in einer funktion frage ich 
auch das bit if(INTCONbits.TMR0IF) ab (setze zb einen breakpoint). das 
geht (falg gesetzt). wie schon gesagt es wird nicht in die ISR 
gesprungen. woran liegt das? am T0CON nicht.

von holger (Gast)


Lesenswert?

Alle Bedingungen sind erfüllt das in die ISR
gesprungen wird. An dieser Stelle würde ich mir
das Assemblerlisting anschauen und nachsehen was
der Compiler aus der ISR Routine gemacht hat.
Ich vermute da liegt der Hund begraben.

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
Noch kein Account? Hier anmelden.