Timer0

Il Timer0 è uno dei 3 timer presenti all%u2019interno del PIC16F877, esso è un timer/contatore a 8 bit con prescaler programmabile a 8 bit.
Il segnale di clock può essere interno, quello di sistema, o esterno, sul pin Ra4/T0CKI. Il Timer0 è in grado di generare un interrupt quando il conteggio passa da FFh a 00h ed è possibile selezionare il fronte sul quale fare avanzare il conteggio nel caso di clock esterno. Per selezionare il modo timer basta resettare il bit T0CS, bit 5 di OPTION_REG, in questo modo ad ogni instuction cycle il timer si incrementerà di 1, se non viene utilizzato il prescaler.
Se nel timer0 viene scritto un valore il conteggio rimane fermo per 2 cicli macchina, poi riparte il conteggio verso l%u2019alto cioe%u2019 verso FFh.
Se il bit T0CS viene settato il timer0 avanza con un clock esterno connesso al pin RA4/T0CKI ed il fronte valido dipende da come viene configurato il bit T0SE, bit 4 di OPTION_REG.
Quando il timer0 va in overflow, cioè passa da FFh a 00h, viene settato il bit T0IF, bit 2 di INTCON e, se il bit T0IE, bit 5 di INTCON è settato si genera una richiesta di interrupt. L%u2019interrupt può essere mascherato resettando T0IE, in questo modo il bit T0IF si setta ma non viene richiesto nessun interrupt.
Il bit T0IF deve essere resettato prima di uscire dalla routine di gestione dell%u2019interrupt affinché possa avvenire un'altra richiesta di interrupt.
L%u2019interrupt su l%u2019overflow di timer0 non può essere utilizzato per risvegliare il uC dallo SLEEP in quanto durante lo sleep il timer0 non funziona.
Il PRESCALER consente di aumentare i tempi di conteggio del timer, esso è può moltiplicare il valore di fine conteggio da 2 a 256.
Se il PRESCALER viene assegnato al WATCHDOG non può essere utilizzato dal timer0 e viceversa.


Stampa la pagina