Systemy wbudowane - Timer / Licznik
ZA timerto wyspecjalizowany rodzaj zegara, który służy do pomiaru odstępów czasu. Licznik czasu, który liczy od zera w górę do pomiaru upływającego czasu, jest często nazywany astopwatch. Jest to urządzenie, które odlicza od określonego czasu i służy do generowania opóźnienia czasowego, na przykład klepsydra to zegar.
ZA counterto urządzenie, które przechowuje (a czasami wyświetla), ile razy wystąpiło określone zdarzenie lub proces w odniesieniu do sygnału zegara. Służy do zliczania zdarzeń zachodzących poza mikrokontrolerem. W elektronice liczniki można dość łatwo zaimplementować za pomocą obwodów typu rejestrowego, takich jak przerzutnik.
Różnica między zegarem a licznikiem
Punkty, które odróżniają licznik czasu od licznika, są następujące:
Regulator czasowy | Licznik |
---|---|
Rejestr wzrastał dla każdego cyklu maszyny. | Rejestr jest zwiększany z uwzględnieniem zmiany z 1 na 0 w odpowiadającym mu zewnętrznym pinie wejściowym (T0, T1). |
Maksymalna częstotliwość zliczania to 1/12 częstotliwości oscylatora. | Maksymalna częstotliwość zliczania to 1/24 częstotliwości oscylatora. |
Zegar wykorzystuje częstotliwość zegara wewnętrznego i generuje opóźnienie. | Licznik wykorzystuje sygnał zewnętrzny do zliczania impulsów. |
Liczniki czasu 8051 i ich powiązane rejestry
8051 ma dwa timery, Timer 0 i Timer 1. Mogą być używane jako timery lub jako liczniki zdarzeń. Zarówno Timer 0, jak i Timer 1 mają szerokość 16-bitową. Ponieważ 8051 opiera się na architekturze 8-bitowej, każdy 16-bitowy jest dostępny jako dwa oddzielne rejestry niskobajtowego i starszego bajtu.
Zegar 0 Zarejestruj
Dostęp do 16-bitowego rejestru Timera 0 uzyskuje się jako młodszy i starszy bajt. Rejestr niskobajtowy nazywa się TL0 (młodszy bajt timera 0), a rejestr starobajtowy - TH0 (starszy bajt timera 0). Dostęp do tych rejestrów można uzyskać jak do każdego innego rejestru. Na przykład instrukcjaMOV TL0, #4H przenosi wartość do młodszego bajtu Timera # 0.
Rejestr czasowy 1
16-bitowy rejestr Timera 1 jest dostępny jako młodszy i starszy bajt. Rejestr niskobajtowy nazywa się TL1 (młodszy bajt timera 1), a rejestr starobajtowy nazywa się TH1 (starszy bajt timera 1). Dostęp do tych rejestrów można uzyskać jak do każdego innego rejestru. Na przykład instrukcjaMOV TL1, #4H przenosi wartość do młodszego bajtu Timera 1.
Rejestr TMOD (tryb timera)
Zarówno Timer 0, jak i Timer 1 używają tego samego rejestru do ustawiania różnych trybów pracy timera. Jest to rejestr 8-bitowy, w którym 4 dolne bity są zarezerwowane dla Timera 0, a górne cztery bity dla Timerów. W każdym przypadku dolne 2 bity są używane do ustawienia trybu zegara z wyprzedzeniem, a 2 górne bity są używane do określenia lokalizacji.
Gate - Po ustawieniu licznik czasu działa tylko wtedy, gdy INT (0,1) jest wysoki.
C/T - Bit wyboru licznika / timera.
M1 - Tryb bit 1.
M0 - Tryb bitu 0.
BRAMA
Każdy minutnik ma możliwość uruchamiania i zatrzymywania. Niektóre timery robią to przez oprogramowanie, inne przez sprzęt, a niektóre mają zarówno sterowanie programowe, jak i sprzętowe. Timery 8051 mają sterowanie programowe i sprzętowe. Uruchomienie i zatrzymanie timera jest kontrolowane przez oprogramowanie przy użyciu instrukcjiSETB TR1 i CLR TR1 dla timera 1 i SETB TR0 i CLR TR0 dla timera 0.
Do jego uruchomienia służy instrukcja SETB, która jest zatrzymywana przez instrukcję CLR. Te instrukcje uruchamiają i zatrzymują liczniki tak długo, jak GATE = 0 w rejestrze TMOD. Timery mogą być uruchamiane i zatrzymywane przez zewnętrzne źródło, ustawiając GATE = 1 w rejestrze TMOD.
C / T (ZEGAR / TIMER)
Ten bit w rejestrze TMOD jest używany do decydowania, czy zegar jest używany jako delay generator lub event manager. Jeśli C / T = 0, jest używany jako licznik czasu do generowania opóźnienia czasowego. Źródłem zegara do tworzenia opóźnienia czasowego jest częstotliwość kryształu 8051. Jeśli C / T = 0, częstotliwość kryształu dołączona do 8051 decyduje również o szybkości, z jaką zegar 8051 tyka w regularnych odstępach czasu.
Częstotliwość timera jest zawsze 1/12 częstotliwości kryształu dołączonego do 8051. Chociaż różne systemy oparte na 8051 mają częstotliwość XTAL od 10 MHz do 40 MHz, zwykle pracujemy z częstotliwością XTAL 11,0592 MHz. Dzieje się tak, ponieważ prędkość transmisji dla komunikacji szeregowej 8051.XTAL = 11.0592 umożliwia systemowi 8051 komunikację z komputerem PC bez błędów.
M1 / M2
M1 | M2 | Tryb |
---|---|---|
0 | 0 | 13-bitowy tryb timera. |
0 | 1 | 16-bitowy tryb timera. |
1 | 0 | 8-bitowy tryb automatycznego przeładowania. |
1 | 1 | Tryb rozlany. |
Różne tryby timerów
Tryb 0 (13-bitowy tryb timera)
Zarówno Timer 1, jak i Timer 0 w Trybie 0 działają jako liczniki 8-bitowe (z preskalerem dzielącym przez 32). Rejestr timera jest skonfigurowany jako rejestr 13-bitowy składający się ze wszystkich 8 bitów TH1 i 5 dolnych bitów TL1. Górne 3 bity TL1 są nieokreślone i należy je zignorować. Ustawienie flagi uruchomienia (TR1) nie czyści rejestru. Flaga przerwania timera TF1 jest ustawiana, gdy licznik przewraca się od wszystkich jedynek do wszystkich zer. Praca w trybie 0 jest taka sama dla timera 0, jak dla timera 1.
Tryb 1 (16-bitowy tryb timera)
Tryb timera „1” to 16-bitowy zegar i jest to powszechnie używany tryb. Działa w taki sam sposób, jak tryb 13-bitowy, z wyjątkiem tego, że używane są wszystkie 16 bitów. TLx jest zwiększany począwszy od 0 do maksymalnie 255. Po osiągnięciu wartości 255 TLx resetuje się do 0, a następnie THx jest zwiększany o 1. Ponieważ jest to pełny 16-bitowy zegar, licznik czasu może zawierać do 65536 różnych wartości i to nastąpi przepełnienie z powrotem do 0 po 65 536 cyklach maszynowych.
Tryb 2 (8-bitowe automatyczne ponowne ładowanie)
Oba rejestry timera są skonfigurowane jako liczniki 8-bitowe (TL1 i TL0) z automatycznym ponownym ładowaniem. Przepełnienie z TL1 (TL0) ustawia TF1 (TF0), a także przeładowuje TL1 (TL0) zawartością Th1 (TH0), która jest wstępnie ustawiana przez oprogramowanie. Przeładowanie pozostawia TH1 (TH0) bez zmian.
Zaletą trybu automatycznego przeładowania jest to, że możesz ustawić licznik czasu tak, aby zawsze zawierał wartość od 200 do 255. Jeśli używasz trybu 0 lub 1, będziesz musiał sprawdzić kod, aby zobaczyć przepełnienie, a w takim przypadku zresetuj licznik do 200. W takim przypadku cenne instrukcje sprawdzają wartość i / lub ładują się ponownie. W trybie 2 zajmuje się tym mikrokontroler. Po skonfigurowaniu licznika czasu w trybie 2 nie musisz się martwić sprawdzaniem, czy licznik czasu się nie przepełnił, ani też nie musisz martwić się o zresetowanie wartości, ponieważ sprzęt mikrokontrolera zrobi to za Ciebie. Tryb automatycznego przeładowania służy do ustalenia wspólnej szybkości transmisji.
Tryb 3 (tryb Split Timer)
Tryb timera „3” jest znany jako split-timer mode. Gdy Timer 0 jest ustawiony w trybie 3, staje się dwoma oddzielnymi 8-bitowymi timerami. Timer 0 to TL0, a Timer 1 to TH0. Oba liczniki liczą od 0 do 255 iw przypadku przepełnienia resetują się z powrotem do 0. Wszystkie bity timera 1 będą teraz powiązane z TH0.
Gdy Timer 0 jest w trybie podziału, rzeczywisty Timer 1 (tj. TH1 i TL1) może być ustawiony w trybach 0, 1 lub 2, ale nie można go uruchomić / zatrzymać, ponieważ bity, które to robią, są teraz połączone z TH0. Rzeczywisty zegar 1 będzie zwiększany z każdym cyklem maszyny.
Inicjalizacja timera
Wybierz tryb timera. Rozważ 16-bitowy zegar, który działa w sposób ciągły i jest niezależny od jakichkolwiek zewnętrznych pinów.
Zainicjuj TMOD SFR. Użyj najniższych 4 bitów TMOD i rozważ Timer 0. Zachowaj dwa bity, GATE 0 i C / T 0, jako 0, ponieważ chcemy, aby zegar był niezależny od zewnętrznych pinów. Ponieważ tryb 16-bitowy to tryb timera 1, wyczyść T0M1 i ustaw T0M0. W rzeczywistości jedynym bitem do włączenia jest bit 0 TMOD. Teraz wykonaj następującą instrukcję -
MOV TMOD,#01h
Teraz zegar 0 jest w trybie zegara 16-bitowego, ale zegar nie działa. Aby uruchomić timer w trybie pracy, ustaw bit TR0, wykonując następującą instrukcję -
SETB TR0
Teraz Timer 0 natychmiast rozpocznie zliczanie, zwiększając go raz na każdy cykl maszyny.
Czytanie timera
16-bitowy zegar można odczytać na dwa sposoby. Odczytaj aktualną wartość licznika jako 16-bitową liczbę lub wykryj, że licznik czasu się przepełnił.
Wykrywanie przepełnienia timera
Kiedy licznik czasu przekracza swoją najwyższą wartość do 0, mikrokontroler automatycznie ustawia bit TFx w rejestrze TCON. Więc zamiast sprawdzać dokładną wartość licznika czasu, można sprawdzić bit TFx. Jeśli ustawiono TF0, to Timer 0 przepełnił się; jeśli TF1 jest ustawione, to Timer 1 przepełnił.