Bộ định thời 8051
• Có 2 bộ định thời 8 bit, 16 bit 8052 có thêm bộ định thời 16 bit •Xác định một khoảng thời gian •Đếm sự kiện • Tạo tốc độ baud trong truyền thông nối tiếp
1
Electrical Engineering
Cách đếm timer
• Bộ định thời, dù đếm thời gian hay đếm sự
kiện đều luôn luôn đếm tăng
• Giá trị bắt đầu đếm được xác định bởi phần
mềm
• Khi bộ định thời đếm hết thì chương trình sẽ bật tắc cờ tràn, dấu hiệu cho phép thực hiện chương trình tiếp theo
2
Electrical Engineering
1
Các thanh ghi định thời
SFR Name Description SFR Address
TH0 Timer 0 High Byte 8Ch
TL0 Timer 0 Low Byte 8Ah
TH1 Timer 1 High Byte 8Dh
TL1 Timer 1 Low Byte 8Bh
TCON Timer Control 88h
3
Electrical Engineering
TMOD Timer Mode 89h
Ví dụ giá trị
• Timer bắt đầu đếm từ 1000 • MOV TH0,#03 • MOV TL0, #232d
– 3 X 256 + 232 = 1000
4
Electrical Engineering
2
Các chế độ của bộ định thời, TMOD
5
Electrical Engineering
Chế độ làm việc
TxM1 TxM0 Timer Mode Description of Mode
0 0 0 13-bit Timer.
0 1 1 16-bit Timer
1 0 2 8-bit auto-reload
6
Electrical Engineering
3
1 1 3 Split timer mode
Chế độ 13 bit
• Chế độ này dùng tương thích với VXL cũ
và không được sử dụng hiện nay
7
Electrical Engineering
Mode 1, 16 bit định thời
• Bộ đếm sẽ đếm tới – 65536, sau đó bộ đếm
sẽ quay lại 0
• Giá trị lớn nhất TL0 – 255 • Giá trị lớn nhất TH0 – 255 • Không tự động nạp lại
8
Electrical Engineering
4
Mode 2, 8 bit định thời
• Tự động nạp lại ở chế độ 8 bít • THx giữ giá trị khởi động để nạp • TLx sẽ đếm tới FF và quay trở lại TH • Ưng dụng tạo xung PWM và dùng trong
cổng nối tiếp
9
Electrical Engineering
Mode 3, chế độ định thời chia xẻ
• Tạo nên 3 bộ định thời • Bộ định thời 0 gồm 2 bộ định thời 8 bit • Bộ định thời 1 có thể dùng bất cứ chế độ
nào
10
Electrical Engineering
5
Khởi động, dừng và điều khiển bộ định thời
Bit Name Bit Address Explanation of Function Timer
7 TF1 8Fh Timer 1 Overflow. Bit này sẽ bật khi Timer 1 tràn 1
6 TR1 8Eh Timer 1 Run. Khởi động và dừng Timer 1 1
5 TF0 8Dh Timer 0 Overflow. Bit này sẽ bật khi Timer 0 tràn 0
11
Electrical Engineering
4 TR0 8Ch Timer 0 Run. Khởi động và dừng Timer 0. 0
Ví dụ về khởi động Timer
• Đặt Timer 0 ở mode 1 • Đặt Timer 1 ở mode 1
TR0; Dừng Timer 0
– Mov TMOD, #00010001B TR0 – Setb – Hoặc – Clr – Đợi cơ tràn xuất hiện – Wait: JNB TF1, Wait
12
Electrical Engineering
6
Ví dụ về đọc giá trị bộ định thời
REPEAT: MOV A,TH0
MOV R0,TL0
• Đọc byte cao • Đọc byte thấp • Đọc lại byte cao lần nữa
CJNE A,TH0,REPEAT
và so sánh
13
Electrical Engineering
...
Đếm sự kiện
JNB P1.0,$ Đợi xe
• Sử dụng thanh ghi
TMOD
JB P1.0,$ Chờ xe đi qua
• Đọc giá trị T0 hoặc T1
14
Electrical Engineering
7
INC COUNTER Tăng số đếm
Ví dụ
• Viết chương trình tạo dao động tần số
10KHz trên chân P1.0
• 10 KHZ tương đương với chu kỳ là 100μS, với thời gian mức thấp 50 μS, mức cao là 50μS.
• Giả thiết làm việc với tần số 12 MHz
15
Electrical Engineering
Ngắt (Interrupt)
• Tạm ngưng công việc hiện thời và chuyển sang thực hiện chương trình khác và quay trở lại chương trình cũ sau khi kết thúc
• Mục đích cho phép xử lý “song song” nhiều
công việc
• Tạo tính hiệu quả khi làm việc
16
Electrical Engineering
8
Ví dụ về tính hiệu quả ngắt
Ch−¬ng tr×nh trªn ph¶i chê bé ®Þnh thêi
JNB TF0, do_smt CPL P3.0 CLR TF0
do_smt: ...
Gi¶ sö bé ®Þnh thêi ®Õm tõ 0 – 65536
Gi¶ sö ch−¬ng tr×nh do_smt thùc hiÖn mÊt 100 chu kú m¸y
VÝ dô ch−¬ng trnh ng¾t CPL P3.0 RETI
Tæng cæng ph¶i kiÓm tra 655 lÇn
17
Electrical Engineering
Các sự kiện xảy ra ngắt
• Timer 0 tràn • Timer 1 tràn • Truyền và nhận tín hiệu nối tiếp • Sự kiện ngoài 0 • Sự kiện ngoài 0
18
Electrical Engineering
9
Bảng Vector ngắt
Interrupt Flag Interrupt Handler Address
External 0 IE0 0003h
Khi x¶y ra ng¾t, th× con trá PC sÏ nh¶y vÒ vÞ trÝ ng¾t t−¬ng øng trong b¶ng
Timer 0 TF0 000Bh
External 1 IE1 0013h
Timer 1 TF1 001Bh
19
Electrical Engineering
Serial RI/TI 0023h
Khởi động ngắt
Bit Name Bit Address Explanation of Function
EA AFh Cho phép ngắt toàn cục Interrupt Enable/Disable 7
SETB ET1 SETB EA
6 - AEh Undefined
5 - ADh Undefined
4 ES ACh Cho phép ngắt nối tiếp
3 ET1 ABh Cho phép ngắt Timer 1
2 EX1 AAh Cho phép ngắt External 1
1 ET0 A9h Cho phép ngắt nối tiếp Timer 0
20
Electrical Engineering
10
0 EX0 A8h Cho phép ngắt External 0
Ưu tiên ngắt
• Ngắt có ưu tiên cao sẽ xảy ra trước ngắt có
ưu tiên thấp
• 2 ngắt có cùng ưu tiên thì ngắt nào xảy ra
trước sẽ chạy trước
21
Electrical Engineering
Hoạt động VXL khi xảy ra ngắt
• Cất bộ đếm PC vào stack • Trong trường hợp Timer hoặc Event ngắt
xảy ra, cờ ngắt sẽ tự động xóa
• Chương trình sẽ nhảy về địa chỉ vector ngắt • Thực hiện chương trình ngắt
22
Electrical Engineering
11
Bảo vệ thanh ghi khi xảy ra ngắt
• CLR C ;Clear carry
MOV A,#25h ;Load the accumulator with 25h ADDC A,#10h ;Add 10h, with carry • Ngắt có thể làm thay đổi giá trị thanh ghi
23
Electrical Engineering
Các lệnh dùng bảo vệ
•C¸c thanh ghi cÇn b¶o vÖ
•PSW
•DPTR (DPH/DPL)
•PSW
PUSH ACC PUSH PSW ................ POP PSW POP ACC
•ACC
•B
•Registers R0-R7
24
Electrical Engineering
12
Các lỗi khi sử dụng ngắt
• Quên không bảo vệ thanh ghi • Quên không trả lại giá trị sau khi kết thúc
ngắt
• Trả về ngắt dùng ret thay vì dùng reti
25
Electrical Engineering
Ví dụ tạo xung vuông dùng ngắt
• Viết chương trình tạo dao động tần số
10KHz trên chân P1.0
• 10 KHZ tương đương với chu kỳ là 100μS, với thời gian mức thấp 50 μS, mức cao là 50μS.
• Giả thiết làm việc với tần số 12 MHz
26
Electrical Engineering
13