Sari la conținut
ELFORUM - Forumul electronistilor

MikroC pic16f877a tmr0 not working


Vizitator kta

Postări Recomandate

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
  • Răspunsuri 1
  • Creat
  • Ultimul Răspuns

Zile populare

Vizitator marian_i

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

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări