Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autor artykułu: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
Poniższy rysunek pokazuje uproszczony schemat blokowy 8-bitowego timera/licznika. Rejestry we/wy dostępne dla mikroprocesora, łącznie z bitami we/wy i końcówkami we/wy są wypisane tłustym drukiem. Rejestry licznika i położenia bitów są wymienione w podrozdziale "Opis rejestrów".
Rejestr timera/licznika (TCNT0) jest rejestrem 8-bitowym. Wszystkie sygnały żądań przerwań są widoczne w rejestrze znaczników przerwań timera (ang. Timer Interrupt Flag Register, TIFR). Wszystkie przerwania są indywidualnie maskowane za pomocą rejestru maski przerwań timera (ang. Timer Interrupt Mask Register, TIMSK). Rejestry TIFR i TIMSK nie są pokazane na obrazku powyżej, ponieważ są one współdzielone z innymi modułami liczników.
Timer/licznik może być taktowany wewnętrznie poprzez preskaler lub przez zewnętrzne źródło zegarowe na końcówce T0. Układ wyboru zegara określa, które źródło zegara oraz które zbocze impulsów zegarowych będzie używane przez timer/licznik do zwiększania jego wartości. Timer/licznik jest nieaktywny, jeśli nie zostało wybrane żadne źródło zegarowe. Wyjście z układu wyboru zegara jest określane jako zegar timera (ang. timer clock, clkT0).
Wiele rejestrów i odwołań do bitów w tym rozdziale jest zapisanych w postaci ogólnej. Mała litera “n” zastępuje numer timera/licznika, w tym wypadku 0. Jednakże w programie należy używać precyzyjnych nazw, np. TCNT0 przy dostępie do wartości timera/licznika 0 itd.
Poniższe definicje są intensywnie używane w dalszej części tej instrukcji:
Stała | Opis |
BOTTOM | Licznik osiąga BOTTOM, gdy jego wartość staje się równa 0x00 |
MAX | Licznik osiąga MAX, gdy jego wartość staje się równa 0xFF (dziesiętnie 255). |
Opis sygnałów (sygnały wewnętrzne):
Licznik jest zwiększany przy każdym takcie zegara timera
(clkT0). Zegar clkT0 może być generowany z
zewnętrznego lub z wewnętrznego źródła zegarowego, wybieranego bitami wyboru
zegara (CS02:0). Gdy nie jest wybrane żadne źródło
zegarowe
Wykres czasowy timera/licznika, bez preskalera
Kolejny rysunek pokazuje te same dane czasowe, lecz z włączonym preskalerem.
Wykres czasowy
timera/licznika, z preskalerem (fclk_I/O/8)
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x33 (0x53) | – | – | – | – | – | CS02 | CS01 | CS00 | TCCR0 |
Zapis/Odczyt | O | O | O | O | O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te trzy bity wyboru zegara wybierają źródło zegarowe, które będzie używane przez timer/licznik 0.
CS02 | CS01 | CS00 | Opis |
0 | 0 | 0 | Brak źródła zegarowego (timer/licznik 0 jest zatrzymany). |
0 | 0 | 1 | clkI/O/1 (bez preskalowania). |
0 | 1 | 0 | clkI/O/8 (z preskalera). |
0 | 1 | 1 | clkI/O/64 (z preskalera). |
1 | 0 | 0 | clkI/O/256 (z preskalera). |
1 | 0 | 1 | clkI/O/1024 (z preskalera). |
1 | 1 | 0 | Zewnętrzne źródło zegara na końcówce T0. Zliczanie przy zboczu opadającym. |
1 | 1 | 1 | Zewnętrzne źródło zegara na końcówce T0. Zliczanie przy zboczu narastającym. |
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x32 (0x52) | TCNT0[7:0] | TCNT0 | |||||||
Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Rejestr timera/licznika daje bezpośredni dostęp odczytu i zapisu do 8-bitowego modułu licznika timera/licznika 0.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x39 (0x59) | OCIE2 | TOIE2 | TICIE1 | OCIE1A | OCIE1B | TOIE1 | – | TOIE0 | TIMSK |
Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Gdy bit TOIE0 jest zapisany logiczną jedynką, a bit I w rejestrze stanu SREG jest ustawiony na jeden, są uaktywniane przerwania od przepełnienia w timerze/liczniku 0. Odpowiednie przerwanie jest wykonywane, jeśli wystąpi przepełnienie w timerze/liczniku 0, tj. gdy jest ustawiany bit TOV0 w rejestrze znaczników przerwań timerów/liczników – TIFR.
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
0x38 (0x58) | OCF2 | TOV2 | ICF1 | OCF1A | OCF1B | TOV1 | – | TOV0 | TIMSK |
Zapis/Odczyt | Z/O | Z/O | Z/O | Z/O | Z/O | Z/O | O | Z/O | |
Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Bit TOV0 jest ustawiany na jeden, gdy w timerze/liczniku 0 wystąpi przepełnienie. TOV0 jest zerowany sprzętowo przy wykonaniu odpowiedniego wektora obsługi przerwania. Alternatywnie TOV0 jest zerowany przez zapis logicznej jedynki do tego znacznika. Gdy są ustawione na jeden bit I w rejestrze SREG, bit TOIE0 (włączenie obsługi przerwań od przepełnienia timera/licznika 0) i bit TOV0, to zostanie wykonane przerwanie od przepełnienia timera/licznika 0.
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2024 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.