Tutorials - PIC peripherals

 

TIMER0

 


I registri di controllo del TIMER0

Essi sono:

  • OPTION , che è dedicato, in Baseline e Mid-range, al controllo del TIMER0
  • INTCON , che è utilizzato per la gestione generale dell' interrupt (Baseline esclusi)

OPTION

OPTION (OPTION_REG  in MPLAB) contiene i bit di controllo del timer. La sua struttura è la seguente:

OPTION

bit

7 6 5 4 3 2 1 0

nome

!GPWU

!GPPU

T0CS

T0SE

PSA

PS2

PS1

PSO

funzione

R/W R/W R/W R/W R/W R/W R/W R/W

default

1 1 1 1 1 1 1 1
  • bit 7      !GPWU : Enable Wake-up on Pin Change bit (GP0, GP1, GP3)
                 1 = disabilitato
                 0 = abilitato

  • bit 6      !GPPU : Enable Weak Pull-ups bit (GP0, GP1, GP3)
                 1 = disabilitato
                 0 = abilitato

  • bit 5     T0CS: Timer0 Clock Source Select bit
               1 = Transizione sul pin
    T0CKI
    (overrides la selezione del TRIS)
               0 = Transizione sul clock interno, FOSC/4

  • bit 4     T0SE : Timer0 Source Edge Select bit
                se T0CS= 0, T0SE è ignorato
                se T0CS = 1
              1 = transizione livello basso -> alto (rising) sul pin T0CKI
              0 = transizione livello alto -> basso (falling) sul pin T0CKI

  • bit 3     PSA : Prescaler Assignment bit
              1 =  prescaler assegnato al WDT
              0 =  prescaler assegnato al timer

  • bit 2:0   PS2:0: Prescaler Rate Select bits
                   TIMER0         WDT
                 000 =  1:2      000 =  1:1
                 001 =  1:4      000 =  1:2
                 010 =  1:8      000 =  1:4
                 011 =  1:16     000 =  1:8
                 100 =  1:32     000 =  1:16
                 101 =  1:64     000 =  1:32
                 110 =  1:128    000 =  1:64
                 111 =  1:256    000 =  1:128

In particolare:

T1CON bit Funzione Valore
T0CS 5 Questo bit seleziona la sorgente del clock di conteggio.
Da notare che la selezione del clock esterno sovra scrive una eventuale selezione diversa effettuata sul TRIS del pin T0CKI.
  • 1   segnale dal pin T0CKI (default)
  • 0    Fosc/4
T0SE 4 Questo bit seleziona il fronte di commutazione del clock sul quale il contatore incrementa.
E' valido solamente per il clock esterno.
  • 0  falling edge
  • 1 rising edge (default)
PSA 3 Questo bit seleziona l' assegnazione del prescaler
  • 0  al WDT (default)
  • 1  al timer

 

PS2:0 2:0 Questi tre bit definiscono il fattore di pre divisione.

Da notare che i valori impostati, a parità dei bit PS, sono diversi nel caso diprescaler applicato al WDT o al timer.

TIMER0 WDT
000 1:2  1:1
001 1:4 1:2
010 1:8 1:4
011 1:16 1:8
100 1:32 1:16
101 1:64 1:32
110 1:128 1:64
111 1:256 1:128
 
 

INTCON

Altrettanto INTCON non contiene solo bit di gestione del timer. Questa è la sua struttura:

INTCON

bit

7 6 5 4 3 2 1 0

nome

GIE

PEIE

T0IE

INTE

RBIE

T0IF

INTF

RBIF

funzione

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

default

0 0 0 0 0 0 0

x

  • bit 7     GIE : Global Interrupt Enable
               1 = enabled
               0 = disabled

  • bit 6     PEIE : Peripheral Interrupt Enable
                 1 = enabled
                 0 = disabled

  • bit 5     T0IE : TIMER0 Overflow Interrupt Enable
               
    1 = enabled
               0 = disabled

  • bit 4     INTE : RB0/INT External Interrupt Enable
                
    1 = enabled
                 0 = disabled

  • bit 3     RBIE : RB port change Interrupt Enable
                
    1 = enabled
                 0 = disabled

  • bit 2     T0IFTIMER0 Overflow Interrupt Flag
               1
    =  Timer0 interrupt
               0 =  no Timer0 interrupt

  • bit 1     INTIFRB0/INT Interrupt Flag
                
    1 =  RB0 interrupt
                 0 =  no RB0 interrupt

  • bit 0      RBIF :  RB port change Interrupt Flag
                 1 RB interrupt
                 0 = no RB interrupt

In particolare:

INTCON bit Funzione Valore
GIE 7 Questo bit abilità l' interrupt generale.
  • 1   abilitato
  • 0   disabilitato (default)
T0IE 5 Questo bit abilita l' interrupt specifico del Timer0.
  • 1   abilitato
  • 0   disabilitato (default)
T0IF 2 Questo bit è il flag che indica l' avvenuto overflow del contatore
  • 1   overflow avvenuto
  • 0   no overflow

 

Ovviamente INTCON non è disponibile sui Baseline, che non hanno gestione interrupt

  • Il bit T0IF è portato a 1 dall' evento di overflow e resta inalterato fino a che non viene cancellato da programma, una volta servito l' interrupt .
    L' omissione di questa precauzione fa si che, appena usciti dall' interrupt, esso venga nuovamente richiamato.
  • Va tenuto presente che, essendo il TIMER0 sempre attivo, potrebbe essere stato raggiunto un overflow tra il POR e l' inizializzazione del timer; quindi è opportuno cancellare il flag prima di attivare l' interrupt.

Se l' interrupt non è abilitato, sia a livello di T0IE che di GIE, l' overflow porta comunque il bit T0IF a 1. Questo è utile per una analisi in polling dello stato del contatore.
Anche nella gestione a polling, però, è obbligo ricordare la cancellazione del flag T0IF una volta verificato l' evento; in caso contrario non sarà più possibile discriminare i successivi overflow.

L' interrupt di TIMER0 è di tipo non periferico e viene abilitato al momento in cui, con T0IE=1, il bit GIE è portato a livello 1.
 

 

 

Copyright © afg. Tutti i diritti riservati.
Aggiornato il 09/04/13.