Pag. 16
Contatori/Timers
L'8051 possiede due registri timer/contatori a 16 bit. In
funzionamento timer il registro viene incrementato
ogni ciclo macchina. Poiché un ciclo macchina consiste di 12
periodi di clock, il conteggio avviene ad 1/12 della frequenza
dell'oscillatore che al massimo può essere di 12 MHz.
In funzionamento contatore, il registro viene incrementato
per ogni transizione da 1 a O del corrispondente terminale di
ingresso (T0 e T1). Poiché il riconoscimento di una
transizione richiede due cicli macchina, la massima frequenza di
conteggio è di 1/24 della frequenza del clock.
Registro TMOD
I1 registro TMOD definisce la modalità di
funzionamento (timer oppure contatore), il modo operativo
e I'abilitazione dei terminali INTx come segnali di
start/stop conteggio per i due timer/contatori:
| GATE |
C/T |
M1 |
MO |
GATE |
C/T |
M1 |
M0 |
| Timer 1 |
Timer0 |
- GATE: con GATE = 1 conteggio viene controllato da
INTx (INTx=1: conteggio abilitato INTx=0: conteggio
disabilitato. Se GATE = 0 il conteggio è sempre
abilitato (ammesso che TRx sia = 1, vedi figura) .
- C/T : questo bit seleziona la funzione
contatore (C/T= 1) oppure timer (C/T = 0).
- M1, MO: selezionano uno tra i quattro modi
operativi:
- Modo 0 (M1 = 0, M0 = 0): ciascun timer in
modo 0 è un contatore ad 8 bit con un divisore per 32
(in totale 13 bit). Questo modo operativo è compatibile
con il funzionamento del timer de11'8048, un altro
single-chip della Intel.
Quando il conteggio passa dalla configurazione 11 ... 1
alla configurazione 00 ... 0, il flag TF1 (flag di
overflow nel registro TCON)
viene automaticamente posto ad 1 e viene generata
un'interruzione (se abilitata).
Se GATE = O il conteggio è abilitato quando TRx = 1.
Se GATE = 1 il conteggio è abilitato quando TRx = 1 e
INTx = 1.
I1 conteggio può essere effettuato sia tramite il clock
interno (C/T =0 ovvero timer) sia tramite un segnale
esterno applicato al terminale Tx (C/T = 1, ovvero
contatore).
Il registro a 13 bit è costituito dagli 8 bit del
registro THx e dai 5 bit del registro TLx. I tre bit piu
significativi del registro TLx vengono ignorati.
- Modo 1 (M1 = 0, M0 = 1): è identico al
modo 0 eccetto per il fatto che il registro contatore è
utilizzato interamente a 16 bit (THx e TLx).
- Modo 2 (M1 = 1, M0 = 0): utilizza un
registro contatore ad 8 bit (TLx) ed effettua un
caricamento automatico a fine conteggio.
Quando si verifica I'overflow (termine conteggio) il flag
TFx viene posto ad 1 (Generazione di un'interruzione, se
abilitata) e il registro TLx viene ricaricato con il
contenuto del registro THx. Il conteggio riprende fino ad
un nuovo overflow.
Il valore in THx deve essere pre-impostato via software.
- Modo 3 (M1 = 1, M0 = 1): il timer 1
mantiene il proprio conteggio.Ciò equivale a porre TR1 =
0.
I1 timer 0 in modo 3 utilizza TH0 e TL0 come due
contatori separati ad 8 bit. TL0 sfrutta i bit di
controllo del timer 0 (GATE, C/T, TR0,INT0 e TF0). TH0
funziona da timer contando i cicli macchina e utilizzando
i bit TR1 e TF1 del timer 1. L'interruzione
apparentemente generata dal timer 1 è quindi
effettivamente proveniente dal registro TH0 del timer 0.
Timer/Counter Modo 0 : Contatore a
13 bit
Timer/Counter Modo 2 : Contatore a 8
bit con autoload
Timer/Counter 0 Modo 3 : Due contatori
a 8 bit
Pag. 18
Il registro TCON è il
registro di controllo dei due timer/contatori:
| Bit di controllo
Timers |
Bit controllo
interrupts |
| TF1 |
TR1 |
TF0 |
TR0 |
IE1 |
IT1 |
IE0 |
IT0 |
- TF1 (TCON.7): flag di overflow di conteggio del
timer 1. Viene settato all'overflow del timer, nel caso
timer1 sia abilitato a chiedere l'interruzione (ET1= 1), la CPU resetta TF1
e salta alla routine di servizio che si trova
all'indirizzo 001BH della memoria programmi.
- TR1 (TCON.6): bit di controllo timer 1; viene
modificato via software e permette di abilitare (TR1=1) o
disabilitare (TR1=0) al conteggio del timer 1.
- TF0 (TCON.5): flag di overflow di conteggio del
timer 0. Viene settato all'overflow del timer, nel caso
timer 0 sia abilitato a chiedere l'interruzione (ET0= 1), resetta TF0
e salta alla routine di servizio che si trova
all'indirizzo 000BH della memoria programmi
- TR0 (TCON.4): bit di controllo timer 0; viene
modificato via software e permette di abilitare (TR0=1) o
disabilitare (TR0=0) al conteggio del timer 0.
- IE1 (TCON.3): flag che indica il verificarsi di un
fronte sulla linea di interruzione 1 (#INT1). Viene impostato
dall'hardware e resettato quando l'interruzione viene
asservita.
- IT1 (TCON.2): flag di controllo del tipo di
interruzione. Viene impostato via software e permette di
definire se I'interruzione deve partire su un fronte di
discesa (IT1=1) oppure sul livello basso (IT1=0) sul
terminale #INT1 .
- IE0 (TCON. 1): flag che indica il verificavsi di
un fronte di discesa sulla linea di interruzione 0 (#INT0). Viene impostato
dall'hardware e resettato quando I'interruzione viene
asservita.
- IT0 (TCON.O): flag di controllo del tipo di
interruzione. Viene impostato via software e permette di
definire se l'interruzione deve scattare su un fronte di
discesa (IT0=1) oppure sul livello basso (IT0=0) sul
terminale #INT0