Wbudowane układy timerów
Bartłomiejczyk Jarosław 131605
Układy licznikowe T1,T0
Mikrokontrolery rodziny 51 są zwykle wyposażone w co najmniej dwa
układy licznikowe- liczniki T0 i T1. Każdy z tych liczników składa
się z 8-bitowych połówek. Połówki te widziane są przez CPU jako
rejestry TH0 (bardziej znacząca część) TL0 (mniej znacząca część)
w przypadku T0 oraz odpowiednio TH1 i TL1 w przypadku licznika
T1. Każdy z obu liczników może pracować jako licznik (zliczanie
impulsów zewnętrznych) lub jako czasomierz (zliczanie cykli
maszynowych mikrokontrolera). Przy pracy w trybie czasomierza
inkrementacja licznika następuje w każdym kolejnym cyklu
maszynowym, a zatem maksymalna częstotliwość zliczania jest
równa 1/12 częstotliwości zegarowej mikrokontrolera. Niezależnie
od rodzaju funkcji (czasomierz/licznik), każdy z układów
licznikowych może działać w jednym z czterech trybów pracy:
Tryb 0 (1)
Tryby pracy liczników T0 i T1,źródło sygnałów
wejściowych oraz sposób sterowania licznikiem ustala
się przez wpisanie do rejestru TMOD odpowiedniego
słowa. Rejestr TMOD znajduje się w obszarze SFR pod
adresem niepodzielnym przez 8 i dlatego zmianę
stanu jego znaczników należy dokonywać poprzez
wpis całego bajtu.
Obydwa liczniki mają takie same układy współpracujące.
Rys.1. Schemat układów liczników T0 i T1 pracujących w trybie 0 i 1
Przełącznik doprowadzający sygnał do wejściowy do
liczników albo z wewnętrznego oscylatora poprzez
dzielnik :12, albo z zewnątrz mikrokontrolera poprzez
końcówki T0 i T1 portu P3. Przełącznik jest przełączany
znacznikiem C/T. Gdy C/T=0, to taktowanie liczników
odbywa się z układu wewnętrznego, a gdy C/T=1, to są
zliczane impulsy zewnętrzne.
Zespół bramek blokujących pracę liczników. Znacznik TRi
służy do programowego uruchamiania pracy licznika.
TRi= 0 licznik jest zatrzymany
TRi= 1 licznik pracuje
Praca licznika może być rónież uruchamiana sygnałem
zewnętrznym . Przy ustawieniu znacznika GATE=1
licznik pracuje gdy wejście INTi jest na wysokim
poziomie, jest natomiast zatrzymany, gdy wejście to jest
na poziomie niskim. Gdy znacznik GATE=0 praca
licznika nie zależy od stanu wejścia INTi.
Przerzutniki przepełnienia liczników TFi, umieszczone w
rejestrze TCON. Przepełnienie licznika Ti ( przejście ze
stanu 1 do 0 na wszystkich bitach licznika) powoduje
wpisanie stanu 1 do przerzutnika TFi. Jeżeli przerwanie
od licznika jest aktywne, to nastąpi wywołanie procedury
obsługi tego przerwania.
Wejścia bramkujące liczników są wspólne z wejściami
przerwań zewnętrznych dzięki czemu zewnętrzny sygnał
zamykający bramkę licznika może uruchomić system
przerwań.
Tryby pracy liczników wybiera się poprzez odpowiednie
ustawienie znaczników M0 i M1:
-Tryb 0
M1=0, M0=0
Tryb 0 został wprowadzony dla zachowania
kompatybilności z rodziną mikrokontrolerów MCS-48,
pierwowzorem rodziny ‘51. W trybie tym rejestr TL
pracuje w układzie dzielnika wstępnego o podziale przez
2
5
lub 5-bitowego licznika, a rejestr TH jako licznik lub
dzielnik 8-bitowy. Oba rejestry są połączone kaskadowo
(rys.1).
-
Tryb 1
M1=0, M0=1
Jest taki sam jak tryb 0 z tą różnicą że rejestr TL pracuje
jako licznik lub dzielnik 8-bitowy. Obydwa rejestry są
połączone kaskadowo tworząc 16-bitowy dzielnik lub
licznik (rys.1).
-
Tryb 2
M1=1, M0=0
W trybie 2 rejestry są połączone w konfiguracji dzielnika
8-bitowego z autoładowaniem, tzn. z zadawaniem stanu
początkowego po przepełnieniu rejestru(rys.2) .
Rys.2. Układ połączeń liczników T0 i T1 pracujących w trybie 2
Rejestr TL pracuje jako dzielnik właściwy, natomiast rejestr
TH służy jako bufor, którego zawartość przepisywana jest
do rejestru TL gdy nastąpi jego przepełnienie. Operacja ta
umożliwia otrzymanie dzielnika o zmiennym podziale,
przy czym należy pamiętać, że liczniki liczą w przód i
dlatego do bufora trzeba wpisywać uzupełnienie do 0FFh
liczby podziałowej. Licznik T1 pracujący w trybie 2 jest
często stosowany do taktowania portu szeregowego
mikrokontrolera.
-
Tryb 3
M1=1, M0=1
Tryb 3 występuje tylko dla licznika T0. W trybie tym rejestry
TL0 i TH0 pracują jako dwa niezależnie 8-bitowe
liczniki/dzielniki (rys.3.). Rejestr TL0 pracuje w strukturze
licznika T0 (znaczniki TR0,GATE, C/T oraz przerzutnik TF0).
Może więc być sterowany i testowany jak licznik T0 w trybie 0
i 1. Natomiast rejestr TH0 jest połączony na stałe z wyjściem
zegara wewnętrznego poprzez dzielnik :12 i jest bramkowany
znacznikiem TR1.
Wyjście tego rejestru jest połączone z przerzutnikiem TF1.
Dlatego gdy licznik T0 pracuje w trybie 3, to licznik T1 może
pracować w pozostałych trybach ale bez możliwości
bramkowania jego wejścia i testowania przepełnienia. W tej
sytuacji licznik T1 nadaje się tylko do taktowania portu
szeregowego. Wprowadzenie trybu 3 dla licznika T1 powoduje
jego zatrzymanie.
Rys.3. Układ połączeń licznika T0 pracującego w trybie 3
Przy zliczaniu impulsów wewnętrznych (C/T=0) rejestr jest
inkrementowany co jeden cykl maszynowy. Odpowiada to
1/12 częstotliwości oscylatora. Natomiast przy zliczaniu
impulsów zewnętrznych (C/T=1) stan odpowiedniego
wejścia licznika jest taktowany podczas każdego cyklu
maszynowego (rys.4).
Rys.4. Testowanie poziomów sygnałów wejściowych liczników
Jeżeli test wykaże stan wysoki wejścia w jednym cyklu
maszynowym oraz stan niski w następnym cyklu
maszynowym, to w kolejnym cyklu maszynowym nastąpi
inkrementacja licznika. Dlatego maksymalna
częstotliwość impulsów zewnętrznych zliczanych przez
liczniki T0 i T1 musi być mniejsza od 1/24 częstotliwości
oscylatora. Natomiast częstotliwość minimalna nie jest
niczym ograniczona.
Timer T2
W mikrokontrolerze 80C52 występuje dodatkowy licznik
nazywany T2. Podobnie jak licznik T0 i T1 jest on 16−bitowy.
Posiada jednak kilka dodatkowych funkcji, które rozszerzają
jego możliwości.
Podobnie jak w licznikach opisanych wcześniej licznik T2
składa się z dwóch bajtów TH2 (starszy) i TL2 (młodszy).
Podobnie jak T0 i T1 licznik T2 może pełnić rolę czasomierza,
czyli zliczać impulsy wewnętrzne pochodzące z zegara
procesora, może także zliczać impulsy zewnętrzne dzięki
alternatywnej funkcji jednego z pinów portu P1 a mianowicie
P1.0 – nóżka 1 procesora 8052.
Z licznikiem T2 w kostce 80C52 związany jest dodatkowy także
alternatywnie wykorzystywany pin portu P1 (zwany T2EX) a
mianowicie P1.1 – nóżka 2. Otóż jeżeli zachodzi potrzeba,
programista może wykorzystać tę końcówkę do zewnętrznego
bramkowania licznika T2, co bardzo często przydaje się
podobnie jak przy bramkowaniu liczników T0 i T1 sygnałami
INT0 i INT1.
I tak w przypadku gdy T2 pracuje jako licznik liczący zewnętrzne
impulsy, opadające zbocze na końcówce T2EX spowoduje
automatyczne natychmiastowe załadowanie licznika T2 – TH2 i
TL2 wartością zdefiniowaną w rejestrach RLDH.RLDL.
Jeżeli zaś licznik T2 pracuje w roli czasomierza, to wejście T2EX można
wykorzystać do automatycznego przepisania aktualnej wartości
rejestrów TH2.TL2 do rejestrów RLDH.RLDL. Można powiedzieć że
działanie w tym trybie (czasomierza) jest jakby odwrotne do sposobu w
trybie licznika. Wartość zostaje przepisana do rejestrów RLDH.RLDL a
nie odwrotnie jak to miało miejsce w przypadku pracy T2 w trybie
licznika impulsów zewnętrznych. W praktyce takie działanie umożliwia
np. bardzo dokładny pomiar przebiegów wolnozmiennych bez
konieczności stosowania dodatkowych układów scalonych.
Licznik T2, podobnie jak licznik T1, T2 może w zależności
od potrzeb, taktować port transmisji szeregowej.
W takim przypadku możliwe jest rozszerzenie zakresów
prędkości transmisji o dodatkowe wartości niedostępne
przy tradycyjnym taktowaniu portu poprzez licznik T1.