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
Gast
#568930
Schau dir im Datenblatt T0CON mal an !
ja habe ich, und nun? du meinst etwa den timer starten?!
Gast
#568974
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.
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.
Gast
#568998
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.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.