Čítače a časovače tvoří nepostradatelnou součást mikroprocesoru.
Funkce čítače/časovače je zde stejná jako u jiných zařízení číslicové techniky -
čítač spravuje určité paměťové místo, ke kterému přičítá jedničku na základě
zjištění náběžné nebo sestupné hrany sledovaného signálu. Sledovaný signálem je
u čítače nějaký vnější signál, např. výstupní signál z indukčního nebo
fotoelektrického čidla. Časovač také spravuje určité paměťové místo, ke kterému
přičítá jedničku, funguje také jako čítač, ale na rozdíl od čítače je zde
sledovaným signálem nějaký vnitřní signál se známým průběhem a konstantní
frekvencí (tzv. hodinový signál). Časovač se používá k vytvoření určitého
časového intervalu, nejčastěji ve funkci zpoždění. Mikroprocesor 8051 má dva
16-bitové čítače/časovače. Lomítko mezi čítačem a časovačem v předchozí větě
znamená, že jeden z nich může pracovat jako čítač nebo časovač, nebo mohou oba
pracovat jako čítače nebo oba jako časovače. Oba čítače/časovače (čítač/časovač0
a čítač/časovač1) pracují jako vzestupné, tzn. obsah paměťového místa, které
spravují, se vždy inkrementuje. Paměťovým místem je zde registr TH0,TL0 pro
čítač/časovač0 a TH1,TL1 pro čítač/časovač1. TH představuje vyšší byte, TL nižší
byte z celkového 16-bitového obsahu čítače/časovače. Pokud je nastavena
funkce č/č jako čítač, pak se ve stavu S5P2 (viz stránka Časování centrální
procesorové jednotky) každého strojového cyklu provádí vzorkování vstupů T0
a T1 (T0 je pro č/č0, T1 je pro č/č1). Je-li zjištěna v jednom cyklu hodnota na
vstupu jako log.1 a v dalším cyklu jako log.0 (tedy sestupná hrana), pak se k
obsahu příslušného čítače (registru) přičte jednička. Nová hodnota obsahu čítače
se nastaví ve stavu S3P1 cyklu následujícím za cyklem, ve kterém byla zjištěna
změna. Protože zjištění změny na vstupech mikroprocesoru T0 a T1 trvá 2 strojové
cykly, je maximální čítáná frekevnce vnějšího signálu 1/24 frekvence oscilátoru
mikroprocesoru. Logická úroveň čítaného signálu musí zůstat nezměněna vždy
alespoň 1 strojový cyklus. Z uvedeného vyplývá, že při použití 12MHz krystalu je
maximální vstupní frekvence čítaného signálu 0,5MHz. Minimální frekvence
čítaného signálu není omezena. Pokud je nastavena funkce č/č jako časovač,
je zdrojem čítaného signálu vnitřní oscilátor mikroprocesoru. Jednička se pak k
obsahu registru TH a TL příslušného časovače přičítá za každý strojový cyklus,
který je tvořen 12 periodami oscilátoru. Z toho tedy vyplývá maximální vstupní
frekvence časovače 1MHz při 12Mhz krystalu. Konfiguraci čítačů/časovačů
provádíme nastavením SFR registru TMOD, řízení čítačů/časovačů provádíme
nastavením SFR registru TCON.
TMOD - Registr režimů
čítačů/časovačů (Timer/Counter Mode Control) Skládá se ze dvou čtveřic bitů
příslušejících každému ze dvou čítačů/časovačů.
Popis jednotlivých bitů registru
TMOD:
GATE - Řízení hradlování. Je-li GATE=1, potom čítač/časovač n
(n=0,1) je aktivován (čítá) při vstupu INTn=1 a
TRn=1, kde TRn je bit z registru TCON. V tomto režimu je činnost čítače
ovlivňována nejenom programově pomocí bitu TRn, ale zároveň i pomocí vnějšího
signálu přivedeného na vstup INTn (viz obr.1). Je-li
GATE=0, potom čítač/časovač n je aktivní pro TRn=1 (čítač je řízen pouze
programově).
C/T - Volba čítač/časovač. Bit
rozhoduje o reřimu čítače/časovače. Je-li C/T=0,
potom se jedná o režim časovače, kdy se na čítací vstup přivádí hodinový signál,
který je vytvořen z vnitřního hodinového synchronizačního signálu mikroprocesoru
vydělením hodnotou 12 (tj. fosc:12). Je-li C/T=1, potom se jedná o režim čítače vnějších událostí na
vstupu Tn (I/O pin mikroprocesoru).
M1,M0 - Kombinací těchto bitů se
volí jeden ze čtyř módů čítače/časovače. V módech 0, 1 a 2 pracují
čítače/časovače 0 a 1 jako samostatné, na sobě nezávislé čítače/časovače, tzn.
každý č/č má svůj bit TRn,Tn,INTn,TFn. Č/č0 tedy
může pracovat v módu0, č/č1 může klidně pracovat v módu2 nebo mohou č/č0 i č/č1
pracovat ve stejném módu, třeba módu2. Výjimku ale představuje mód3. Pokud č/č0
pracuje v módu 3, je tento č/č rozdělen na 2 samostané 8-bitové čítače s tím, že
jeden z těchto 8-bitových čítačů využívá řídící a příznakový bit č/č1, č/č1 pak
z toho důvodu nepracuje v "plnohodnotném" režimu - blíže viz popis módu 3. Mód 3
může být navolen pouze u č/č0.
M1
M0
Nastavený mód
0
0
mód 0
0
1
mód 1
1
0
mód 2
1
1
mód 3
Mód 0 - čítač/časovač v tomto módu pracuje jako 8
bitový a je tvořen registrem THn. Tomu je předřazen 5-bitový registr TLn, který
pracuje jako dělič 32. Osmibitový čítač THn tedy čítá impulzy vydělené 5-bitovým
předděličem tvořeným spodními bity registru TLn, je tak dosaženo efektu jakoby
13-bitového čítače. Pokud dojde k přetečení obsahu čítače (přechod ze samých
jedniček na samé nuly v THn), nastaví se příslušný příznakový bit TFn v registru
TCON, který můžeme využít jako zdroj přerušení mikroprocesoru. Vstup čítaného
signálu do č/č je povolen tehdy, je-li TRn=1 (č/č je spuštěn) a současně s ním
je GATE=0 nebo INTn=1.
Obr. 1 Čítač/časovač v módu
0
Mód 1 - mód 1 je stejný jako mód 0 s tím rozdílem, že
registry THn a TLn tvořící čítač jsou oba 8-bitové a vytváří tak 16-bitový
čítač. Dojde-li k přetečení čítače, nastaví se příznak TFn.
Obr.
2 Čítač/časovač v módu 1
Mód 2 - v módu 2 pracuje č/č jako 8-bitový čítač s
přednastavením. Obsah čítače představuje registr TLn, v registru THn je uložena
předvolba čítače. Po přetečení obsahu čítače (přechod ze samých jedniček na samé
nuly v TLn) je obsah čítače TLn automaticky nastaven na hodnotu THn. Programové
nastavení nové hodnoty v registru THn neovlivňuje současný stav čítače TLn.
Obr.
3 Čítač/časovač v módu 2
Mód 3 - v módu 3 je čítač/časovač0 rozdělen na dva
samostatné 8-bitové čítače TH0 a TL0. Čítač TL0 využívá standardní signály
C/T, GATE, TR0, INT0 a
TF0. Čítač TH0 pracuje ve funkci časovače a je ovládán pouze řídícím bitem TR1.
Při přetečení nastavuje příznak TF1. Pracuje-li čítač/časovač0 v módu 3, potom
čítač/časovač1 může pouze generovat přenosovou rychlost pro sériový kanál nebo
může být použit v případě, kdy nebudeme využívat přerušení. Protože bit TR1 je
využit pro řízení č/č0, je zastavení nebo spuštění č/č1 ovládáno jeho nastavením
do módu 3 nebo zrušením módu 3.
Obr. 4 Čítač/časovač 0 v
módu 3
Časovač 1 můžeme mimo jiné využít ke generování
přenosové rychlosti sériového kanálu, pracujícího v módu 1 nebo 3 (viz
stránka Sériový
kanál).
TCON - registr
řízení čítače/časovače (Timer/Counter Control) Čísla 0 nebo 1 v symbolických
označeních bitů značí číslo čítače/časovače, ke kterému přísluší.
Popis jednotlivých bitů registru TCON
TF0, TF1 - příznakový bit přetečení čítače/časovač. Bit
je hardwarově nastaven při přechodu obsahu čítače z maximální hodnoty do nuly.
Bit je automaticky vynulován při přechodu procesoru do odpovídajícího obslužného
podprogramu přerušení.
TR0, TR1 - spuštění čítače/časovače. Bit, který
ovládáme programově, zajišťuje spuštění nebo zastavení příslušného čítače (TRn=1
–>> spuštění čítače, TRn=0 –>> zastavení čítače). Je-li v registru
TMOD příslušného čítače nastaven bit GATE=1, pak o spuštění/zastavení čítače
rozhoduje vstupní signál INTn (bit TRn musí být také
nastaven na log.1, viz obr. 1 až 4).
IE0, IE1 - přijetí vnějšího
přerušení. Příslušný bit je nastaven při sestupné hraně nebo úrovni log.0 na
vstupu vnějšího přerušení INTn v závislosti na stavu
konfiguračního bitu ITn. Po přechodu procesoru do obslužného podprogramu
příslušného přerušení je bit automaticky vynulován.
IT0, IT1 -
konfigurace aktivace vnějšího přerušení. Je-li ITn=1, je žádost o vnější
přerušení aktivována sestupnou hranou signálu na vstupu INTn. Je-li ITn=0, je žádost aktivována úrovní log.0 na
vstupu INTn. Je-li signál na vstupu INTn po dlouhou dobu v log.0, může být přerušení vyvoláno
i několikrát za sebou, pokud doba vykonání obslužného podprogramu přerušení je
kratší než doba, po kterou je vstup INTn v úrovni
log.0. Bity se nastavují i nulují programově.