CHƯƠNG 4
I
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
1. Bô(cid:3) định thời TIMER0
- Bộ định thời TIMER0 là bô(cid:31) định thời / bô(cid:31) đếm 8 bit.
- Bao gồm 1 bô(cid:31) tiền định ti% lê(cid:31) 8 bit lập trình được
(Prescaler).
- Có Bit chọn xung Clock nội hay bên ngoài.
- Có Bit chọn xung Clock nội hay bên ngoài.
- Có Bit lựa chọn cạnh tác động của xung Clock.
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
a. Bô(cid:3) tiền định ti(cid:12) lê(cid:3) (Prescaler)
Là bô(cid:3) đếm 8 bit được dùng làm bô(cid:31) tiền định ti% lê(cid:31)
cho Timer0 hoặc hậu định ti% lê(cid:31) cho bô(cid:31) WDT.
- Bit PSA là bit chọn dùng cho Timer hay WDT.
- 3 bit PS2 : PS0 sẽ xác định gia; trị ti% lê(cid:31).
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
b. Hoạt động bô(cid:3) định thời TIMER0
Timer0 có 2 chê; đô(cid:31) hoạt động được lựa chọn bởi
bit T0CS ( OPTION<5> ).
- Ở chê(cid:19) đô(cid:3) định thời: thanh ghi TMR0 sẽ tăng lên
sau mỗi chu kyB máy ( với điều kiện Prescaler không
có tác dụng hoặc có ti(cid:18) lê(cid:19) là 1:1 )
- Ở chê(cid:19) đô(cid:3) đếm xung: TMR0 sẽ tăng lên khi có
sườn cạnh lên hay sườn cạnh xuống (qui định bởi
bit T0SE) xuất hiện tại chân T0CLK.
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
- Khi Timer0 dùng xung Clock ngoài, ta phải đảm
bảo xung Clock ngoài đồng bô(cid:31) với xung Clock nội.
- Với ti% lê(cid:31) bô(cid:31) Prescaler là 1:1. Nguồn xung Clock
ngoài sẽ đồng bô(cid:31) với xung Clock nội bằng cách lấy
mẫu tại chu kyB Q2 vaB Q4 của xung Clock nội.
- Do đo;, trong 1 chu kyB của xung Clock ngoại, thời
gian trạng thái cao (Ton) hoặc trạng thái thấp (Toff)
phải ít nhất là 2 Tosc
I
DATA BUS
Fosc/4
8
synchronize
TMR0
scaled clock
T0CKI
pin
PS2 PS1
PS0
TMR0
RATE
prescaler
0
0
0
1:2
Watchdog Timer
WDT out
WDT out
1
1
0
0
0
0
1:4
1:4
0
0
1
1:8
1
0
1
1:16
RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0
0
1
0
1:32
OPTION
1
1
0
1:64
Prescaler Assignment
1= prescaler assigned to WDT
0= prescaler assigned to Timer 0
0
1
1
1:128
1
1
1
1:256
TMR0 Clock
Source Select
1 = T0CKI, 0 = Fosc/4
Source Edge Select
1 = High-to-Low
0 = Low-to-High
Hình 1: Cấu trúc Bộ định thời TIMER0
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
c. Ngắt TIMER0
-Ngắt Timer0 xảy ra khi tràn bô(cid:31) đếm TMR0: FF – 00h
-Khi tràn T0IF = 1. CơB này được xóa bằng phần mềm.
-Ngắt Timer0 không làm PIC thoát khỏi chê(cid:19) đô(cid:3) ngủ.
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
d. Khởi tạo TIMER0
-Chương trình khởi tạo TIMER0 ở chê; đô(cid:31) Clock nội
; Xóa thanh ghi TMR0 CLRF TMR0
CLRF INTCON ; Không cho phép ngắt
BSF
BSF STATUS, RP0 ; Chọn Bank1
STATUS, RP0 ; Chọn Bank1
MOVLW 0xC3 ; Không cho phép Port B có trơ(cid:18) treo
RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0
OPTION
; Ngắt khi có 1 cạnh lên ở MOVWF OPTION_REG
chân RB0. ;Timer0 tăng khi có xung. (RUN)
;Tỉ lê(cid:19) bô(cid:19) tiền định là 1:16.
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
; Chọn Bank0 BCF STATUS, RP0
; BSF INTCON, T0IE ;Nếu cho phép Ngắt TIMER0
; BSF INTCON, GIE ;Cho phép ngắt toàn cục.
; Ngắt Timer0 bị cấm nên dùng vòng lặp kiểm tra
; Ngắt Timer0 bị cấm nên dùng vòng lặp kiểm tra
TMR0 tràn.
T0_OVFL_WAIT
BTFSS INTCON, T0IF
GOTO T0_OVFL_WAIT
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
- Chương trình khởi tạo TIMER0 ở chê; đô(cid:31) Clock ngoại
; Xóa thanh ghi TMR0 CLRF TMR0
CLRF INTCON ; Không cho phép ngắt
BSF STATUS, RP0 ; Chọn Bank1
; Cho phép Port B có trơ(cid:18) treo
; Cho phép Port B có trơ(cid:18) treo MOVLW 0x37
MOVLW 0x37
MOVWF OPTION_REG
RBPU INTEDG TOCS TOSE PSA PS2 PS1 PS0
OPTION
; Ngắt khi có 1 cạnh xuống ở chân RB0.
;Timer0 tăng khi có xung. (Timer RUN)
;Tỉ lê(cid:19) bô(cid:19) tiền định là 1:256.
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
; Chọn Bank0 BCF STATUS, RP0
; BSF INTCON, T0IE ;Nếu cho phép Ngắt TIMER0
; BSF INTCON, GIE ;Cho phép ngắt toàn cục.
; Ngắt Timer0 bị cấm nên dùng vòng lặp kiểm tra
; Ngắt Timer0 bị cấm nên dùng vòng lặp kiểm tra
TMR0 tràn.
T0_OVFL_WAIT
BTFSS INTCON, T0IF
GOTO T0_OVFL_WAIT
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
2. Bô(cid:3) định thời TIMER1
- Bô(cid:31) định thời TIMER1 là bô(cid:31) định thời / bô(cid:31) đếm 16 bit.
- Bao gồm 2 thanh ghi 8 bit TMR1H vaB TMR1L.
- CơB TMR1IF =1 khi xảy ra tràn TMR1 tưB FFFF ->0000
a. Thanh ghi điều khiển T1CON
- Hai bit 7, 6 chưa được cấu hình.
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
- Bit 5:4 - T1CKPS1:T1CKPS0 :Chọn ti% lê(cid:31) xung vào
11 = 1:8 (gia; trị ti% lê(cid:31))
10 = 1:4
01 = 1:2
00 = 1:1
- Bit 3-T1OSCEN :cho phép bô(cid:31) dao động Timer1 OSC
1: dao động được cho phép. 0: không cho phép
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
- Bit 2 - T1SYNC :Bit lựa chọn đồng bô(cid:31) hóa xung
Clock ngoài. (bit này có tác dụng khi TMR1CS=1)
1= Không đồng bô(cid:31) với xung Clock ngoài.
0= Đồng bô(cid:31)
- Bit 1 - TMR1CS :Bit lựa chọn nguồn xung Clock
ngoài cho Timer1.
1= chọn xung Clock ngoài qua chân T1OSC/T1CKI
0= chọn xung Clock nội ( Fosc /4 )
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
- Bit 0 - TMR1ON :Bit cho phép hoặc dừng Timer1
1= Cho phép Timer1 hoạt động.
0= Không cho phép.
I
T1OSI
T1
OSC
synchronize
T1OS0
prescaler
Fosc/4
T1CKI
pin
TMR1L
TMR1H
Enable
TMR1ON
Timer1 Gate Enable
Timer1 Gate Enable
Timer1 Gate Invert
1 = Không cho phép
1 = Không cho phép
0 = Cho phép đồng bộ
T1GINV
TMR1ON
TMR1GE T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS
T1CON
T1CKPS1
T1CKPS0
scale
1
1
1:8
Timer1 On
1 = Enable Timer1
1
0
1:4
LP Oscillator Enable
1 = T1OSC selected
0 = T1CKI can be used
0
1
1:2
Clock Source Select
1 = External (T1CKI)
0 = Internal (FOSC/4)
0
0
1:1
nh 2:
u
c Bô nh
i TIMER1
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
b. Các chê(cid:19) đô(cid:3) hoạt động của TIMER1
(cid:1) Chê(cid:19) đô(cid:3) định thời đồng bô(cid:3): được chọn bởi bit
TMR1CS =0
- Trong chê; đô(cid:31) này xung cấp cho Timer1 là Fosc/4.
- Bit T1SYNC không có tác dụng vì xung cấp là
xung clock bên trong.
- Hoạt động đồng bô(cid:31) được thực hiện ngay saf u bô(cid:31)
Prescaler.
- Trong chê; đô(cid:31) Sleep, bô(cid:31) đếm sẽ ngưng hoạt động
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
(cid:1) Chê(cid:19) đô(cid:3) đếm đồng bô(cid:3): được chọn bởi bit
TMR1CS =1 vaB T1SYNC =0.
- Gia; trị bô(cid:31) đếm Timer1 tăng khi có xung cạnh lên
tại chân T1OSI/RC1 (nếu bit T1OSCEN =1) hoặc
tại chân T1OSO/RC0 (nếu bit T1OSCEN =0).
- Xung ngoài sẽ được đồng bô(cid:31) với xung nội.
- Hoạt động đồng bô(cid:31) được thực hiện ngay sau bô(cid:31)
Prescaler.
- Trong chê; đô(cid:31) Sleep, bô(cid:31) đếm sẽ ngưng hoạt động
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
(cid:1) Chê(cid:19) đô(cid:3) đếm không đồng bô(cid:3)
- Nếu bit T1SYNC =1, xung ngoài sẽ không được
đồng bô(cid:31). Bô(cid:31) định thời sẽ tiếp tục đếm trong chê; đô(cid:31)
SLEEP, vaB tạo ra Ngắt khi bô(cid:31) đếm tràn làm PIC
thoát khỏi trạng thái SLEEP.
thoát khỏi trạng thái SLEEP.
- Khi ghi hay đọc vào Timer cần chu(cid:19) ý:
* Việc đọc thanh ghi TMR1H hay TMR1L trong
khi Timer đang chạy sẽ cho ta gia; trị tức thời.
* Khi ghi vào Timer ta nên dừng Timer lại đê% Ghi.
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
Chương trình Đọc giá trị 16
bit của bô(cid:31) đếm Timer1:
;Kết quả đọc tốt
;Kết quả đọc TMR1L có thể thay
đổi khi ta kiểm tra.
LOOP
;Do đó ta đọc lại lần nữa để
được gtri chính xác.
được gtri chính xác.
TMR1H, 0
TMR1L, 0
;Đọc Byte cao lần nữa
MOVF
MOVWF TMPH
MOVF
MOVWF TMPL
TMR1H, 0
TMPH
TMR1L, 0
TMPL
MOVF
MOVWF
MOVF
MOVWF
………
MOVF
TMR1H, 0
SUBWF TMPH, W
BTFSC STATUS, Z
GOTO LOOP
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
Chương trình Ghi giá trị 16
bit vào bô(cid:31) đếm Timer1:
MOVLW HI_BYTE
MOVWF TMR1H, 1
MOVLW LO_BYTE
MOVWF TMR1L, 1
………
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
c. Bộ dao động riêng của TIMER1
- Chúng ta có thể tạo ra 1 bộ dao động độc lập cho
Timer1 bằng thạch anh với tần số lên đến 200KH.
- Khi đó, bộ đếm có thể hoạt động ở chế độ SLEEP
Hình 3: Bảng lựa chọn tụ lọc cho bộ OSC riêng
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
d. Ngắt TIMER1
- Ngắt Timer1 xảy ra khi tràn bô(cid:31) đếm TMR1 tưB
FFFF – 0000h.
- Khi Timer1 tràn, TMR1IF = 1. CơB này được xóa
bằng phần mềm. Ngắt có thể ngăn chặn bởi việc
xóa bit TMR1IE.
- Ngắt do Timer1 ở chế độ định thời và đếm đồng
bộ không làm PIC thoát khỏi chê(cid:19) đô(cid:3) ngu(cid:12). Chỉ có
chế độ đếm không đồng bộ mới được.
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
;Chế độ xung nội với tỉ lệ 1:8
;Dừng Timer1
MOVLW 0x30
MOVWF T1CON
;Cho phép Timer1 hoạt động
BSF T1CON, TMR1ON
;Vì Ngắt Timer1 bị cấm nên ta dùng
vòng lặp để ktra TRÀN
T1_OVFL_WAIT
BTFSS PIR1, TMR1IF
GOTO T1_OVFL_WAIT
;Timer1 TRÀN
BCF PIR1, TMR1IF
e. Khởi tạo TIMER1
1.Chế độ xung Clock nội
CLRF T1CON
; Xóa byte cao và byte thấp
CLRF TMR1H
CLRF TMR1L
;Không cho phép Ngắt
;Không cho phép Ngắt
CLRF INTCON
;Xóa tghi NGẮT ngoại vi
BSF STATUS, RP0
CLRF PIE1
;Xóa các cờ Ngắt ngoại vi
BCF STATUS, RP0
CLRF PIR1
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
;Chế độ xung ngoài với tỉ lệ 1:8
;Timer1 dừng lại
MOVLW 0x32
MOVWF T1CON
;Cho phép Timer1 hoạt động
BSF T1CON, TMR1ON
;Vì Ngắt Timer1 bị cấm nên ta
dùng vòng lặp để ktra TRÀN
T1_OVFL_WAIT
BTFSS PIR1, TMR1IF
GOTO T1_OVFL_WAIT
;Timer1 TRÀN
BCF PIR1, TMR1IF
2.Chế độ xung Clock ngoài
CLRF T1CON
; Xóa byte cao và byte thấp
CLRF TMR1H
CLRF TMR1L
;Không cho phép Ngắt
;Không cho phép Ngắt
CLRF INTCON
;Xóa tghi NGẮT ngoại vi
BSF STATUS, RP0
CLRF PIE1
;Xóa các cờ Ngắt ngoại vi
BCF STATUS, RP0
CLRF PIR1
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
3. Bô(cid:3) định thời TIMER2
- TIMER2 là bô(cid:31) định thời 8 bit, bao gồm 1 bộ tiền
định tỉ lệ (PreScaler) và 1 bộ hậu định tỉ lệ
(Postscaler) và 1 thanh ghi chu kỳ PR2.
- Việc kết hợp 2 bộ định tỉ lệ vào Timer2 cho phép
- Việc kết hợp 2 bộ định tỉ lệ vào Timer2 cho phép
nó hoạt động như là bộ định thời 16 bit.
- Ngoài ra, Timer2 còn có chức năng cung cấp thời
gian hoạt động cho chế độ điều biến xung PWM khi
module CCP được chọn.
I
TMR2
OUTPUT
TMR2
Fosc/4
Prescaler
1:1, 1:4, 1:16
COMPARATOR
Postscaler
1:1 (cid:2) 1:16
PR2
PR2
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0
TMR2ON
T2CKPS1 T2CKPS0
T2CON
T2CKPS1
T2CKPS2
Scale
0
0
1:1
0
1
1:4
1
X
1:16
Timer2 ON
1 = Timer2 enabled
Hình 4: Cấu trúc bộ định thời Timer2
I
Start Timer2
Counting
TMR2
OUTPUT
TMR2
Prescaler
1:1, 1:4, 1:16
Fosc/4
COMPARATOR
Postscaler
1:1 (cid:2) 1:16
PR2
PR2
PIR1
PIR1
Load Period
Register
1
TMR2IF
Flag set on first
match with
postscaler = 1:1
Hình 4: Cấu trúc bộ định thời Timer2
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
a. Thanh ghi T2CON
- Bit 7 chưa được cấu hình.
- Bit 6:3 - TOUTPS3 : TOUTPS0 :các bit chọn tỉ lệ
ngõ ra Timer2
0000 = 1:1 (Tỉ lệ ngõ ra)
0001 = 1:2
….. 1111 = 1:16
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
- Bit 2 - TMR2ON :Cho phép Timer2 hoạt động
1 = Cho phép
0 = Không cho phép
- Bit 1:0 - T2CKPS1 : T2CKPS0 :Bit chọn tỉ lệ ngõ vào
của Timer2
00 = 1:1
01 = 1:4
1x = 1:16
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
b. Nguồn xung Clock của Timer2
- Timer2 chỉ có một nguồn xung Clock duy nhất là
xung bên trong được định tỉ lệ bởi các bit
T2CKPS1:T2CKPS0 của bộ Prescaler.
c. Thanh ghi TMR2 và PR2
c. Thanh ghi TMR2 và PR2
- TMR2 và PR2 là hai thanh ghi cho phép đọc/ghi.
- TMR2 sẽ tăng từ giá trị 00H đến giá trị nằm trong
PR2, sau đó nó được Reset về 0 cho chu kỳ đếm kế
tiếp.
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
d. Tín hiệu báo trạng thái cân bằng
- Khi giá trị trong thanh ghi TMR2 và PR2 bằng nhau,
bộ so sánh sẽ tạo ra một xung.
- Xung này được đưa vào bộ hậu định tỉ lệ
(PostScaler) hoặc dùng làm xung Clock cho Module
(PostScaler) hoặc dùng làm xung Clock cho Module
truyền nối tiếp (Shift clock).
- Ngoài ra, xung này còn được dùng làm tín hiệu
Reset cho Timer2.
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
e. Xóa các Bộ định tỉ lệ
Các bộ định tỉ lệ được xóa khi:
- Ghi một giá trị vào thanh ghi TMR2.
- Ghi một giá trị vào thanh ghi T2CON.
- Khi xảy ra bất kỳ một trạng thái Reset thiết bị.
f. Chế độ SLEEP
- Trong chế độ này, Timer2 không hoạt động.
- Giá trị của bộ định tỉ lệ sẽ được lưu và khôi phục lại
sau khi thoát khỏi chế độ SLEEP.
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
; Tỉ lệ ngõ ra 1:15
;tỉ lệ đầu vào 1:16
;Tắt Timer2
MOVLW 0x72
MOVWF T2CON
;Cho phép Timer2 hoạt động
BSF T2CON, TMR2ON
BSF T2CON, TMR2ON
;Vì Ngắt Timer2 bị cấm nên ta
dùng vòng lặp để ktra TRÀN
T2_OVFL_WAIT
BTFSS PIR1, TMR2IF
GOTO T2_OVFL_WAIT
CLRF T2CON
; Xóa bộ đếm
CLRF TMR2
;Không cho phép Ngắt
CLRF INTCON
;Xóa tghi NGẮT ngoại vi
BSF STATUS, RP0
CLRF PIE1
;Xóa các cờ Ngắt ngoại vi
BCF STATUS, RP0
CLRF PIR1
;Timer1 TRÀN
BCF PIR1, TMR2IF
g. Khởi tạo TIMER2
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
TIMER0
8-bits (TMR0) TIMER2
8-bits (TMR2)
TIMER1
16-bits
(TMR1H:TMR1L)
SIZE OF
REGISTER
Fosc/4
Fosc/4
Fosc/4
CLOCK SOURCE
(Internal)
T0CKI pin
None
CLOCK SOURCE
(External )
T1CKI pin or
Timer 1 oscillator
(T1OSC)
(T1OSC)
Prescaler 3-bits
(1:2(cid:2)(cid:2)(cid:2)(cid:2)1:256)
Prescaler 2-bits
(÷1,÷2,÷4,÷8)
CLOCK SCALING
AVAILABLE
(Resolution)
INTERRUPT
EVENT and FLAG
LOCATION
On overflow
FFFFh(cid:2)(cid:2)(cid:2)(cid:2)0000h
(TMR1IF in PIR1)
On overflow
FFh(cid:2)(cid:2)(cid:2)(cid:2)00h
(TMR0IF in INTCON)
Prescaler
(1:1,1:4,1:8)
Postscaler
(1:1(cid:2)(cid:2)(cid:2)(cid:2)1:16)
TMR2 matches
PR2
(TMR2IF in PIR2)
NO
YES
NO
CAN WAKE PIC
FROM SLEEP?