|
Wyjście Spis treści Wstecz Dalej
Autor artykułu |
©2026 mgr Jerzy Wałaszek
|

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s
permission is not required when using copyrighted material in:
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
ATtiny11/12 udostępnia jeden 8-bitowy timer/licznik ogólnego zastosowania – timer/licznik 0. Timer/licznik 0 posiada sekcję wyboru częstotliwości zliczania z 10-bitowego timera. Timer/licznik 0 może być używany albo jako timer (do odmierzania czasu) o podstawie czasu wewnętrznego zegara, albo jako licznik podłączony do zewnętrznej końcówki, która wyzwala zliczanie.

Powyższy rysunek przedstawia schemat blokowy preskalera dla
timera/licznika 0.

Rysunek poniżej pokazuje schemat blokowy timera/licznika 0. 8-bitowy timer/licznik 0 może wybierać jako źródło zegara CK, preskalowany CK lub zewnętrzną końcówkę T0. Dodatkowo może zostać zatrzymany, jak podano w opisie rejestru sterowania timera/licznika 0 (ang. Timer/Counter0 Control Register – TCCR0). Znacznik przepełnienia TOV0 (przekroczenia wartości maksymalnej 0xFF) znajduje się w rejestrze znacznika przerwań od timera/licznika (ang. Timer/Counter Interrupt Flag Register – TIFR). Sygnały sterujące znajdują się w rejestrze sterowania timerem/licznikiem 0 (ang. Timer/Counter0 Control Register – TCCR0). Ustawienia przerwań dla timera/licznika 0 znajdują się w rejestrze maskowania przerwań od timera/licznika 0 (ang. Timer/Counter Interrupt Mask Register – TIMSK).

Gdy timer/licznik 0 jest taktowany zewnętrznie, to sygnał zewnętrzny jest synchronizowany z częstotliwością oscylatora mikroprocesora. Aby zapewnić poprawne próbkowanie zewnętrznego zegara, minimalny czas pomiędzy dwoma zboczami przejściowymi zegara zewnętrznego musi być równy co najmniej jednemu okresowi wewnętrznego zegara mikroprocesora. Sygnał zewnętrznego zegara jest próbkowany przy narastającym zboczu wewnętrznego zegara mikroprocesora.
Przy niskich wartościach podziału w preskalerze timer/licznik 0 daje możliwość zastosowania tam, gdzie potrzebna jest zarówno wysoka rozdzielczość jak i wysoka dokładność. Podobnie przy wyższych współczynnikach podziału preskalera timer/licznik 0 staje się przydatny przy funkcjach o niższej prędkości lub funkcjach z dokładnym odmierzaniem czasu dla rzadko występujących zdarzeń.
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x39 | - | - | - | - | - | - | TOIE0 | - | TIMSK |
| Zapis/Odczyt | O | O | O | O | O | O | Z/O | O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te bity są zarezerwowane w ATtiny11/12 i przy odczycie zawsze dają wartość 0.
Gdy bit TOIE0 zostanie ustawiony i bit I w rejestrze stanu (SREG) jest ustawiony, to zostanie uaktywnione przerwanie od przepełnienia timera/licznika 0. Odpowiedni wektor przerwania (pod adresem 0x003) jest wykonywany, gdy wystąpi przepełnienie w timerze/liczniku 0, tj. gdy zostanie ustawiony znacznik przepełnienia w rejestrze znacznika przerwania od timera/licznika 0 – TIFR.
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x38 | - | - | - | - | - | - | TOV0 | - | TIFR |
| Zapis/Odczyt | O | O | O | O | O | O | Z/O | O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te bity są zarezerwowane w ATtiny11/12 i przy odczycie zawsze dają wartość 0.
Bit TOV0 jest ustawiany, gdy wystąpi przepełnienie w timerze/liczniku 0. TOV0 jest zerowany sprzętowo przy wykonywaniu odpowiedniego wektora obsługi przerwania. Alternatywnie TOV0 można wyzerować przez zapis logicznej jedynki na pozycji jego bitu. Gdy są ustawione bity: I w SREG, TOIE0 (Timer/Counter0 Overf low Interrupt Enable – uaktywnienie przerwań przy przepełnieniu timera/licznika 0) w TIMSK, i TOV0, to zostaje wykonane przerwanie przy przepełnieniu timera/licznika 0.
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x33 | - | - | - | - | - | 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 bity są zarezerwowane w ATtiny11/12 i przy odczycie zawsze dają wartość 0.
Bity te wybierają źródło sygnału zegarowego dla timera/licznika 0 zgodnie z poniższą tabelą:
| CS02 | CS01 | CS00 | Opis |
| 0 | 0 | 0 | Stop, timer/licznik jest zatrzymany, brak sygnału zegarowego |
| 0 | 0 | 1 | CK |
| 0 | 1 | 0 | CK/8 |
| 0 | 1 | 1 | CK/64 |
| 1 | 0 | 0 | CK/256 |
| 1 | 0 | 1 | CK/1024 |
| 1 | 1 | 0 | Końcówka zewnętrzna T0 (nóżka nr 7), opadające zbocze |
| 1 | 1 | 1 | Końcówka zewnętrzna T0 (nóżka nr 7), narastające zbocze |
Warunek Stop (CS02:0 = 000) udostępnia funkcję włączania/wyłączania timera. Tryby podziału zegara CK w dół są skalowane bezpośrednio z sygnału CK zegara oscylatora. Jeśli jako sygnał zegarowy dla timera/licznika 0 wybrany zostanie tryb zewnętrznej końcówki, to zmiany poziomu sygnału na linii PB2 (T0) będą sterowały zliczaniem w liczniku nawet wtedy, jeśli końcówka ta została skonfigurowana jako wyjście. Ta cecha udostępnia użytkownikowi kontrolę programową nad zliczaniem..
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x32 | MSB | LSB | 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 |
Timer/licznik 0 jest zaimplementowany jako licznik zliczający do przodu (0,1,2...,255,0,1,2...) z dostępem odczytu i zapisu. Jeśli do licznika zostanie zapisana nowa zawartość, a źródło sygnału zegarowego jest obecne, to timer/licznik będzie kontynuował zliczanie od cyklu zegara następującym za operacją zapisu.
Licznik zegarowy (ang. Watchdog Timer) jest taktowany oddzielnym, wbudowanym w układ oscylatorem. Sterując preskalerem licznika zegarowego, można ustawiać okres czasu, po upływie którego licznik zegarowy przepełnia się i generuje reset mikrokontrolera. Instrukcja resetowania licznika zegarowego (ang, Watchdog Reset, WDR) – powoduje wyzerowanie licznika zegarowego i rozpoczęcie zliczania od nowa. W celu określenia okresu resetowania można wybrać osiem różnych długości cykli zegarowych. Jeśli upłynie okres resetowania bez następnego wyzerowania licznika zegarowego, ATtiny11/12 resetuje się i rozpoczyna wykonywanie programu od wektora resetu.
Aby zapobiec niezamierzonemu wyłączeniu licznika zegarowego, należy użyć specjalnej procedury wyłączającej. Zobacz do opisu rejestru sterowania licznikiem zegarowym (ang. Watchdog Timer Control Register, WDTCR).

| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
| 0x21 | - | - | - | WDTOE | WDE | WDP2 | WDP1 | WDP0 | WDTCR |
| Zapis/Odczyt | O | O | O | Z/O | Z/O | Z/O | Z/O | Z/O | |
| Wartość początkowa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Te bity są zarezerwowane w ATtiny11/12 i przy odczycie zawsze dają wartość 0.
Ten bit musi być ustawiony na 1, gdy jest zerowany bit WDE. W przeciwnym razie licznik zegarowy nie zostanie wyłączony. Po ustawieniu na 1, bit jest zerowany sprzętowo po upływie 4 cykli zegara. Zobacz poniżej na opis bitu WDE i procedury wyłączania licznika zegarowego.
Gdy bit WDE jest ustawiony na 1, licznik zegarowy jest aktywny i pracuje, a gdy bit WDE jest wyzerowany, licznik zegarowy jest wyłączony. Bit WDE można wyzerować tylko wtedy, gdy bit WDTOE jest ustawiony na 1. Aby wyłączyć licznik zegarowy, wykonaj poniższą sekwencję operacji:
Bity WDP2, WDP1 i WDP0 określają współczynnik podziału częstotliwości oscylatora licznika zegarowego w preskalerze, gdy licznik zegarowy został uaktywniony. Szczegóły podane są w poniższej tabeli:
| WDP2 | WDP1 | WDP0 | Liczba cykli oscylatora |
Typowy czas zliczania przy VCC = 2 V |
Typowy czas zliczania przy VCC = 3 V |
Typowy czas zliczania przy VCC = 5 V |
| 0 | 0 | 0 | 16K | 0,15 s | 47 ms | 15 ms |
| 0 | 0 | 1 | 32K | 0,30 s | 94 ms | 30 ms |
| 0 | 1 | 0 | 64K | 0,60 s | 0,19 s | 60 ms |
| 0 | 1 | 1 | 128K | 1,2 s | 0,38 s | 0,12 s |
| 1 | 0 | 0 | 256K | 2,4 s | 0,75 s | 0,24 s |
| 1 | 0 | 1 | 512K | 4,8 s | 1,5 s | 0,49 s |
| 1 | 1 | 0 | 1024K | 9,6 s | 3,0 s | 0,97 s |
| 1 | 1 | 1 | 2048K | 19,2 s | 6,0 s | 1,9 s |
| Uwaga: | Częstotliwość oscylatora licznika zegarowego zależy od napięcia zasilania, co pokazano
w rozdziale "Typowe Parametry". Instrukcja WDR powinna zawsze być wykonana przed uaktywnieniem licznika zegarowego. Zapewni to, iż okres resetu będzie w zgodzie z ustawieniami preskalera licznika zegarowego. Jeśli licznik zegarowy zostanie uaktywniony bez zerowania, może rozpocząć zliczanie od wartości różnej od zera. Aby zapobiec niezamierzonemu zresetowaniu mikrokontrolera, licznik zegarowy powinien być wyłączany lub zerowany przed zmianą ustawień jego preskalera. |
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 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.