chuong 5 hoat dong ngat
TRANSCRIPT
Nội dung:
• Chương 1: Giới thiệu về Vi xử lý
• Chương 2: Giới thiệu về cấu trúc của Họ Vi điềukhiển 8051
• Chương 3: Khảo sát tập lệnh và lập trình Vi điềukhiển 8051
• Chương 4: Hoạt động của bộ định thời
• Chương 5: Hoạt động ngắt
• Chương 6: Hoạt động truyền thông nối tiếp
• Chương 7: Thiết kế giao tiếp
Chương 5: Hoạt động ngắt (INTERRUPT)
5.1. Giới thiệu chung:
� Ngắt là quá trình dừng chương trình đang thực thi
để phục vụ cho một chương trình khác khi xảy ra
một sự kiện.
� Chương trình xử lý sự kiện ngắt gọi là chương
trình phục vụ ngắt (ISR – Interrupt Service
Routine).
Chương 5: Hoạt động ngắt (INTERRUPT)
Thực thi chương trình không có ngắt
Thực thi chương trình có ngắt
Chương 5: Hoạt động ngắt (INTERRUPT)
5.1. Tổ chức ngắt của MCS-51
� Họ MCS-51 có tổng cộng 5 nguồn ngắt khác nhau:
• 2 ngắt ngoài 0, 1 (tại các chân INT0, INT1).
• 2 ngắt do timer 0, 1 (khi timer tương ứng tràn).
• 1 ngắt do port nối tiếp.
� Đối với họ 89x52 sẽ có thêm ngắt do timer 2.
Chương 5: Hoạt động ngắt (INTERRUPT)
5.2.1. Cho phép và không cho phép ngắt:
Các nguyên nhân ngắt được cho phép hay
không cho phép thông qua thanh ghi cho phép
ngắt IE (Interrupt Enable).
Thanh ghi này nằm trong vùng nhớ SFR,
có địa chỉ byte A8h và được định địa chỉ từng
bit.
Chương 5: Hoạt động ngắt (INTERRUPT)
Thanh ghi cho phép ngắt IE
5.2.1. Cho phép và không cho phép ngắt:
Chương 5: Hoạt động ngắt (INTERRUPT)5.2.1. Cho phép và không cho phép ngắt:
Ví dụ: Để cho phép Timer 1 ngắt, ta có thể thực hiện
bằng các lệnh:
SETB EA ; Cho phép ngắt toàn cục
SETB ET1 ; Cho phép Timer 1 ngắt
Hoặc có thể dùng lệnh sau:
MOV IE, #10001000B
Chương 5: Hoạt động ngắt (INTERRUPT)5.2.2. Ưu tiên ngắt:
Khi có nhiều ngắt tác động đồng thời, ngắt nào
có mức ưu tiên cao sẽ thực hiện trước, ngắt nào có
mức ưu tiên thấp hơn sẽ thực hiện sau.
Việc thiết lập các mức ưu tiên ngắt được thực
hiện thông qua thanh ghi ưu tiên ngắt IP (Interrupt
Priority). Thanh ghi này có địa chỉ B8h và được định
địa chỉ từng bit.
Chương 5: Hoạt động ngắt (INTERRUPT)5.2.2. Ưu tiên ngắt:
Thanh ghi ưu tiên ngắt
Họ MCS-51 có 2 mức ưu tiên: mức cao và
mức thấp. Quá trình xử lý ưu tiên ngắt mô tả
như sau:
• Nếu 2 ngắt xảy ra đồng thời thì ngắt nào có
mức ưu tiên cao hơn sẽ được phục vụ trước.
5.2.2. Ưu tiên ngắt:
• Nếu 2 ngắt xảy ra đồng thời có cùng mức ưu tiên
thì thứ tự ưu tiên được thực hiện như sau:
Ngắt ngoài 0 ⇒⇒⇒⇒ Ngắt do Timer 0 ⇒⇒⇒⇒ Ngắt ngoài 1 ⇒⇒⇒⇒
Ngắt do Timer 1 ⇒⇒⇒⇒ Ngắt do cổng nối tiếp ⇒⇒⇒⇒ Ngắt do
Timer 2.
• Nếu ISR của một ngắt có mức ưu tiên thấp đang
thực hiện mà có ngắt khác xảy ra với mức ưu tiên
cao thì ISR này sẽ tạm dừng để thực thi ISR có mức
ưu tiên cao.
5.2.2. Ưu tiên ngắt: 5.3. Xử lý ngắt:
Khi có một ngắt xảy ra, được CPU chấp nhận, các
thao tác sẽ được thực hiện như sau:
• Hoàn tất việc thực thi hiện hành.
• Bộ đếm chương trình PC được cất vào Stack.
• Trạng thái của ngắt hiện hành được lưu giữ lại.
• Các ngắt được chặn lại ở mức ngắt.
• Đưa vào thanh ghi PC địa chỉ ISR tương ứng.
• Bắt đầu thực thi chương trình phục vụ ngắt.
Chương 5: Hoạt động ngắt (INTERRUPT)
5.3. Xử lý ngắt:
Việc thực thi ISR kết thúc khi gặp lệnh RETI.
Khi gặp lệnh này CPU lấy lại giá trị cũ của bộ
đếm chương trình PC từ Stack. Sau đó,
chương trình chính được tiếp tục thực thi ở
nơi tạm ngưng.
Chương 5: Hoạt động ngắt (INTERRUPT)
5.3.1. Các vector ngắt:
• Vector ngắt là địa chỉ bắt đầu của chương trình
con phục vụ ngắt.
• Khi một ngắt được chấp nhận, vector ngắt
được nạp cho bộ đếm chương trình PC.
Chương 5: Hoạt động ngắt (INTERRUPT)5.3.1. Các vector ngắt:
Chương 5: Hoạt động ngắt (INTERRUPT)5.4. Thiết kế chương trình sử dụng ngắt:
Khuôn mẫu của chương trình sử dụng ngắt:
5.4.1. Các chương trình có kích thước nhỏ:
Nếu chỉ có một nguyên nhân ngắt được dùng, chẳng
hạn như ngắt do Timer 0 thì khuôn mẫu chương
trình có dạng như sau:
ORG 0000H ; Điểm nhập Reset
LJMP MAIN
ORG 000BH ;Điểm nhập của ngắt do Timer 0
T0ISR: ……………… ; ISR của Timer 0
RETI ; Trở về chương trình chính
MAIN: ……………… ; chương trình chính
5.4.2. Các chương trình có kích thước lớn:
ORG 0000H ; Điểm nhập Reset
LJMP MAIN
ORG 000BH ;Điểm nhập của ngắt do Timer 0
LJMP T0ISR
…………….............; Điểm nhập các ngắt khác
ORG 0030H ; Phía trên các vector ngắt
MAIN: ………………
T0ISR: ………………; ISR của Timer 0
RETI ; Trở về chương trình chính
Chương 5: Hoạt động ngắt (INTERRUPT)
5.5. Các ứng dụng của lập trình ngắt:
Bài toán 1: Viết chương trình sử dụng bộ định thời
T0 và các ngắt để tạo ra sóng vuông 10kHz trên
chân P1.0
Bài toán 1: Viết chương trình sử dụng bộ định thời T0 và các
ngắt để tạo ra sóng vuông 10kHz trên chân P1.0
ORG 0000H ; Điểm nhập reset
LJMP MAIN ; Nhảy qua khỏi vector ngắt
ORG 000BH ; Vector ngắt của T0
T0ISR: CPL P1.0 ; Lấy bù
RETI
ORG 0030H ; Điểm nhập của ctrình chính
MAIN: MOV TMOD, #02H ; T0 ở mode 2
MOV TH0, #-50
SETB TR0 ; T0 hoạt động
MOV IE, #10000010B ; Cho phép ngắt do T0
SJMP $ ; Không làm gì
END
Chương 5: Hoạt động ngắt (INTERRUPT)
5.5. Các ứng dụng của lập trình ngắt:
Bài toán 2: Viết chương trình sử dụng các ngắt để tạo ra các
sóng vuông 7kHz và 500 Hz trên các chân P1.6 và P1.7
Bài toán 2: Viết chương trình sử dụng các ngắt để tạo ra các
sóng vuông 7 kHz và 500 Hz trên các chân P1.6 và P1.7
ORG 0000H ; Điểm nhập reset
LJMP MAIN ; Nhảy qua khỏi vector ngắt
ORG 000BH ; Vector ngắt của T0
LJMP T0ISR
ORG 001BH ; Vector ngắt của T1
LJMP T1ISR
ORG 0030H
MAIN: MOV TMOD, #12H ; Timer 1: mode 1
; Timer 0: mode 2;
MOV TH0, #-71 ; Sử dụng T0, f= 7kHz
SETB TR0 ; Timer 0 hoạt động
SETB TF1 ; Buộc ngắt do Timer 1
MOV IE, #8AH ; Cho phép ngắt do T0 và T1
SJMP $
T0ISR: CPL P1.7
RETI
T1ISR: CLR TR1
MOV TH1, #HIGH(-1000)
MOV TL1, #LOW(-1000)
SETB TR1
CPL P1.6
RETI
END
Chương 5: Hoạt động ngắt (INTERRUPT)
5.5. Các ứng dụng của lập trình ngắt:
Bài toán 3: Viết chương trình sử dụng các ngắt để
tạo ra các sóng vuông 10kHz và 20 Hz trên các
chân P1.0 và P1.1.