Tải bản đầy đủ (.pdf) (35 trang)

Bài giảng Chương 4: Hoạt động của bộ định thời

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.81 MB, 35 trang )

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


×