Čítače / časovače
Čí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 během
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í v 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í čítaná
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 registru TMOD,
řízení čítačů/časovačů provádíme nastavením 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 0 0 1 1 |
M0 0 1 0 1 |
Nastavený mód mód 0 mód 1 mód 2 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.
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.
Mód 2 - v módu 2 pracuje č/č jako 8-bitový čítač s přednastavením (tzv. RELOAD). 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.
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á standartní 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.
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ší.
Rozložení bitů v registru TCON
TF0,TF1 - příznakový bit přetečení čítače/časovače. 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).
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ě.