Timer1

Il Timer1 e’ un timer/contatore a 16 bit formato da due registri a 8 bit (TMR1H:TMR1L).
Il TMR1 si incrementa quindi da 0000h a FFFFh ed ogni volta che il TMR1 va in overflow, cioe’ passa da FFFFh a 0000h, viene settato il flag TMR1IF (PIR1<0>) il quale puo’ generare una richiesta di interrupt nel caso che l’apposito flag (TMR1IE (PIE1<0>)) sia settato.
TMR1 puo’ funzionare come un timer o come un contatore a seconda di come viene configurato il bit TMR1CS (T1CON<1>). Nel modo timer il TMR1 si incrementa di 1 ogni istruction cycle, nel modo counter il TMR1 si incrementa di 1 ogni fronte di salita di un clock esterno.
Il TMR1 puo’ essere abilitato o disabilitato a seconda di come e’ configurato il bit TMR1ON (T1CON<0>).
Esiste anche la possibilita’ di resettare il TMR1 tramite uno dei due moduli CCP e lo vedremo in seguito.
Quando l’oscillatore del TMR1 e’ abilitato (T1OSCEN a 1 (T1CON<3>)) i pin RC1/T1OSI/CCP2 e RC0/T1OSO/T1CKI, diventano degli input per cui i bit 0 e 1 di TRISC vengono ignorati.

TMR1 in modo timer.
Se viene messo a 0 il bit TMR1CS (T1CON<1>) il TMR1 si comporta come un timer. In questo modo il clock del timer e’ la frequenza di sistema diviso 4, cioe’ il timer si incrementa ogni instruction cycle che e’ appunto pari a 4 periodi di clock di sistema. In questo caso il valore del bit T1SYNC (T1CON <2>) non ha effetti in quanto il clock interno e’ sempre sincronizzato.

TMR1 in modo counter.
A seconda di come e’ configurato il bit TMR1CS (T1CON<1>) il TMR1 puo’ contare in modo asincrono o sincrono. Quando il TMR1 viene incrementato da un clock esterno gli incrementi avvengono sui fronti di salita. Dopo che il TMR1 e’ stato abilitato come contatore il modulo deve prima avere un fronte di discesa prima che il contatore inizi a incrmentarsi.


Stampa la pagina