Bài giảng Vi xử lý - Chương 3: Họ vi điều khiển 805 (Phần 5) - Hồ Trung Mỹ

Hiệu đính từ slide của thầy Hồ Trung Mỹ  
Bộ môn Điện tử - DH BK TPHCM  
CHƯƠNG 3  
HỌ VI ĐiỀU KHIỂN 8051  
1
3.7 Ngắt (Interrupt)  
2
Giới thiệu ngắt  
• Ngắt là sự xảy ra một điều kiện-sự kiện làm cho treo  
tạm thời chương trình trong khi đó điều kiện này  
được phục vụ bởi một chương trình khác  
• Hệ thống được điều khiển bằng ngắt – làm nhiều việc  
đồng thời  
• Đa nhiệm (vụ) dựa trên Hardware  
• Không có hỏi vòng  
• Khi có các sự kiện cụ thể (ngắt) xảy ra, CPU sẽ  
nhảy đến 1 chương trình con cụ thể – chương  
trình phục vụ ngắt (ISR), xử lý ngắt  
• Công việc mức nền ( ở Foreground) với công việc  
mức ngắt ( ở Background)  
3
Thực thi chương trình  
4
Tổng quan về cấu trúc ngắt của 8051  
5
Các nguồn ngắt  
6
Thanh ghi cho phép ngắt IE  
• Mặt nạ ngắt  
• Nếu có nhiều nguồn ngắt xảy ra?  
– Mã hóa ưu tiên được sử dụng.  
– Chỉ có 2 cấp ưu tiên trong 8051 ⇒ Vẫn có nhiều ngắt có  
thể có cùng ưu tiên ngắt  
7
Thứ tự ưu tiên ngắt  
8
Xử lý ngắt  
Khi ngắt xảy ra và được CPU chấp nhận, chương  
trình chính bị ngắt quãng. Các hoạt động sau sẽ  
xảy ra:  
– Lệnh hiện hành hoàn tất việc thực thi  
– CPU sẽ cất PC vào ngăn xếp (địa chỉ quay về)  
– CPU sẽ nhảy đến ISR khác nhau theo nguồn ngắt  
khác nhau  
– PC ← địa chỉ vector ngắt (= 3+( # of nguồn ngắt)*8)  
– Thực thi ISR  
9
Các vector ngắt  
10  
Tổ chức bộ nhớ khi sử dụng ngắt  
11  
Khung chương trình dùng ngắt  
ORG 0000H  
; Điểm vào reset  
LJMP MAIN  
.
.
.
; Các điểm vào ISR  
ORG 0030H ; Điểm vào chương trình chính  
MAIN : .  
.
; Chương trình chính bắt đầu.  
Lệnh thứ nhất nhảy đến địa chỉ 0030H, vừa trên  
các vị trí vector mà các ISR bắt đầu  
12  
Chương trình phục vụ ngắt có  
kích thước nhỏ  
Nếu chỉ có một nguồn ngắt được sử dụng, ví dụ Timer 0, thì có thể sử  
dụng khung chương trình sau :  
ORG 0000H  
; Reset  
LJMP MAIN  
ORG 000BH  
; Điểm vào ISR cho Timer 0  
; Bắt đầu ISR cho Timer 0  
T0ISR:  
MAIN:  
.
.
RETI  
; Quay về chương trình chính  
; Chương trình chính  
.
.
.
Nếu sử dụng nhiều ngắt, thì cẩn thận, phải bảo đảm là chúng bắt đầu ở vị  
trí đúng và không chạy lố sang ISR kế. Vì chỉ có một ngắt được sử dụng  
trong ví dụ trên, chương trình chính có thể bắt đầu ngay sau lệnh RETI.  
13  
Chương trình phục vụ ngắt có  
kích thước lớn  
Thí dụ lúc này chỉ xét Timer 0, có thể sử dụng khung sau :  
ORG 0000H  
LJMP MAIN  
ORG 000BH  
LJMP T0ISR  
ORG 0030H  
; Điểm vào reset  
; Điểm vào ISR của Timer 0  
; Các vector ngắt tiếp theo  
MAIN: .  
; Chương trình chính  
.
.
T0ISR: .  
; Bắt đầu ISR cho Timer 0  
.
.
RETI  
; Quay về chương trình chính.  
Để đơn giản, chương trình của chúng ta sẽ chỉ làm một việc lúc ban đầu. Chương trình khởi  
động timer, cổng nối tiếp và các thanh ghi ngắt cho thích hợp và rồi không làm gì cả.  
Công việc hoàn toàn được làm trong ISR. Sau các lệnh khởi động, chương trình chính  
chứa lệnh sau :  
HERE: SJMP HERE  
hay dạng viết gọn như sau:  
SJMP $  
14  
a) Ngắt timer  
• Ngắt timer xảy ra khi các cờ tràn TFx  
được bật lên một  
• Cờ tạo ra ngắt này được xóa bằng phần  
cứng khi CPU chuyển đến chương trình  
phục vụ ngắt (ISR)  
15  
Thí dụ: Tạo sóng vuông bằng ngắt của Timer  
Các ngắt của Timer xảy ra khi các thanh ghi timer  
TLx/THx tràn và đặt cờ báo tràn lên 1 (TFx). Ta có  
chương trình như sau:  
16  
Phân tích CT Tạo sóng vuông bằng ngắt Timer  
• Ngay sau khi reset, PC được nạp trị 0000H.  
• Lệnh đầu tiên được thực thi LJMP MAIN mà rẽ nhánh bỏ qua ISR của  
Timer 0 đến địa chỉ 0030H trong bộ nhớ mã.  
• Ba lệnh kế (các dòng 11–13) khởi trị Timer 0 chế độ 2 tràn sau 50 μs.  
• Lệnh MOV IE, #82H cho phép ngắt của Timer 0. Dĩ nhiên tràn thứ nhất  
sẽ không xảy ra trong vì có trì hoãn ở các lệnh khởi tạo trị...  
• Cứ sau 50 μs một ngắt xảy ra; chương trình chính bị ngắt và ISR (của  
Timer 0) thực thi. ISR này đảo trạng thái bit cổng và quay về chương  
trình gọi nó (vòng lặp tại chỗ) và tiếp tục như vậy với 50 μs kế.  
• Chú ý là cờ timer TF0 không bị xóa bằng phần mềm. Khi các ngắt  
được cho phép, TF0 tự động bị xóa bằng phần cứng khi CPU chỉ  
đến ngắt.  
• Tình cờ địa chỉ quay về trong chương trình chính là địa chỉ của lệnh  
SJMP. Địa chỉ được cất vào ngăn xếp bên trong trước khi chỉ đến mỗi  
ngắt và được lấy lại từ ngăn xếp khi thực thi lệnh RETI ở cuối ISR. Vì SP  
đã không được khởi tạo trị, do đó mặc nhiên nó có giá trị reset là 07H.  
Tác vụ cất (PUSH) để địa chỉ quay về trong các ô nhớ RAM nội 08H (PCL  
17  
= byte thấp của PC) và 09H (PCH = byte cao của PC).  
Thí dụ: Tạo hai sóng vuông dùng ngắt (1/2)  
Viết chương trình dùng các ngắt để tạo ra các sóng vuông đồng thời  
7 KHz và 500 Hz ở các chân P1.7 và P1.6.  
Bài giải.  
Cấu hình phần cứng với những định thì cho các dạng sóng mong  
muốn được cho trong hình sau:  
18  
Thí dụ: Tạo hai sóng vuông dùng ngắt (2/2)  
19  
Ngắt timer  
VD: Tạo sóng vuông có tần số 100Hz trên chân  
P1.2, duty cycle = 25% dùng ngắt timer 1,  
XTAL = 6MHz  
20  
Tải về để xem bản đầy đủ
pdf 26 trang myanh 23160 Free
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Vi xử lý - Chương 3: Họ vi điều khiển 805 (Phần 5) - Hồ Trung Mỹ", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_vi_xu_ly_chuong_3_ho_vi_dieu_khien_805_phan_5_ho_t.pdf