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
|
IE
: 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
T0IF
: TIMER0 Overflow Interrupt Flag
1
=
Timer0 interrupt
0 =
no Timer0 interrupt
bit 1
INTIF :
RB0/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.
|