CHƯƠNG 5
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).
-
TIMER0 là bộ định thời / bộ đếm 8 bit.
-
Gồm 1 bộ tiền định tỉ lệ (Prescaler) 8 bit.
-
Có bit chọn xung (Clock) nội hay xung bên ngoài.
-
Có bit lựa chọn cạnh tác động của xung Clock.
-
Có thanh ghi chứa số đếm TMR0.
1
CHƯƠ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.
2
CHƯƠNG 5: 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 giá trị tỉ lệ Prescaler là 1:1, chu kỳ xung Clock
ngoài sẽ bằng với xung Clock nội.
-
Do đó trong 1 chu kỳ T của xung Clock ngoài, thời
gian Ton hoặc Toff phải ít nhất là 2 Tosc.
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
DATA BUS
Fosc/4
8
synchronize
TMR0
scaled clock
T0CKI
pin
prescaler
Watchdog Timer
RBPU
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
1 = High-to-Low
0 = Low-to-High
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
Hình 5.1: Cấu trúc Bộ định thời TIMER0
3
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
DATA BUS
Fosc/4
8
synchronize
T0CKI
pin
scaled clock
TMR0
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= prescaler assigned to WDT
1
0= prescaler assigned to Timer 0
1
0
1:128
1
1
1
1:256
prescaler
Watchdog Timer
WDT out
OPTION register
RBPU
INTEDG TOCS TOSE
PSA
PS2
PS1
PS0
Prescaler Rate Select Bits
Prescaler Assignment
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
Hình 5.2: Hoạt động định thời TIMER0
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
DATA BUS
Fosc/4
8
synchronize
T0CKI
pin
scaled clock
Watchdog Timer
TMR0
prescaler
INTCON register
TMR0IF
• Công thức tính thời gian định thời của TIMER0
4
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
c. Ngắt TIMER0
-
Ngắt Timer0 xảy ra khi bộ đếm TMR0 tràn, nghĩa là
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.
-
Ngắt Timer0 không làm PIC thoát khỏi chế độ ngủ
(SLEEP).
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
d. Khởi tạo TIMER0
COUNTER
TRISA4 = 1, RA4 = 1: T0CKI là Input
TIMER
TMR0 = XX
: nạp giá trị đầu
TMR0 = XX
T0CS = 0
: Clock nội
T0CS = 1
T0SE = 0
PSA = 0
: dùng Prescaler
PS<2:0>
: chọn tỉ lệ Prescaler
Sử dụng NGẮT
T0IE = 1
T0IF = 0
GIE = 1
: bật NGẮT Timer0
: xóa cờ NGẮT
: bật NGẮT toàn cục
PSA = 1
PS<2:0>
: nạp giá trị đầu
: Clock bên ngoài
: t.động ở cạnh lên
: không dùng Prescaler
: chọn tỉ lệ Prescaler
Sử dụng NGẮT
T0IE = 1
T0IF = 0
GIE = 1
: bật NGẮT Timer0
: xóa cờ NGẮT
: bật NGẮT toàn cục
5
CHƯƠ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.
-
Gồm 2 thanh ghi 8 bit TMR1H và TMR1L.
-
Cờ TMR1IF =1 khi xảy ra tràn bộ đếm TMR1.
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
00 = 1:1
10 = 1:4
01 = 1:2
11 = 1:8
- 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
6
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
- 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.
7
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
T1OSI
T1
OSC
T1OS0
synchronize
prescaler
Fosc/4
T1CKI
pin
TMR1L
TMR1H
Enable
Timer1 Gate Enable
Timer1 Gate Invert
1 = Không cho phép
0 = Cho phép đồng bộ
T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS
T1GINV
TMR1GE
T1CKPS1
T1CKPS0
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
TMR1ON
T1CON
TMR1ON
Timer1 On
1 = Enable Timer1
Clock Source Select
1 = External (T1CKI)
0 = Internal (FOSC/4)
Hình 5.3: Cấu trúc Bộ định thời TIMER1
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
T1OSI
T1
OSC
T1OS0
prescaler
synchronize
Fosc/4
T1CKI
pin
TMR1H
TMR1L
Enable
Timer1 Control Register (T1CON)
TMR1ON
T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON
T1GINV
TMR1GE
T1CKPS1
T1CKPS0
scale
1
1
1:8
1
0
1:4
0
1
1:2
0
0
1:1
Timer1 On
LP Oscillator Enable
1 = T1OSC selected
0 = T1CKI can be used
1 = Enable Timer1
Clock Source Select
1 = External (T1CKI)
0 = Internal (FOSC/4)
Hình 5.4: Hoạt động định thời TIMER1
8
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
T1OSI
T1
OSC
T1OS0
prescaler
synchronize
Fosc/4
T1CKI
pin
TMR1H
TMR1L
Enable
TMR1ON
Timer1 Control Register (T1CON)
T1GINV
TMR1GE
T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON
Timer1 Gate Enable and
Timer1 Gate Invert are
available on some devices
Timer1 External Clock Input Synchronization
1 = do not synchronize external clock input
0 = synchronize external clock input with
internal clock (Fosc/4)
Hình 5.4: Hoạt động định thời TIMER1
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)
-
Xung clock cấp từ bộ dao động nội (Fosc/4).
(Bit T1SYNC\ không có tác dụng ở chế độ này)
-
Trong chế độ SLEEP, bộ đếm sẽ ngưng hoạt động.
-
Công thức tính thời gian định thời của Timer1:
9
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
Chế độ đếm - đồng bộ (TMR1CS =1,T1SYNC\=0)
-
Bộ đếm Timer1 tăng khi xuất hiện xung cạnh lên tại
+ chân T1OSI/RC1
khi
T1OSCEN =1
+ chân T1OSO/RC0
khi
T1OSCEN =0
-
Xung ngoài sẽ được đồng bộ với xung nội.
-
Việc đồng bộ được thực hiện ngay sau hoạt động
của bộ Prescaler.
-
Trong chế độ SLEEP, bộ đếm sẽ ngưng hoạt động.
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
Chế độ đếm - không đồng bộ
-
Ở chế độ này, bit T1SYNC\ =1: xung ngoài sẽ
không được đồng bộ với nguồn xung bên trong.
-
Timer1 sẽ tiếp tục đếm trong chế độ SLEEP, và chỉ
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.
+ Khi ghi (Write) vào Timer ta nên dừng Timer lại.
10
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
b. Bộ dao động riêng của TIMER1
-
Tạo ra bộ dao động Low power Crystal (LP) cho
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.
-
Khi đó, bộ đếm có thể hoạt động ở chế độ SLEEP.
OSC Type
Crystal
C1
C2
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ộ.
11
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
COUNTER
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
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>
Nếu sử dụng NGẮT
TMR1IE = 1
TMR1IF = 0
PEIE = 1
GIE = 1
TMR1ON = 1
: bật NGẮT Timer1
: xóa cờ NGẮT
: bật NGẮT ngoại vi
: bật NGẮT toàn cục
: cho Timer 1 chạy
: chọn tỉ lệ Prescaler
Nếu sử dụng NGẮT
TMR1IE = 1
TMR1IF = 0
PEIE = 1
GIE = 1
: bật NGẮT Timer1
: xóa cờ NGẮT
: bật NGẮT ngoại vi
: 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.
-
Ngoài chức năng định thời, Timer2 còn có chức
năng tạo ra khoảng thời gian hoạt động (Ton) trong
chế độ điều biến xung PWM (Module CCP).
12
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
TMR2
OUTPUT
Fosc/4
TMR2
Prescaler
1:1, 1:4, 1:16
Postscaler
1:1 1:16
COMPARATOR
PR2
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1
T2CON
T2CKPS0
T2CKPS1
T2CKPS2
Scale
0
0
1:1
0
1
1:4
1
X
1:16
Timer2 ON
1 = Timer2 enabled
Hình 5.5: Cấu trúc bộ định thời Timer2
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
Start Timer2
Counting
TMR2
OUTPUT
TMR2
Fosc/4
Prescaler
1:1, 1:4, 1:16
COMPARATOR
Load Period
Register
PR2
Postscaler
1:1 1:16
PIR1
1
TMR2IF
Flag set on first
match with
postscaler = 1:1
Hình 5.5: Cấu trúc bộ định thời Timer2
13
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
TMR2
OUTPUT
TMR2
Prescaler
1:1, 1:4, 1:16
Fosc/4
COMPARATOR
Postscaler
1:1 1:16
PR2
Timer2 Control Register (T2CON)
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
T2CKPS1
T2CKPS2
Scale
0
0
1:1
0
1
1:4
1
X
1:16
Timer2 ON
1 = Timer2 enabled
Hình 5.6: Hoạt động định thời TIMER2
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
TOUTPS3
TOUTPS2
TOUTPS1
TOUTPS0
SCALE
0
0
0
0
1:1
0
0
0
1
1:2
0
0
1
0
1:3
0
0
1
1
1:4
TMR2
1
Prescaler
0 1:1, 1:4,
1 1:16
0
0
1:5
0
1
1:6
0
1
1
0
1:7
0
1
1
1
1
0
0
0
1
0
0
1
1
0
1
0
1:11
1
0
1
1
PR21:12
1
1
0
0
1:13
1
1
0
1
1:14
1
1
1
0
1:15
1
1
1
1
1:16
0
Fosc/4
TMR2
OUTPUT
1:8
1:9
COMPARATOR
1:10
Postscaler
1:1 1:16
Timer2 Control Register (T2CON)
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
T2CKPS1
T2CKPS2
Scale
0
0
1:1
0
1
1:4
1
X
1:16
Timer2 ON
1 = Timer2 enabled
Hình 5.6: Hoạt động định thời TIMER2
14
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
a. 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
15
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
b. Nguồn xung Clock của Timer2
-
Nguồn xung cấp cho Timer2 từ bộ dao động nội,
được định tỉ lệ bởi 3bit T2CKPS<1:0> (Prescaler).
c. Thanh ghi TMR2 và PR2
-
TMR2 và PR2 có thể được Ghi / Đọc.
-
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:
16
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
e. Reset các Bộ định tỉ lệ
Các bộ định tỉ lệ sẽ bị Reset 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ỳ 1 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 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
TMR2IF = 0
PEIE = 1
GIE = 1
: bật NGẮT Timer2
: xóa cờ NGẮT
: bật NGẮT ngoại vi
: bật NGẮT toàn cục
TMR2ON = 1
: cho Timer 2 chạy
17
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
4. Bảng tóm tắt các bộ Timer
TIMER0
TIMER1
TIMER2
SIZE OF
REGISTER
8-bits (TMR0)
16-bits
(TMR1H:TMR1L)
8-bits (TMR2)
CLOCK SOURCE
(Internal)
Fosc/4
Fosc/4
Fosc/4
CLOCK SOURCE
(External )
T0CKI pin
T1CKI pin or
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)
On overflow
FFFFh0000h
(TMR1IF in PIR1)
TMR2 matches
PR2
(TMR2IF in PIR2)
YES
NO
INTERRUPT
On overflow
EVENT and FLAG
FFh00h
LOCATION
(TMR0IF in INTCON)
CAN WAKE PIC
FROM SLEEP?
NO
CHƯƠNG 5: HOẠT ĐỘNG BỘ ĐỊNH THỜI
6. Các Ví dụ và Bài tập
18