CHƯƠNG 4
I
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
1. Bô định thời TIMER0
-
Bộ định thời TIMER0 là bô định thời / bô đếm 8 bit.
-
Bao gồm 1 bô tiền định ti lê 8 bit lập trình được
(Prescaler).
-
Có Bit chọn xung Clock nội hay bên ngồ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ô tiền định ti lê (Prescaler)
Là bô đếm 8 bit được dùng làm bô tiền định ti lê
cho Timer0 hoặc hậu định ti lê cho bô 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ê.
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
b. Hoạt động bô định thời TIMER0
Timer0 có 2 chê đơ hoạt động được lựa chọn bởi
bit T0CS ( OPTION<5> ).
- Ở chê đô định thời: thanh ghi TMR0 sẽ tăng lên
sau mỗi chu ky máy ( với điều kiện Prescaler khơng
có tác dụng hoặc có ti lê là 1:1 )
- Ở chê đơ đế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ô với xung Clock nội.
- Với ti lê bô Prescaler là 1:1. Nguồn xung Clock
ngồi sẽ đồng bơ với xung Clock nội bằng cách lấy
mẫu tại chu ky Q2 va Q4 của xung Clock nội.
- Do đo, trong 1 chu ky 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
prescaler
Watchdog Timer
RBPU
TMR0
scaled clock
T0CKI
pin
WDT out
INTEDG TOCS TOSE
OPTION
PSA
PS2
PS1
PS0
Prescaler Assignment
1= prescaler assigned to WDT
0= prescaler assigned to Timer 0
TMR0 Clock
Source Select
Source Edge Select
1 = T0CKI, 0 = Fosc/4
PS2
PS1
PS0
TMR0
RATE
0
0
0
1:2
0
0
1
1:4
0
1
0
1:8
0
1
1
1:16
1
0
0
1:32
1
0
1
1:64
1
1
0
1:128
1
1
1
1:256
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ô đếm TMR0: FF – 00h
-Khi tràn T0IF = 1. Cơ này được xóa bằng phần mềm.
-Ngắt Timer0 khơng làm PIC thốt khỏi chê đơ 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ê đơ Clock nội
CLRF
TMR0
; Xóa thanh ghi TMR0
CLRF
INTCON
; Không cho phép ngắt
; Chọn Bank1
BSF
STATUS, RP0
MOVLW
0xC3 ; Khơng cho phép Port B có trơ treo
OPTION
MOVWF
chân RB0.
RBPU
INTEDG TOCS TOSE
PSA
PS2
PS1
PS0
OPTION_REG ; Ngắt khi có 1 cạnh lên ở
;Timer0 tăng khi có xung. (RUN)
;Tỉ lê bơ tiền định là 1:16.
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
BCF
STATUS, RP0
; Chọn Bank0
; 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
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ê đơ Clock ngoại
CLRF
TMR0
; Xóa thanh ghi TMR0
CLRF
INTCON
; Không cho phép ngắt
BSF
STATUS, RP0
MOVLW
0x37
MOVWF
OPTION_REG
OPTION
RBPU
; Chọn Bank1
; Cho phép Port B có trơ treo
INTEDG TOCS TOSE
PSA
PS2
PS1
PS0
; Ngắt khi có 1 cạnh xuống ở chân RB0.
;Timer0 tăng khi có xung. (Timer RUN)
;Tỉ lê bô tiền định là 1:256.
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
BCF
STATUS, RP0
; Chọn Bank0
; 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
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ô định thời TIMER1
- Bô định thời TIMER1 là bô định thời / bô đếm 16 bit.
- Bao gồm 2 thanh ghi 8 bit TMR1H va TMR1L.
- Cơ TMR1IF =1 khi xảy ra tràn TMR1 tư 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ê xung vào
11 = 1:8 (gia trị ti lê)
10 = 1:4
01 = 1:2
00 = 1:1
- Bit 3-T1OSCEN :cho phép bô 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ơ hóa xung
Clock ngồi. (bit này có tác dụng khi TMR1CS=1)
1= Khơng đồng bơ với xung Clock ngồi.
0= Đồng bơ
- 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
T1OS0
synchronize
prescaler
Fosc/4
T1CKI
pin
TMR1H
TMR1L
Enable
Timer1 Gate Enable
Timer1 Gate Invert
T1GINV
TMR1GE
T1CKPS1
T1CKPS0
1 = Không cho phép
0 = Cho phép đồng bộ
TMR1ON
T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS
TMR1ON
T1CON
scale
1
1
1:8
LP Oscillator Enable
1
0
1:4
0
1
1:2
1 = T1OSC selected
0 = T1CKI can be used
0
0
1:1
nh 2:
u
c Bô
nh
Timer1 On
1 = Enable Timer1
Clock Source Select
1 = External (T1CKI)
0 = Internal (FOSC/4)
i TIMER1
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
b. Các chê đô hoạt động của TIMER1
Chê đô định thời đồng bô: được chọn bởi bit
TMR1CS =0
- Trong chê đô 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ô được thực hiện ngay saf u bô
Prescaler.
- Trong chê đô Sleep, bô đếm sẽ ngưng hoạt động
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
Chê đô đếm đồng bô: được chọn bởi bit
TMR1CS =1 va T1SYNC =0.
- Gia trị bơ đế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 ngồi sẽ được đồng bơ với xung nội.
- Hoạt động đồng bô được thực hiện ngay sau bô
Prescaler.
- Trong chê đô Sleep, bô đếm sẽ ngưng hoạt động
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
Chê đô đếm không đồng bơ
- Nếu bit T1SYNC =1, xung ngồi sẽ khơng được
đồng bô. Bô định thời sẽ tiếp tục đếm trong chê đô
SLEEP, va tạo ra Ngắt khi bô đếm tràn làm PIC
thoát khỏi trạng thái SLEEP.
- Khi ghi hay đọc vào Timer cần chu ý:
* 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ô đếm Timer1: ;Kết quả đọc tốt
;Kết quả đọc TMR1L có thể thay
LOOP
đổi khi ta kiểm tra.
MOVF TMR1H, 0
;Do đó ta đọc lại lần nữa để
MOVWF TMPH
được gtri chính xác.
MOVF TMR1L, 0
MOVWF TMPL
MOVF
TMR1H, 0
;Đọc Byte cao lần nữa
MOVF
SUBWF
BTFSC
GOTO
TMR1H, 0
TMPH, W
STATUS, Z
LOOP
MOVWF
MOVF
MOVWF
………
TMPH
TMR1L, 0
TMPL
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
Chương trình Ghi giá trị 16
bit vào bô đế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ô đếm TMR1 tư
FFFF – 0000h.
- Khi Timer1 tràn, TMR1IF = 1. Cơ 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 thốt khỏi chê đơ ngu. Chỉ có
chế độ đếm khơng đồng bộ mới được.
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
e. Khởi tạo TIMER1
1.Chế độ xung Clock nội
CLRF T1CON
; Xóa byte cao và byte thấp
CLRF
CLRF
TMR1H
TMR1L
;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
;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
;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
CHƯƠNG 4: HOẠT ĐỘNG BỘ ĐỊNH THỜI
2.Chế độ xung Clock ngồi
CLRF T1CON
; Xóa byte cao và byte thấp
CLRF
CLRF
TMR1H
TMR1L
;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ế độ 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