Electrical Engineering 1Bộ đị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
Trang 1Electrical Engineering 1
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
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
Trang 2Electrical Engineering 3
Các thanh ghi định thời
SFR Name Description SFR Address
Ví dụ giá trị
• Timer bắt đầu đếm từ 1000
• MOV TH0,#03
• MOV TL0, #232d
– 3 X 256 + 232 = 1000
Trang 3Electrical Engineering 5
Các chế độ của bộ định thời,
TMOD
Chế độ làm việc
TxM1 TxM0 Timer Mode Description of Mode
Trang 4Electrical Engineering 7
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
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
Trang 5Electrical Engineering 9
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
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
Trang 6Electrical Engineering 11
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
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
– Mov TMOD, #00010001B
– Setb TR0
– Hoặc
– Clr TR0; Dừng Timer 0
– Đợi cơ tràn xuất hiện
– Wait: JNB TF1, Wait
Trang 7Electrical Engineering 13
Ví dụ về đọc giá trị bộ định thời
• Đọc byte cao
• Đọc byte thấp
• Đọc lại byte cao lần nữa
và so sánh
REPEAT: MOV A,TH0
MOV R0,TL0
CJNE A,TH0,REPEAT
Đếm sự kiện
• Sử dụng thanh ghi TMOD
• Đọc giá trị T0 hoặc T1
JNB P1.0,$ Đợi xe
JB P1.0,$ Chờ xe đi qua
INC COUNTER
Tăng số đếm
Trang 8Electrical Engineering 15
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
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
Trang 9Electrical Engineering 17
Vớ dụ về tớnh hiệu quả ngắt
JNB TF0, do_smt
CPL P3.0
CLR TF0
do_smt:
Ví dụ chương trnh ngắt
CPL P3.0
RETI
Chương trình trên phải chờ bộ
định thời 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 Tổng cổng phải kiểm tra 655 lần
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
Trang 10Electrical Engineering 19
Bảng Vector ngắt
Interrupt Flag Interrupt Handler Address
External 0 IE0 0003h
Timer 0 TF0 000Bh
External 1 IE1 0013h
Timer 1 TF1 001Bh
Serial RI/TI 0023h
Khi x¶y ra ng¾t, th×
con trá PC sÏ nh¶y vÒ
vÞ trÝ ng¾t t−¬ng øng trong b¶ng
Khởi động ngắt
Bit Name Bit Address Explanation of Function
7 EA AFh Cho phép ngắt toàn cục Interrupt Enable/Disable
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
SETB ET1 SETB EA
Trang 11Electrical Engineering 21
Ư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
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
Trang 12Electrical Engineering 23
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
Các lệnh dùng bảo vệ
PUSH ACC
PUSH PSW
POP PSW
POP ACC
•C¸c thanh ghi cÇn b¶o vÖ
•PSW
•DPTR (DPH/DPL)
•PSW
•ACC
•B
•Registers R0-R7
Trang 13Electrical Engineering 25
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
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