|
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
Moduł Timera/Licznika 0 posiada następujące cechy:
Rys.4-1 jest schematem blokowym modułu Timera 0 oraz preskalera współdzielonego z WDT (ang. Watch Dog Timer - timer licznika zegarowego).
Rys.4-1
Schemat blokowy Timera 0/Preskalera WDT

| Uwaga: | T0SE, T0CS, PSA, PS0-PS2 są bitami rejestru OPTION_REG. |
Tryb Timera zostaje wybrany przez wyzerowanie bitu T0CS (OPTION_REG[5]). W trybie tym moduł Timera 0 będzie zwiększał swój stan przy każdym cyklu instrukcji (bez preskalera). Jeśli rejestr TMR0 zostanie zapisany, to zwiększanie jest wstrzymywane przez dwa następne cykle instrukcji. Użytkownik może ominąć to zapisując odpowiednio poprawioną wartość do rejestru TMR0.
Tryb licznika jest wybierany przez ustawienie na 1 bitu T0CS (OPTION_REG[5]). W tym trybie moduł Timera 0 będzie zwiększał swój stan albo przy każdym narastającym lub opadającym zboczu sygnału na końcówce GP2/T0CKI. Zwiększające zbocze określane jest przez stan bitu kontrolnego T0SE (OPTION_REG[4]). Wyzerowanie bitu T0SE wybiera zbocze narastające.
| R/W-1 | R/W-1 | R/W-1 | R/W-1 | R/W-1 | R/W-1 | R/W-1 | R/W-1 |
| GPPU | INTEDG | T0CS | T0SE | PSA | PS2 | PS1 | PS0 |
| b7 | b6 ... b1 | b0 | |||||
| Legenda | |||
| R = bit odczytywalny | W = bit zapisywalny | U = bit niezaimplentowany, daje odczyt '0' | |
| -n = wartość przy POR | ‘1’ = bit ustawiony | ‘0’ = bit wyzerowany | x = bit o nieznanym stanie |
| bit 7 |
GPPU:
bit włączający oporniki podciągające w GPIO 1 = oporniki podciągające wyłączone w porcie GPIO 0 = oporniki włączone przez indywidualne wartości zatrzasków portu GPIO |
|||||||
| bit 6 | INTEDG: bit wyboru zbocza przerwania 1 = przerwanie przy narastającym zboczu na końcówce GP2/INT 0 = przerwanie przy opadającym zboczu na końcówce GP2/INT |
|||||||
| bit 5 | T0CS: bit wyboru źródła zegarowego timera
TMR0 1 = zmiana poziomu logicznego na końcówce GP2/T0CKI 0 = wewnętrzny zegar cyklu rozkazowego (CLKOUT) |
|||||||
| bit 4 | T0SE: bit wyboru zbocza źródła timera TMR0 1 = zwiększenie stanu TMR0 przy przejściu ze stanu wysokiego w niski na końcówce GP2/T0CKI 0 = zwiększenie stanu TMR0 przy przejściu ze stanu niskiego w wysoki na końcówce GP2/T0CKI |
|||||||
| bit 3 | PSA: bit przypisania preskalera 1 = preskaler przypisany do timera licznika zegarowego WDT 0 = preskaler przypisany do modułu TIMER0 |
|||||||
| bity 2-0 | PS2:PS0: bity wyboru podziału preskalera
|
Samego preskalera nie można odczytywać ani zapisywać. Po przydzieleniu go do
modułu Timera 0 wszystkie instrukcje zapisu do rejestru TMR0 (np.
CLRF 1, MOVWF 1,
BSF 1, x....itd.) spowodują wyzerowanie
preskalera. Po przydzieleniu preskalera do WDT (ang. Watch Dog
Timer, Timer Licznika Zegarowego) instrukcja
CLRWDT wyzeruje preskaler wraz z Timerem Licznika Zegarowego.
Przydział preskalera znajduje się w całości pod kontrolą programu (tzn. można go zmieniać "w locie" podczas wykonywania programu). Aby uniknąć niezamierzonego resetu mikrokontrolera, należy wykonać poniższą sekwencję instrukcji przy zmianie przydziału preskalera z Timera 0 na WDT:
BCF STATUS,RP0 ;Bank 0
CLRWDT ;Zeruj WDT
CLRF TMR0 ;Zeruj TMR0
;i preskaler
BSF STATUS,RP0 ;Bank 1
MOVLW b’00101111’ ;Wymagane, jeśli
MOVWF OPTION_REG ;PS2:PS0 ma mieć
CLRWDT ;stan 000 lub 001
;
MOVLW b’00101xxx’ ;Ustaw preskaler na
MOVWF OPTION_REG ;pożądany podział
BCF STATUS,RP0 ;Bank 0
|
Aby przełączyć przydział preskalera z modułu WDT na moduł Timera 0, użyj sekwencji rozkazów z przykładu poniżej. Ostrożność tę należy podjąć, nawet gdy moduł WDT jest wyłączony.
CLRWDT ;Zeruj WDT wraz z
;preskalerem
BSF STATUS,RP0 ;Bank 1
MOVLW b’xxxx0xxx’ ;Wybierz TMR0,
;preskaler oraz
;źródło zegara
MOVWF OPTION_REG ;
BCF STATUS,RP0 ;Bank 0
|
| Adres | Nazwa | Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | Po POR, BOD | Po pozostałych Resetach |
| 01h | TMR0 | Rejestr modułu timera 0 | xxxx xxxx | uuuu uuuu | |||||||
| 0Bh/8Bh | INTCON | GIE | PEIE | T0IE | INTE | GPIE | T0IF | INTF | GPIF | 0000 0000 | 0000 000u |
| 81h | OPTION_REG | GPPU | INTEDG | T0CS | T0SE | PSA | PS2 | PS1 | PS0 | 1111 1111 | 1111 1111 |
| 85h | TRISIO | — | — | TRISIO5 | TRISIO4 | TRISIO3 | TRISIO2 | TRISIO1 | TRISIO0 | --11 1111 | --11 1111 |
| Legenda: | — = niezaimplementowany bit, daje odczyt ‘0’, u = stan niezmieniony, x = stan nieznany, szare = niezaimplementowane. | |
| Szare tło oznacza bity nieużywane przez moduł Timera 0. |
![]() |
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.