Vai al contenuto
PLC Forum


Timer 2 interrupt


kappa47

Messaggi consigliati

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


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

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

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

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

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 account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...