Čítače a č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 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čů.

Rozložení bitů v registru TMOD

Rozložení bitů v registru TMOD

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

Čítač/časovač n 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

Čítač/časovač n 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

Čítač/časovač n 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á standardbí 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

Čítač/časovač 0 v módu 2


POZN: Č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ší.

Rozložení bitů v registru TCON

Rozložení bitů v 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ě.


Zpět na hlavní stránku povídání

Copyright © Michal Fuksa 2001