Chuong 4 hoat dong dinh thoi
Transcript of Chuong 4 hoat dong dinh thoi
Chương 4: Hoạt động của bộ định thời
(TIMER/COUNTER)
• AT89C51 có 2 bộ định thời 16 bit (Timer 0 và Timer 1) có
thể hoạt động ở các chế độ khác nhau và có khả năng
định thời hay đếm sự kiện.
• Khi hoạt động định thời (timer), bộ Timer / Counter sẽ
phát ra các xung định thời gian.
• khi đếm sự kiện (counter), bộ Timer / Counter nhận xung
đếm từ bên ngoài.
Chương 4: Hoạt động của bộ định thời
Quá trình điều khiển hoạt động của Timer / Counter
được thực hiện thông qua các thanh ghi sau:
Thanh ghi Địa chỉ byte Địa chỉ bit
TCON 88h 88h - 8Fh
TMOD 89h Không
TL0 90h Không
TL1 91h Không
TH0 92h Không
TH1 93h Không
Chương 4: Hoạt động của bộ định thời
TMOD (Timer Mode Register) 8 bit bao gồm: 4 bit thấp dùng
để thiết lập chế độ hoạt động cho Timer 0, 4 bit cao dùng đểthiết lập chế độ hoạt động cho Timer 1.
4.1. Thanh ghi chế độ định thời (TMOD) Hai bit M0 và M1 trong trong thanh ghi TMOD sẽ quyết
định chế độ định thời làm việc.
4.1. Thanh ghi chế độ định thời (TMOD)
M1 M0 Kiểu Chức năng
0 0 0 Chế độ định thời 13 bit
0 1 1 Chế độ định thời 16 bit
1 0 2 Chế độ tự động nạp lại 8 bit
1 1 3
Chế độ định chia sẻ:
Timer 0: được tách ra làm 2 timer 8 bit
• Timer 8 bit TL0 được điều khiển bởi các
bit của Mode Timer 0.
• Timer 8 bit TH0 được điều khiển bởi các
bit của Mode Timer 1.
Timer 1: không hoạt động ở Mode 3.
Chương 4: Hoạt động của bộ định thời
TCON (Timer Control Register) chứa các bit trạng thái và các
bit điều khiển cho Timer 0 và Timer 1.
4.2. Thanh ghi điều khiển định thời (TCON)
Bit Ký hiệu Địa chỉ Chức năng
7 TF1 8FH
Cờ báo tràn timer 1. Được Set khi Timer 1
tràn. Được xoá bởi phần mềm hoặc phần
cứng khi chuyển đến chương trình con xửlý ngắt.
6 TR1 8EH
Cho phép Timer 1 hoạt động (= 1) hay
ngừng (= 0). Được Set và xóa bằng phần
mềm.
5 TF0 8DH Cờ báo tràn timer 0.
4 TR0 8CH Điều khiển hoạt động của Timer 0.
4.2. Thanh ghi điều khiển định thời (4 bit thấp)
Bit Ký hiệu Địa chỉ Chức năng
3 IE1 8BH
Dùng cho các ngắt ngoài 0 và 1
(Nghiên cứu trong chương sau)
2 IT1 8AH
1 IE0 89H
0 IT0 88H
Mỗi lần có xung đếm, giá trị trong thanh ghi 13 bit tăng
lên 1. Khi giá trị này thay đổi từ 1 1111 1111 1111b đến 0
thì bộ đếm tràn làm cho TFx được đặt lên mức 1.
4.3. Các chế độ định thời và cờ tràn
4.3.1. Chế độ 0 (chế độ định thời 13 bit)
(5 bits)
TLx
(5 bits) (8 bits)
THx
(8 bits)TFx
Timer
clockCờ tràn
Bao gồm 8 bit của thanh ghi THx và 5 bit của thanh ghi
TLx còn 3 bit cao của thanh ghi TLx không sử dụng.
4.3. Các chế độ định thời và cờ tràn
4.3.1. Chế độ 1 (chế độ định thời 16 bit)
(8 bits)
TLx
(8 bits) (8 bits)
THx
(8 bits)TFx
Timer
clockCờ tràn
Mỗi lần có xung, giá trị trong thanh ghi 16 bit tăng lên 1.
Khi giá trị này thay đổi từ 1111 1111 1111 1111b đến 0 thì
bộ đếm tràn làm cho TFx được đặt lên mức 1.
Chế độ 1 giống như chế độ 0 nhưng sử dụng 16 bit bao gồm
8 bit của THx và 8 bit của TLx.
4.3. Các chế độ định thời và cờ tràn
4.3.3. Chế độ 2 (chế độ tự nạp lại 8 bit)
(8 bits)
TLx
(8 bits)
(8 bits)
THx
(8 bits)
TFxTimer
clockCờ tràn
Nạp lại
Chế độ này sử dụng thanh ghi TLx để chứa giá trị đếm
còn thanh ghi THx chứa giá trị nạp lại cho thanh ghi TLx.
(8 bits)
TLx
(8 bits)
(8 bits)
THx
(8 bits)
TFxTimer
clockCờ tràn
Nạp lại
Khi giá trị trong thanh ghi TLx thay đổi từ
1111 1111b đến 0 thì cờ TFx được set lên mức 1, đồng
thời giá trị trong thanh ghi THx được chuyển vào
thanh ghi TLx. Giá trị đếm trong TLx và THx chỉ
được nạp một lần khi khởi động timer.
4.3. Các chế độ định thời và cờ tràn
4.3.1. Chế độ 3 (chế độ định thời chia sẻ)
(8 bits)
TLx
(8 bits) (8 bits)
THx
(8 bits)
Timer
clock
(8 bits)
TH0
(8 bits)TF1Timer
clockCờ tràn
(8 bits)
TL0
(8 bits)TF0
Timer
clock
Cờ tràn
4.3. Các chế độ định thời và cờ tràn
4.3.1. Chế độ 3 (chế độ định thời chia sẻ)
Chế độ này sử dụng các thanh ghi TL0 và TH0 nhưcác bộ định thời độc lập trong đó:
• TL0 điều khiển bằng các thanh ghi của timer 0.
Khi TL0 chuyển từ giá trị 1111 1111b đến 0 thì
TF0 được đặt lên mức1.
• TH0 điều khiển bằng các thanh ghi của timer 1.
Khi TH0 chuyển từ 1111 1111b đến 0 thì TF1
được đặt lên mức 1.
4.4. Nguồn xung clock định thời 4.5. Khởi động, dừng và điều khiển các bộ định thời
Bit TRx trong thanh ghi TCON được điều khiển bởi
phần mềm để cho phép khởi động hoặc dừng làm việc.
• Khởi động bộ định thời được thực hiện bằng lệnh:
SETB TR0
SETB TR1
• Ngừng định thời được thực hiện bằng lệnh:
CLR TR0
CLR TR1
4.6. Khoảng thời gian ngắn và dài
Khoảng thời gian Kỹ thuật
10 µµµµs Điều chỉnh phần mềm
256 µµµµs Chế độ định thời 8 bit (chế độ 2)
65536 µµµµs Chế độ định thời 16 bit (chế độ 1)
Không giới hạn Chế độ định thời + vòng lặp
4.7. Các ứng dụng của bộ định thời
Các bước thực hiện để điều khiển hoạt động của timer:
• Nạp giá trị cho thanh ghi TMOD để xác định chế độ hoạt động.
• Nạp giá trị đếm trong các thanh ghi THx, TLx.
• Đặt các bit TR0, TR1 = 1 (cho phép timer hoạt động) hay xoá
các bit này về 0 (Timer dừng hoạt động).
• Trong quá trình timer chạy, thực hiện kiểm tra các bit TF0, TF1
để xác định timer đã tràn hay chưa.
• Sau khi timer tràn, nếu thực hiện kiểm tra tràn bằng phần mềm
thì phải thực hiện xoá TF0 hay TF1 để có thể tiếp tục hoạt động.
4.7. Các ứng dụng của bộ định thời
Ví dụ 1: Viết chương trình tạo sóng vuông tần số 10 KHz
tại chân P1.0 dùng timer 0 (tần số thạch anh là 12MHz).
Giải: Do fOSC = 12MHz nên chu kỳ máy = 1 µs.
f = 10 KHz ⇒ T = 1/f = 0.1 ms = 100 µs
⇒ một chu kỳ sóng vuông chiếm khoảng thời gian
100 chu kỳ máy.
⇒ thời gian tồn tại mức cao là 50 chu kỳ máy.
4.7. Các ứng dụng của bộ định thời
Do giá trị đếm là 50 (ứng với 50 chu kỳ máy) nên chỉcần dùng chế độ 8 bit (có thể đếm từ 1 đến 256) cho timer
0 (chế độ 2).
Nội dung thanh ghi TMOD = 0000 0010b (02h)
Giá trị đếm là 50 và do timer 0 đếm lên nên giá trịcần nạp cho TH0 là -50.
Chương trình thực hiện như sau:
ORG 0000H ; Địa chỉ bắt đầu
MOV TMOD, #02h ; Thiết lập chế độ định thời
MOV TH0, #(-50) ; Nạp giá trị cho TH0
MOV TL0, #(-50) ; Nạp giá trị cho TL0
Loop1:SETB TR0 ; Cho phép timer 0 hoạt động
Loop: JNB TF0, Loop ; Nếu Timer chưa tràn thì chờ
CLR TF0 ; Xóa cờ tràn
CLR TR0
CPL P1.0 ; Đảo bit P1.0 để tạo xung vuông
SJMP Loop1
END
4.7. Các ứng dụng của bộ định thời
Ví dụ 2: Viết chương trình tạo sóng vuông tần số 1 KHz tại
chân P1.0 dùng timer 1.
Giải: f = 1KHz ⇒ T = 1/f = 1 ms = 1000 µs
Giá trị đếm là 500 (ứng với 500 chu kỳ máy)
⇒ dùng chế độ 13 (chế độ 0) bit hoặc 16 bit (chế độ 1).
Chương trình thực hiện như sau:
ORG 0000H ; Địa chỉ bắt đầu
MOV TMOD, #10h ; Thiết lập chế độ 1 của Timer 1
Loop: MOV TH1, #HIGH (-500) ; Nạp byte cao của -500
MOV TL1, #LOW (-500) ; Nạp byte thấp của -500
SETB TR1 ; Cho phép timer 0 hoạt động
Wait: JNB TF1, Wait ; Nếu Timer chưa tràn thì chờ
CLR TF1 ; Xóa cờ tràn
CPL P1.0 ; Đảo bit P1.0 để tạo xung vuông
CLR TR1
SJMP Loop
END
4.7. Các ứng dụng của bộ định thời
Ví dụ 1: Viết chương điều khiển 8 đèn LED sáng/tắt
trong 1 giây.
Chương trình thực hiện như sau:
ORG 0000H
MOV TMOD, #01H ;Timer0 chế độ
Loop: MOV P0, #00H
CALL Delay1s
MOV P0, #0FFH
CALL Delay1s
SJMP Loop
Chương trình Delay 1 giây:
Delay1s:
MOV R7,#50 ; Lặp 20 lần
Loop1: MOV TH0, #HIGH(-20000)
MOV TL0, #LOW(-20000)
SETB TR0
Wait: JNB TF0, Wait
CLR TF0
CLR TR0
DJNZ R7, Loop1
RET