BỘ ĐỊNH THỜI/ BỘ ĐẾM TIMER/COUNTER BỘ ĐỊNH THỜI/ BỘ ĐẾM TIMER/COUNTER... Giới thiệu• Tạo ra những khoảng thời gian chính xác đến cấp chu kỳ máy, có thể thay đổi khoảng thời gian đó linh
Trang 1BỘ ĐỊNH THỜI/ BỘ ĐẾM (TIMER/COUNTER)
BỘ ĐỊNH THỜI/ BỘ ĐẾM (TIMER/COUNTER)
Trang 21 Giới thiệu
• Tạo ra những khoảng thời gian chính xác đến cấp chu kỳ máy, có thể thay đổi khoảng thời
gian đó linh hoạt
• Dùng đếm sự kiện – thường ứng dụng để đọc encoder.
Trang 3Vị trí của các bộ định thời trong sơ đồ khối của chip 89X51/52
Các bộ định thời
Trang 4VỊ TRÍ CÁC THANH GHI CỦA BỘ ĐỊNH THỜI TRONG
VÙNG NHỚ ĐẶC BIỆT- SFR
Trang 52 Hoạt động
XTAL
oscillator ÷12
Cờ tràn (Overflow Flag)
TF bật lên 1 khi FFFF → 0 C/T = 0 TR
TH0 TL0
D0 D1
D2 D3
D4 D5
D6 D7
D8 D9
D10 D11
D12 D13
D14 D15
TH1 TL1
D0 D1
D2 D3
D4 D5
D6 D7
D8 D9
D10 D11
D12 D13
D14 D15
Trang 6Minh họa hoạt động của timer
TF=0 TF=0 TF=0 TF=0 TF=1
Timer là bộ đếm lên, khi xảy ra trạng thái FFFF 0000 thì cờ TF bật 1
Trang 73 Các thanh ghi
1 Các thanh ghi của bộ định thời
- Timer 0: TH0, TL0
- Timer 1: TH1, TL1
2 Các thanh ghi trạng thái và cài đặt chế độ hoạt động cho các bộ định thời:
+ TCON : Điều khiển + TMOD : Chọn chế độ
Trang 8Thanh ghi TCON – Timer/Counter Control Register
TCON
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
Cờ ngắt ngoài 1
Cờ ngắt của Timer0
Cờ ngắt của Timer1
Cờ ngắt ngoài 0
Trang 9Thanh ghi TMOD : Timer Mode
TMOD
GATE
C/T
M1
M0
GATE
C/T
M1
M0
Chọn chế độ hoạt động
cho TIMER1
Chọn chế độ hoạt động
cho TIMER0
Chọn chế độ hoạt động
Trang 104 Chế độ hoạt động của Timer
Mỗi bộ định thời có thể hoạt động ở 4 chế độ:
- Chế độ 0: Chế độ định thời 13 bit
- Chế độ 1: Chế độ định thời 16 bit
- THx, TLx chứa giá trị đếm hiện tại của bộ định thời
- Chế độ 2: Chế độ tự nạp lại 8-bit
- Byte thấp giữ giá trị đếm hiện tại
- Byte cao giữ giá trị nạp lại
Trang 11Thanh ghi TMOD : Timer Mode
TMOD
GATE
C/T
M1
M0
GATE
C/T
M1
M0
Chọn chế độ hoạt động
cho TIMER1
Chọn chế độ hoạt động
cho TIMER0
Chọn chế độ hoạt động
Trang 12Bit M0, M1 – của thanh ghi TMOD TMOD
0 0 0 Chế độ định thời 13 bit
TMOD
Trang 13Ví dụ:
Ví dụ 1:
Xác định xem các timer làm việc ở chế độ nào sau đây (a) MOV TMOD, #01H (b)
MOV TMOD, #20H (c) MOV TMOD, #12H
Giải:
Đổi từ hexa sang nhị phân, dựa vào bảng chế động hoạt động của timer ta có
(a) TMOD = 00000001, mode 1 of timer 0 is selected.
(b) TMOD = 00100000, mode 2 of timer 1 is selected.
(c) TMOD = 00010010, mode 2 of timer 0, and mode 1 of timer 1 are selected.
Ví dụ 2:
Tính tần số và chy kỳ của chip 8051 khi sử dụng thạch anh 11.0592Mhz khi bit C/T
của thanh ghi TMOD bằng 0.
Giải:
1/12 × 11.0529 MHz = 921.6 MHz; T = 1/921.6 kHz = 1.085 us
XTAL oscillator ÷12
Trang 14Lập trình cho bộ định thời Timer 0
• Ví dụ 3 : lập trình cho bộ định thời 0 hoạt động ở chế độ 1, 16 bit, có
thời gian tràn là 500us (sử dụng thạch 12Mhz).
Vì bộ định thời đếm lên 1 đơn vị sau mỗi chu kỳ máy nên bộ định thời
TF0 = 0; // (CLR TF0) Xóa cờ tràn TR0 = 1; // (SETB TR0) Khởi động bộ định thời
while(!TF0) continue; // JNB TF0, $
Trang 15Chương trình hoàn chỉnh ví dụ 3
C
TMOD = 0000 0001 B TH0 = 0xFE;
TL0 = 0x0C;
TF0 = 0; // Xóa cờ tràn // Khởi động bộ định thời TR0 = 1;
// Chờ cờ tràn bật 1 while(!TF0) continue;
// Dừng bộ định thời TR0 = 0;
// Nạp lại giá trị TH0 = 0xFE;
TL0 = 0x0C;
// Khởi động bộ định thời TR0 = 1;
ASM
MOV TMOD, #0000 0001 B
;Khởi động bộ định thời
; Chờ cờ tràn bật 1
JNB TF0, $
; Dừng bộ định thời
; Nạp lại giá trị
// Khởi động bộ định thời
Trang 16Lập trình cho bộ định thời Timer 0 – (tiếp)
• Ví dụ 4 : lập trình cho bộ định thời 0 hoạt động ở chế độ 2, 8-bit tự tự
Ở chế độ 2, thanh ghi TH0 sẽ giữ giá trị nạp lại, vậy
+ TF0 = 0; // (CLR TF0) Xóa cờ tràn + TR0 = 1; // (SETB TR0) Khởi động bộ định thời
- while(!TF0) continue; // JNB TF0, $
Trang 17Chương trình hoàn chỉnh ví dụ 4
C TMOD = 0x02;
TH0 = 56;
TL0 = 56;
TF0 = 0; // Xóa cờ tràn // Khởi động bộ định thời TR0 = 1;
// Chờ cờ tràn bật 1 while(!TF0);
// Dừng bộ định thời TR0 = 0;
// Khởi động bộ định thời TR0 = 1;
ASM
;Khởi động bộ định thời
SETB TR1
; Chờ cờ tràn bật 1
JNB TF0, $
; Dừng bộ định thời
// Khởi động bộ định thời
Trang 18Tạo trễ sử dụng Timer
MAIN:
MOV TMOD, #0000 0010 B
AGAIN:
DELAY:
;Khởi động bộ định thời
; Chờ cờ tràn bật 1
; Dừng bộ định thời
void main() { TMOD = 0x02;
while(1) { P1_0 = !P1_0;
delay(56);
}
void delay(unsigned char us){ TH0 = us;
TL0 = us;
TF0 = 0 ; Xóa cờ tràn
;Khởi động bộ định thời TR1 = 1;
; Chờ cờ tràn bật 1 while(!TF0);