kappa47 Inserito: 9 aprile 2022 Segnala Share Inserito: 9 aprile 2022 Quasi mi vergogno a chiederlo. Date un occhio a questo codice e ditemi perche' l'interrupt del timer 2 non scatta. Dovrebbe funzionare in free running. Utilizzo PIC16f18854 ... banksel T2CLKCON movlw 0x01 ;fosc/4 movwf T2CLKCON ; banksel T2CON movlw b'01001111' ;TMR2 stop / prescaler 1:16 / postascaler 1:16 movwf T2CON ; banksel T2PR movlw 0x80 ;a caso movwf T2PR ; banksel PIR4 bcf PIR4,TMR2IF ;reset pending (precauzione) ; banksel T2CON bsf T2CON,TMR2ON ;TMR2 start ; banksel PIE4 bsf PIE4,TMR2IE ;enable TMR2 interrupt bsf INTCON,PEIE ;enable peripheral interrupt bsf INTCON,GIE ;enable global interrupt ... Interrupt del timer 2 non viene mai generato. Manca qualche cosa ? Grazie e Buona Pasqua a tutti. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 9 aprile 2022 Segnala Share Inserita: 9 aprile 2022 Domanda banale: li hai abilitati gli interrupt? Solitamente nella routine di inizializzazione dei timere la prima istruzione è un "disable interrupt" e l'ultima èun "enable interrupt"; similmente quando si esce dalla routine di servizio dell'interrupt si mette un bell'enable interrupt. Sono alcuni anni che non uso l'asm dei pic quindi sono un po' arrugginito, dovrei riprendermi i registri di quel tipo di pic per analizzare il tuo codice. Domanda di curiosità: perchè usare ancora l'asm quando sono anni che si usa praticamente solo il "C"? Link al commento Condividi su altri siti More sharing options...
dott.cicala Inserita: 9 aprile 2022 Segnala Share Inserita: 9 aprile 2022 7 ore fa, kappa47 ha scritto: bsf PIE4,TMR2IE ;enable TMR2 interrupt bsf INTCON,PEIE ;enable peripheral interrupt bsf INTCON,GIE ;enable global interrupt l'interrupt è abilitato. Togli i reset precauzionale del flag TMR2IF e resettalo solo nella routine di interrupt Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 10 aprile 2022 Segnala Share Inserita: 10 aprile 2022 10 ore fa, dott.cicala ha scritto: l'interrupt è abilitato. Accidenti l'ho letto e non me ne sono accorto. Temo che l'alzheimer sia più che incipiente.😟 Link al commento Condividi su altri siti More sharing options...
kappa47 Inserita: 11 aprile 2022 Autore Segnala Share Inserita: 11 aprile 2022 Risolto. Adesso funziona, basta inserire queste due righe banksel PMD1 bcf PMD1,TMR2MD ;abil. modulo TMR2 (bit 2) Questa dimenticanza mi e' costata quasi 2 giorni ! Per Livio. Ovviamente il C e' da preferire, ma devo modificare un progetto fatto da altri in asm. Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora