Układ czasowo-licznikowy

Układ czasowo- licznikowy (ang. timer- counter) umożliwia zliczanie impulsów zewnętrznych, podanych na wejście T1, czyli pracę w trybie licznika (ang. event counter), a także odmierzanie czasu opóźnień lub generowanie przerwań zegarowych o zadanej częstotliwości, czyli pracę w trybie czasomierza (ang. timer). W obu trybach układ pracuje identycznie - różne jest tylko źródło zliczanych impulsów.

Schemat blokowy układu czasowo- licznikowego pokazano na rysunku:

Podstawowym elementem jest 8-bitowy licznik T zliczający do przodu. Stan licznika może być odczytywany programowo (rozkaz MOV A,T) jak również może być do licznika wpisana nowa wartość (rozkaz MOV T,A). Sterowanie pracą licznika (start, stop) jest programowe. Po wyzerowaniu systemu (RESET) licznik zostaje zatrzymany.

Wykonanie rozkazu STRT CNT powoduje dołączenie do wejścia zegarowego licznika wejścia mikrokomputera -T1. Licznik zaczyna zliczać impulsy zewnętrzne podawane na T1, co oznacza, że układ zostaje uruchomiony w trybie licznika. Natomiast wykonanie rozkazu STRT T powoduje uruchomienie układu w trybie czasomierza. Licznik zlicza wewnętrzne impulsy zegarowe, których źródło jest teraz dołączone do jego wejścia. Uruchomiony licznik pracuje w sposób ciągły. Liczy mod 256, to znaczy następną wartością po wartości maksymalnej 255 = $FF jest zero. Zapisanie nowej wartości do licznika czy odczytanie jego stanu nie zakłócają liczenia. Wykonanie rozkazu STRT T może zmienić źródło zliczanych impulsów, czyli tryb pracy. Zatrzymanie zliczania (czyli odłączenie źródła impulsów od wejścia zegarowego licznika) następuje wyłączenie w wyniku wykonania rozkazu STOP TCNT lub wyzerowania systemu.

W chwili przepełnienie licznika, tzn. zmiany jego zawartości z 255 ($FF) na 0, jest wytwarzany sygnał przepełnienia, który:
- powoduje zapalenie (wpisanie 1) znacznika przepełnienia (ang. timer overflow flag) TF,
- jest sygnałem zgłoszenia przerwania.

Stan znacznika TF może być sprawdzany za pomocą rozkazu skoku warunkowego JTF, którego wykonanie powoduje wyzerowanie znacznika (poza tym TF jest zerowany tylko przy zerowaniu systemu).

Po uruchomieniu rozkazem STRT CNT układ pracuje w trybie licznika impulsów zewnętrznych podawanych na wejście T1. Stan wejścia T1 jest próbkowany w takcie S3 (w nowych układach rodziny MCS-48 w takcie S4) cyklu maszynowego. Wykrycie - przy dwóch kolejnych próbkach - zmiany stanu wejścia T1 z wysokiego na niski (opadające zbocze impulsu) powoduje zwiększenie o 1 zawartości licznika. Dla pewności działania, stan niski na wejściu T1 musi trwać co najmniej przez czas jednego cyklu maszynowego. Zawartość licznika może być zwiększana o 1 co najwyżej raz na trzy cykle maszynowe. Określa to maksymalną częstotliwość zliczanych impulsów równą: Fcntmax=1/(3Tcy) gdzie Tcy oznacza okres cyklu maszynowego. Wartości fcntmax dla najczęściej używanych rezonatorów kwarcowych zestawiono w tablicy:
Częstotliwość
kwarcu
Fxtal
MHz
Częstotliwość sygnału
na T0
Fclk=Fxtal/3
MHz
Czas cyklu
maszynowego
Tcy=1/15Fxtal
us
Okres taktowania
czasomierza
Tr=32Tcy
us
Max okres
przerwań zegarowych
Td=256Tr
ms
Max częstotliwość
impulsów na T1
Fcnt=1/3Tcy
kHz
4 1,33 3,75 120 30,42 88
6 2,0 2,50 80 20,48 133
8 2,67 1,875 60 15,36 177
11 3,67 1,36 43,6 11,17 244

Po uruchomieniu licznika rozkazem STRT T układ pracuje w trybie czasomierza, zliczając wewnętrzne impulsy zegarowe. Są to impulsy wyznaczające cykl maszynowy procesora, o częstotliwości Fxtal/15 (Fxtal -częstotliwość rezonatora kwarcowego). Są one dołączone do wejścia zegarowego licznika poprzez dzielnik częstotliwości przez 32 (5-bitowy preskaler). Zwiększenie zawartości licznika o 1 następuje zatem co 32 cykle maszynowe, a częstotliwość zliczanych impulsów jest równa Fxtal/480. Wartości liczbowe dla najczęściej używanych częstotliwości rezonatorów kwarcowych zestawiono w tablicy 2.1. Preskaler jest zerowany w chwili rozpoczęcia zliczania (wykonanie rozkazu STRT T). Żadna inna operacja (np. odczytywanie czy zapisywanie do licznika) nie zakłóca jego pracy.

Licznik pracujący w trybie czasomierza jest najczęściej używany do odmierzania opóźnień programowych lub generowania przerwań zegarowych. Jednostką czasu jest wartość 32* Tcy i takie jest minimalne opóźnienie, jakie można odmierzyć za pomocą układu czasowo-licznikowego. W celu odmierzenia zadanego czasu opóźnienia należy wpisać do licznika uzupełnienie do 256 czasu opóźnienia ( w jednostkach licznikowych), po czym uruchomić licznik. Sygnałem upływu czasu będzie ustawienie znacznika TF. Na przykład, w systemie z rezonatorem 6 MHz (jednostka licznikowa - 80 us) odmierzenia 4 ms (to jest 50 jednostek) można dokonać za pomocą następującej sekwencji rozkazów (przy założeniu, że licznik jest zatrzymany):

            MOV  A, # 206
            MOV  T,A     ; wpisanie do licznika wartości początkowej
                         ; uzupełnianie do 256 liczby 50 (256-50)
            ...
            STRT T	 ; uruchomienie licznika - początek opóźnienia
DELAY: 	    JTF  END     ;odmierzanie czasu - oczekiwanie na TF
	    JMP  DELAY
END:        STOP TCNT    ; upłynęły 4 ms - zatrzymanie licznika

Sprawdzanie stanu znacznika TF można dokonywać programowo, jak w powyższym przykładzie, lub wykorzystując system przerwań.

Stosując układ czasowo-licznikowy do generowania przerwań zegarowych, postępuje się podobnie, jak poprzednio z tym, że raz uruchomionego licznika nie należy zatrzymywać. Po stwierdzeniu ustawienia znacznika TF (po wyjściu z pętli sprawdzającej lub w programie obsługi przerwania) trzeba wpisać do licznika wartość okresu (właściwie uzupełnienie do 256 tej wartości). Powinno to być zrobione przed pierwszym zwiększeniem zawartości licznika o 1 po jego przepełnieniu, to znaczy przed upływem 32 cykli maszynowych.

Maksymalna wartość czasu opóźnienia czy okresu przerwań zegarowych, możliwa bezpośrednio do uzyskania, wynosi 256 x 32Tcy. Dłuższe okresy można odmierzać, zliczając programowo kilka opóźnień zmierzonych przez układ czasowo-licznikowy.

Rozdzielczość pomiaru czasu w trybie czasomierza (480/fxtal) może okazać się niewystarczająca. Większą rozdzielczość - nawet do 10 razy - można uzyskać, dołączając do wejścia T1 zewnętrzny sygnał zegarowy i uruchamiając układ w trybie licznikowym. Jako zewnętrzny sygnał zegarowy może być tu użyty generowany przez mikrokomputer sygnał ALE, po podzieleniu jego częstotliwości przez 3 (lub więcej).

Powrót