Vizitator kta Postat Septembrie 1, 2010 Partajează Postat Septembrie 1, 2010 Salut, am si eu o problema legata de intreruperi si anume tmr0 nu se incrementeaza si nu sare in intrerupere(functie), la fel nu functioneaza nici cand il pun pe hardware si imi afiseaza pe LCD doar "Automatics".Poate fi din linia de configurare (fuses) ceva ce trebuie setat sau nu ?Nu vad unde este problema , folosesc MikroC iar programul este: int cntr=0; void main() { // ADCON1 = 0x00 ; // TRISA = 0xff ; INTCON=0b10100000; OPTION_REG=0; TMR0=100; TRISB = 0b00011000; TRISD = 0b00000000; PORTB = 0b00011000; Lcd8_Config(&PORTB,&PORTD,0,2,1,7,6,5,4,3,2,1,0); LCD8_Cmd(Lcd_CLEAR) ; for(;;) { Lcd8_Out(1,4,"AUTOMATICS"); if(cntr==10) { INTCON=0b00000000; LCD8_Cmd(Lcd_CLEAR) ; Lcd8_Out(1,4,"Hello"); Delay_ms(5000); LCD8_Cmd(Lcd_CLEAR) ; INTCON=0b10100000; TMR0=100; cntr=0; } } } void interrupt(void) { cntr++; INTCON=0b10100000; TMR0=100; } Link spre comentariu
Vizitator marian_i Postat Septembrie 1, 2010 Partajează Postat Septembrie 1, 2010 Salut!Ce-am remarcat la prima vedere:1.Intai setezi toti reg. necesari functionarii intreruperii respective apoi validezi intreruperile.In cazul de fata se seteaza coresp "OPTION_REG" si apoi "INTCON", nu invers.2.incearca sa faci comentarii,te va ajuta la depanare3.de unde stii ca nu sare in intrerupere?ca sa vezi acest lucru e bine ca in cadrul acestei rutine sa actionezi un pin de iesire cumva;ex:aprinzi un led4.Cand te astepti sa se genereze INT de la Timer0?Dupa cum ai setat reg. folosesti frontul crescator al clock-ului intern(Fosc/4) cu prescaler(divizare cu 2)256-100=156===>TMR0 genereaza int dupa 156 de impulsuri x 2(prescaler)=312.Deci abia dupa 312 perioade de Fosc/4 variabila cntr se va incrementa cu o unitate.5.Nu ai precizat ce frecv are osc .E intern, extern?6.Cand vrei sa fii ajutat da cat mai multe detalii .Nimeni nu sta sa vada ce-ai vrut tu sa faci si cum.Trebuia sa arati si cum ai setat reg de configurare.Sper sa-ti fie de folos cele de mai sus.Succes! Salut, am si eu o problema legata de intreruperi si anume tmr0 nu se incrementeaza si nu sare in intrerupere(functie), la fel nu functioneaza nici cand il pun pe hardware si imi afiseaza pe LCD doar "Automatics".Poate fi din linia de configurare (fuses) ceva ce trebuie setat sau nu ?Nu vad unde este problema , folosesc MikroC iar programul este: int cntr=0; void main() { // ADCON1 = 0x00 ; // TRISA = 0xff ; INTCON=0b10100000; OPTION_REG=0; TMR0=100; TRISB = 0b00011000; TRISD = 0b00000000; PORTB = 0b00011000; Lcd8_Config(&PORTB,&PORTD,0,2,1,7,6,5,4,3,2,1,0); LCD8_Cmd(Lcd_CLEAR) ; for(;;) { Lcd8_Out(1,4,"AUTOMATICS"); if(cntr==10) { INTCON=0b00000000; LCD8_Cmd(Lcd_CLEAR) ; Lcd8_Out(1,4,"Hello"); Delay_ms(5000); LCD8_Cmd(Lcd_CLEAR) ; INTCON=0b10100000; TMR0=100; cntr=0; } } } void interrupt(void) { cntr++; INTCON=0b10100000; TMR0=100; } Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum