PIC High End Enhanced - PIC18
La famiglia dei PIC 18F è sviluppata a partire da alcuni criteri
leggermente differenti, rispetto ai Base e ai Mid, come ad esempio la memoria
programma non paginata, il set di istruzioni esteso e la tendenza ad una
maggiore efficienza nell' impiego con compilatori C.
Tra queste modifiche della struttura di base, troviamo anche il TIMER0.
In particolare, va considerato che i progettisti hanno fatto il possibile per
mantenere la più stretta compatibilità con le famiglie precedenti, per cui il
Timer0, per default, appare del tutto analogo a quanto visto in precedenza:
Come default si in tende la configurazione dei registri al reset del power on
(POR). In queste condizioni, TIMER0 è configurato in modo del tutto analogo a
quelli visti in precedenza.
Ci sono però delle differenze che devono essere valutate. Essenzialmente si
tratta del registro di controllo, che non è più OPTION_REG, ma T0CON
che è interamente dedicato al timer. Quindi anche i bit 7 e 6, che in OPTION_REG
avevano altra funzione, diventano due elementi della programmazione del timer.
T0CON
|
bit
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
nome
|
TMR0ON
|
T08BIT
|
T0CS
|
T0SE
|
PSA
|
T0PS2
|
T0PS1
|
T0PS0
|
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 TMR0ON
: controllo on/off di Timer0
1 =
Timer 0 attivo
0 =
Timer 0 disabilitato
-
bit 6 T08BIT
: operazione a 8 o 16 bit
1 =
Timer 0 a 8 bit
0 =
Timer 0 a 16 bit
-
bit 5
T0CS :
sorgente del clock
1 =
Transizione sul pin T0CKI
0 =
Clock interno
-
bit 4
T0SE :
edge detect del clock da T0CKI
1 =
high to low
0 =
low to high
-
bit 3 PSA
: assegnazione prescaler
1 =
Timer0 senza prescaler
0 =
Timer0 con prescaler
-
bit 2:0 T0PS2:0 :
impostazione prescaler
111
= 1:256
110
= 1:128
101
= 1 :64
100
= 1:32
011= 1:16
010 = 1:8
001 = 1:4
000 = 1:2
T0CON si differenzia da solamente per i bit
6 e 7
T0CON |
bit |
Funzione |
valore |
TMR0ON
|
7 |
TIMER0 è una periferica che non è sempre
attiva, come in precedenza, ma può essere attivata e disattivata con
questo bit.
Questa prestazione, inesistente nelle versioni del timer
controllate da OPTION, è funzionale alla riduzione dell' energia
impiegata dal microcontroller (applicazioni a basso consumo); però essa non dà
particolari problemi, se non viene considerata, in quanto al POR il TIMER0
è configurato come acceso.
|
- 0 disabilitato
- 1 abilitato (default)
|
T08BIT
|
6 |
Il timer, tipicamente a 8 bit, può essere
usato a 16 bit, ampliandone grandemente le possibilità. |
- 0 16 bit
- 1 8 bit (default)
|
Al POR,
i bit 7:6 si trovano
impostati a 1, ovvero con il timer attivato e in modalità a 8 bit. Quindi, se
questi bit non vengono scritti dal programma, il TIMER0 nei PIC18 è, per
default, compatibile con le versioni presenti su Baseline e Mid, dato che
gli altri bit del T0CON sono del tutto analoghi, sia per funzione che per
valore assegnabile, con quanto visto in precedenza.
Dunque, rispetto ad una scrittura fatta per un Base o Mid, non occorre alcuna
variazione del sorgente, se non il fatto di considerare che i bit 7 e 6 non
sono più attribuiti come in OPTION_REG. Una scrittura che tenga conto
della portabilità ed utilizzi label e non assoluti rende il problema poco
rilevante.
La scelta della modalità a 16 bit richiede un registro di conteggio a 16
bit, realizzato con una coppia di registri a 8 bit, TMR0L e TMR0H
Allo scopo di evitare glitch nel caricamento dei contatori, TMR0H non
è direttamente scrivibile o leggibile; la sua scrittura è effettuata
attraverso un buffer che viene caricato nel momento in cui si carica il registro
TMR0L.
Per default questa modalità è disabilitata; quindi il timer lavora a 8 bit
utilizzando il solo TMR0L.
Per contro, se l' impiego a 16 bit non è compatibile con PIC minori, ma
consente una maggiore precisione e/o un aumento del periodo generabile.
Come nel caso dei Base e Mid Enhanced, anche per i PIC18 il prescaler di
TIMER0 è dedicato e non condiviso con WDT.
Trovate una trattazione del TIMER0 per i PIC 18 qui.
|