HOẠT ĐỘNG CỦA BỘ ĐỊNH THỜI CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI 1.. Bộ định thời TIMER0 Bộ định thời có 2 chức năng chính: định thời Timer và đếm xung Counter... CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊN
Trang 1HOẠT ĐỘNG CỦA
BỘ ĐỊNH THỜI
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
1 Bộ định thời TIMER0
Bộ định thời có 2 chức năng chính:
định thời (Timer) và đếm xung (Counter)
- TIMER0 là bộ định thời / bộ đếm 8 bit
- Gồm 1 bộ tiền định tỉ lệ (Prescaler) 8 bit
Trang 2CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
a Bộ tiền định tỉ lệ (Prescaler)
- Là bộ đếm 8 bit đóng vai trò:
+ Bộ tiền chia tỉ lệ cho Timer0
+ Bộ hậu chia tỉ lệ cho bộ WDT
- Bit PSA lựa chọn Prescaler dùng cho Timer/WDT
- Giá trị tỉ lệ được xác định bởi 3 bit PS2 : PS0
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
b Hoạt động bộ định thời TIMER0
Có 2 chế độ hoạt động được chọn bởi bit T0CS
(OPTION<5>).
- Ở chế độ định thời: thanh ghi TMR0 sẽ tăng lên
sau mỗi chu kỳ máy Tcy (khi Prescaler không có
tác dụng hoặc có tỉ 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.
Trang 3- 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 giá trị tỉ lệ Prescaler là 1:1, chu kỳ xung Clock
ngoài sẽ bằng với xung Clock nội
gian Ton hoặc Toff phải ít nhất là 2 Tosc
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
Hình 5.1: Cấu trúc Bộ định thời TIMER0
8
T0CKI
pin
Fosc/4
prescaler
Watchdog Timer
synchronize
WDT out
DATA BUS
OPTION
TMR0 Clock
Source Select
1 = T0CKI, 0 = Fosc/4
Source Edge Select
1 = High-to-Low
0 = Low-to-High
Prescaler Assignment
1= prescaler assigned to WDT 0= prescaler assigned to Timer 0
PS2 PS1 PS0
TMR0 RATE
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
Trang 4CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
Hình 5.2: Hoạt động định thời TIMER0
T0CKI
pin
Fosc/4
prescaler
Watchdog Timer
synchronize
WDT out
OPTION register
TMR0 Clock
Source Select
1 = TOCK1, 0 = Fosc/4 Source Edge Select
1 = increment TMR0 on high-to-low transition
0 = increment TMR0 on low-to-high transition
Prescaler Assignment
1= prescaler assigned to WDT 0= prescaler assigned to Timer 0
Prescaler Rate Select Bits
PS2 PS1 PS0
TMR0 RATE
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
8
DATA BUS
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
T0CKI
pin
Fosc/4
prescaler
Watchdog Timer
synchronize
8
DATA BUS
TMR0IF INTCON register
• Công thức tính thời gian định thời của TIMER0
Trang 5c Ngắt TIMER0
số đếm từ FF → 00
- Khi tràn thì cờ tràn T0IF = 1 Bit này được xóa bởi
phần mềm
(SLEEP)
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
d Khởi tạo TIMER0
TIMER
TMR0 = XX : nạp giá trị đầu
T0CS = 0 : Clock nội
PSA = 0 : dùng Prescaler
PS<2:0> : chọn tỉ lệ Prescaler
Sử dụng NGẮT
T0IE = 1 : bật NGẮT Timer0
T0IF = 0 : xóa cờ NGẮT
GIE = 1 : bật NGẮT toàn cục
COUNTER TRISA4 = 1, RA4 = 1: T0CKI là Input TMR0 = XX : nạp giá trị đầu
T0CS = 1 : Clock bên ngoài T0SE = 0 : t.động ở cạnh lên
PSA = 1 : không dùng Prescaler PS<2:0> : chọn tỉ lệ Prescaler
Sử dụng NGẮT
T0IE = 1 : bật NGẮT Timer0 T0IF = 0 : xóa cờ NGẮT GIE = 1 : bật NGẮT toàn cục
Trang 6CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
2 Bộ định thời TIMER1
- TIMER1 là bộ định thời / bộ đếm 16 bit
Thanh ghi điều khiển T1CON
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
- Bit 5:4 - T1CKPS<1:0> chọn tỉ lệ xung vào
- Bit 3 - T1OSCEN: Chọn chế độ của bộ dao động
1 = Bật chế độ dao động LP(Low Power crystal)
0 = Tắt chế độ dao động LP
Trang 7- Bit 2 - T1SYNC\ : Bit cho phép đồng bộ nguồn
xung bên ngoài (TMR1CS=1)
1 = Không đồng bộ với xung ngoài
0 = Đồng bộ
- Bit 1 - TMR1CS : Bit lựa chọn nguồn xung
1 = chọn xung ngoài qua chân T1CKI
0 = chọn xung bên trong ( Fosc /4 )
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
- Bit 0 - TMR1ON : Bit cho phép Timer1 Run/Stop
1 = Cho phép Timer1 hoạt động
0 = Không cho phép
Trang 8CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
Hình 5.3: Cấu trúc Bộ định thời TIMER1
T1CKI
pin
T1 OSC
T1OS0
T1OSI
prescaler synchronize
Fosc/4
Enable TMR1ON
T1CKPS1 T1CKPS0 scale
Timer1 Gate Enable
Timer1 Gate Invert
1 = Không cho phép
0 = Cho phép đồng bộ
T1CON
Clock Source Select
1 = External (T1CKI)
0 = Internal (FOSC/4)
LP Oscillator Enable
1 = T1OSC selected
0 = T1CKI can be used
Timer1 On
1 = Enable Timer1
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
T1CKI
pin
T1 OSC
T1OS0
T1OSI
prescaler synchronize
Timer1 Control Register (T1CON)
Clock Source Select
1 = External (T1CKI)
0 = Internal (FOSC/4)
LP Oscillator Enable
1 = T1OSC selected
0 = T1CKI can be used
Fosc/4
Timer1 On
1 = Enable Timer1
Enable TMR1ON
Trang 9Hình 5.4: Hoạt động định thời TIMER1
Timer1 External Clock Input Synchronization
1 = do not synchronize external clock input
0 = synchronize external clock input with internal clock (Fosc/4)
T1CKI
pin
T1 OSC
T1OS0
T1OSI
prescaler synchronize
Timer1 Control Register (T1CON)
Fosc/4
Timer1 Gate Enable and
Timer1 Gate Invert are
available on some devices
Enable
TMR1ON
T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
a Các chế độ hoạt động của TIMER1
Chế độ định thời đồng bộ (TMR1CS =0)
(Bit T1SYNC\ không có tác dụng ở chế độ này)
Trang 10CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
Chế độ đếm - đồng bộ (TMR1CS =1,T1SYNC\=0)
của bộ Prescaler
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
Chế độ đếm - không đồng bộ
không được đồng bộ với nguồn xung bên trong
thoát khỏi trạng thái SLEEP khi NGẮT xảy ra
Chú ý:
+ Khi đọc (Read) thanh ghi TMR1 trong khi Timer
đang chạy, ta sẽ nhận được giá trị tức thời
Trang 11b Bộ dao động riêng của TIMER1
Timer1 bằng cách sử dụng Thạch anh có tần tối đa
200KHz, tại 2 chân T1OSC0 và T1OSC1
LP 32,768 KHz 33pF 33pF
100 KHz 15pF 15pF
200 KHz 15pF 15pF
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
c Ngắt TIMER1
- Ngắt Timer1 xảy ra khi tràn bộ đếm TMR1, nghĩa
là từ FFFF → 0000
- Khi Timer1 tràn TMR1IF = 1, cờ này được xóa
bằng phần mềm
- Ngắt Timer1 ở chế độ định thời/đếm đồng bộ
không làm PIC thoát khỏi SLEEP, điều này chỉ xảy
ra ở chế độ đếm Không đồng bộ
Trang 12CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
d Khởi tạo TIMER1
TIMER
TMR1ON = 0 : STOP Timer1
TMR1 = xx : nạp giá trị đầu
TMR1CS = 0 : Clock nội
( T1SYNC\ = x : không quan tâm )
T1CKPS<1:0> : chọn tỉ lệ Prescaler
Nếu sử dụng NGẮT
TMR1IE = 1 : bật NGẮT Timer1
TMR1IF = 0 : xóa cờ NGẮT
PEIE = 1 : bật NGẮT ngoại vi
GIE = 1 : bật NGẮT toàn cục
TMR1ON = 1 : cho Timer 1 chạy
COUNTER TMR1 = xx : nạp giá trị đầu TMR1CS = 1 : Clock ngoài T1SYNC\ = 0/1 : cho phép đồng bộ ? T1OSCEN=1: xung ở chân T1OSI/RC1 T1CKPS<1:0> : chọn tỉ lệ Prescaler
Nếu sử dụng NGẮT TMR1IE = 1 : bật NGẮT Timer1 TMR1IF = 0 : xóa cờ NGẮT PEIE = 1 : bật NGẮT ngoại vi GIE = 1 : bật NGẮT toàn cục TMR1ON = 1 : cho Timer chạy
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
3 Bộ định thời TIMER2
- TIMER2 là bộ định thời 8 bit, bao gồm:
+ Bộ tiền định tỉ lệ (PreScaler)
+ Bộ hậu định tỉ lệ (PostScaler)
+ Thanh ghi chu kỳ PR2
năng tạo ra khoảng thời gian hoạt động (Ton) trong
chế độ điều biến xung PWM (Module CCP)
Trang 13Hình 5.5: Cấu trúc bộ định thời Timer2
Prescaler
1:1, 1:4, 1:16
COMPARATOR Postscaler1:1 1:16
TMR2 OUTPUT
PR2
Timer2 ON
1 = Timer2 enabled
T2CON
TMR2ON
T2CKPS1 T2CKPS2 Scale
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
Hình 5.5: Cấu trúc bộ định thời Timer2
Prescaler
1:1, 1:4, 1:16
COMPARATOR Postscaler1:1 1:16 Fosc/4
TMR2
TMR2 OUTPUT
PR2
1 PIR1
TMR2IF
Load Period
Register
Start Timer2 Counting
Flag set on first match with postscaler = 1:1
Trang 14CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
Hình 5.6: Hoạt động định thời TIMER2
Prescaler
1:1, 1:4, 1:16
COMPARATOR
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
Postscaler 1:1 1:16
Fosc/4
Timer2 ON
1 = Timer2 enabled
T2CKPS1 T2CKPS2 Scale
TMR2
TMR2 OUTPUT
PR2
Timer2 Control Register (T2CON)
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
Prescaler
1:1, 1:4, 1:16
COMPARATOR
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
Postscaler 1:1 1:16
Fosc/4
Timer2 ON
1 = Timer2 enabled
T2CKPS1 T2CKPS2 Scale
TMR2
TMR2 OUTPUT
PR2
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 SCALE
Trang 15a Thanh ghi T2CON
- Bit 7
- Bit 6:3 – TOUTPS<3:0> chọn giá trị tỉ lệ của bộ
Postscaler (nằm tại ngõ ra của Timer2).
0000 = 1:1
0001 = 1:2
… 1111 = 1:16
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
- Bit 2 - TMR2ON: Bit cho phép Timer2 hoạt động
1 = Cho phép
0 = Không cho phép
- Bit 1:0 - T2CKPS<1:0> Bit chọn giá trị tỉ lệ ngõ vào
của Timer2 (Prescaler)
00 = 1:1
01 = 1:4 1x = 1:16
Trang 16CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
b Nguồn xung Clock của Timer2
được định tỉ lệ bởi 3bit T2CKPS<1:0> (Prescaler)
c Thanh ghi TMR2 và PR2
- TMR2 sẽ tăng từ giá trị 00H đến giá trị trong PR2,
sau đó được Reset về 00H cho chu kỳ đếm kế tiếp
CHƯƠNG 5: 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 tín hiệu xung
- Xung này tiếp tục được đưa qua bộ hậu định tỉ lệ
(PostScaler) và có thể được sử dụng làm xung Clock
cho Module truyền nối tiếp hoặc có thể làm tín hiệu
Reset cho Timer2
- Công thức tính thời gian định thời của Timer2:
Trang 17e Reset các Bộ định tỉ lệ
Các bộ định tỉ lệ sẽ bị Reset khi:
- Khi xảy ra bất kỳ 1 trạng thái Reset thiết bị
f Chế độ SLEEP
- 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 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
g Khởi tạo TIMER2
TIMER
PR2 = xxx : đặt giá trị vào thanh ghi đặt trước PR2
T2CKPS<1:0> : chọn tỉ lệ Prescaler
T2OUTPS<3:0> : chọn tỉ lệ Postscaler
Nếu sử dụng NGẮT
TMR2IE = 1 : bật NGẮT Timer2
TMR2IF = 0 : xóa cờ NGẮT
PEIE = 1 : bật NGẮT ngoại vi
GIE = 1 : bật NGẮT toàn cục
TMR2ON = 1 : cho Timer 2 chạy
Trang 18CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
4 Bảng tóm tắt các bộ Timer
SIZE OF
REGISTER
(TMR1H:TMR1L)
8-bits (TMR2) CLOCK SOURCE
(Internal)
CLOCK SOURCE
(External )
Timer 1 oscillator (T1OSC)
None
CLOCK SCALING
AVAILABLE
(Resolution)
Prescaler 3-bits (1:21:256)
Prescaler 2-bits (÷1,÷2,÷4,÷8)
Prescaler (1:1,1:4,1:8) Postscaler (1:11:16) INTERRUPT
EVENT and FLAG
LOCATION
On overflow FFh00h (TMR0IF in INTCON)
On overflow FFFFh0000h (TMR1IF in PIR1)
TMR2 matches PR2 (TMR2IF in PIR2) CAN WAKE PIC
FROM SLEEP?
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
6 Các Ví dụ và Bài tập