Jump to content
PLC Forum


Timer 2 interrupt


kappa47
 Share

Recommended Posts

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 to comment
Share on other sites


Livio Orsini

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 to comment
Share on other sites

dott.cicala
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 to comment
Share on other sites

Livio Orsini
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 to comment
Share on other sites

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 to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...