Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 43 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
43
Dung lượng
699,81 KB
Nội dung
CHƯƠNG NGẮT(INTERRUPT) Giáo Trình Vi Xử Lý Lưu Phú Tóm tắt: 7.1 Giới thiệu 7.2 Tổ chức ngắt MCU8051 7.2.1 SFR IE- Cấm/cho phép nguồn ngắt 7.2.2 SFR IP- Mức ưu tiên ngắt 7.2.3 Trình tự hỏi vòng 7.2.4 Các cờ báo ngắt 7.3 Xử lý ngắt 7.4 Thiết kế chương trình sử dụng ngắt 7.4.1 ISR ngắn 7.4.2 ISR dài 7.5 Ngắt Timer 7.6 Ngắt SPI 7.7 Ngắt ngồi 7.8 Định ngắt Giáo Trình Vi Xử Lý Lưu Phú 7.1 Giới thiệu Ngắt hoạt động bất đồng tác động vào chương trình thực Khi u cầu ngắt đáp ứng,chương trình tạm dừng,chuyển sang thực chương trình phục vụ ngắt thực xong quay thực tiếp chương trình điểm dừng ban đầu Ngắt tác động điểm chương trình Chương trình thực theo tác động ngắt gọi trình phục vụ ngắt(ISR: Interrupt Sevice Routine) Địa bắt đầu ISR gọi vector ngắt(do nhà sản xuất quy định) Kết thúc ISR lệnh RETI(Return from Interrupt) Hình 7.1 mơ tả hoạt động MCU có tác động ngắt: Chương trình chính=Base-level(Foreground) ISR=Interrupt-level(Background) Giáo Trình Vi Xử Lý Lưu Phú 7.1 Giới thiệu Hình 7.1: (a) Chương trình khơng có ngắt;(b) Chương trình có ngắt Giáo Trình Vi Xử Lý Lưu Phú 7.1 Giới thiệu Một số ví dụ tác động ngắt: Trong ví dụ nhận dạng phím nhấn,thay chương trình liên tục hỏi vịng đọc trạng thái phím chờ phím nhấn,sử dụng tác động nhấn phím làm điều kiện ngắt.Chương trình thực cơng việc khác,khi có phím nhấn tạo ngắt,chương trình chuyển sang ISR phục vụ theo u cầu có phím nhấn Trong ví dụ giao tiếp ADC0809,thay MCU phải chờ tín hiệu EOC tích cực hay phải thực chương trình tạo trễ 120µs,sử dụng tín hiệu EOC tích cực làm tín hiệu ngắt.MCU thực công việc khác,khi ADC biển đổi xong tạo tín hiệu EOC tích cực báo ngắt,MCU chuyển sang ISR tương ứng để đọc giá trị AD Hoạt động ngắt giải phóng cho MCU khỏi khoảng “thời gian chết” chờ thực điều kiện(như chờ nhấn phím,chờ ADC biến đổi xong…),tiết kiệm thời gian thực thi MCU MCU gần đáp ứng tức thời với tác động hay kiện xảy ra! Giáo Trình Vi Xử Lý Lưu Phú 7.2 Tổ chức ngắt MCU8051 MCU8051 có nguồn ngắt: ngắt ngoài,2 ngắt Timer,1 ngắt cổng nối tiếp(SPI) Ngắt ngõ /INT0=P3.2: Tín hiệu tạo ngắt đưa vào ngõ /INT0 tích cực mức thấp cạnh xuống Ngắt ngồi ngõ /INT1=P3.3: Tín hiệu tạo ngắt đưa vào ngõ /INT1 tích cực mức thấp cạnh xuống Ngắt Timer0: Tín hiệu tạo ngắt Timer0 tràn TF0=1 Ngắt Timer1: Tín hiệu tạo ngắt Timer1 tràn TF1=1 Ngắt SPI: Tín hiệu báo ngắt phát xong ký tự TI=1 hay thu xong ký tự RI=1 MCU8052 có thêm ngắt Timer2 Khi Timer2 tràn TF2=1 hay bắt/nạp lại làm EXF2=1 Tất nguồn ngắt bị cấm reset hệ thống khai báo cho phép/cấm riêng rẽ nguồn ngắt qua SFR IE Trường hợp có hay nhiều nguồn ngắt xảy đồng thời,mức ưu tiên ngắt khai báo ưu tiên nguồn ngắt qua SFR IP hay trình tự hỏi vịng mặc định Giáo Trình Vi Xử Lý Lưu Phú 7.2 Tổ chức ngắt MCU8051 7.2.1 SFR IE- Cấm/cho phép nguồn ngắt IE địa byte 0A8H,truy xuất bit Chứa bit cấm/cho phép toàn nguồn ngắt độc lập Bảng 7-1: Tóm tắt SFR IE Bit IE.7 IE.6 IE.5 IE.4 IE.3 IE.2 IE.1 IE.0 Ký hiệu EA ET2 ES ET1 EX1 ET0 EX0 Đia bit 0AFH 0AEH 0ADH 0ACH 0ABH 0AAH 0A9H 0A8H Mô tả(1= cho phép;0= cấm) Cho phép/cấm toàn cục Chưa định nghĩa Cho phép ngắt Timer2(8052) Cho phép ngắt SPI Cho phép ngắt Timer1 Cho phép ngắt ngõ /INT1 Cho phép ngắt Timer0 Cho phép ngắt ngồi ngõ /INT0 Ví dụ 7.1: Khai báo cho phép ngắt Timer1 Giải: MOV IE,#10001000B ;thường sử dụng đầu chương trình Hay SETB EA ;thường sử dụng thân chương trình SETB ET1 ;khơng ảnh hưởng đến bit khác Giáo Trình Vi Xử Lý Lưu Phú 7.2 Tổ chức ngắt MCU8051 7.2.2 SFR IP- Mức ưu tiên ngắt IP địa bit B8H,truy xuất bit Khai báo bit ưu tiên cao=1/ ưu tiên thấp=0 cho nguồn ngắt độc lập Khi reset hệ thống (IP)=00H→các nguồn ngắt mức ưu tiên Bảng 7-2: Tóm tắt SFR IP Bit Ký hiệu Đia bit Mô tả(1= ưu tiên cao;0= ưu tiên thấp) IP.7 IP.6 IP.5 IP.4 IP.3 IP.2 IP.1 IP.0 PT2 PS PT1 PX1 PT0 PX0 0BDH 0BCH 0BBH 0BAH 0B9H 0B8H Chưa định nghĩa Chưa định nghĩa Ưu tiên ngắt Timer2(8052) Ưu tiên ngắt SPI Ưu tiên ngắt Timer1 Ưu tiên ngắt ngõ /INT1 Ưu tiên Timer0 Ưu tiên ngắt ngồi ngõ /INT0 Giáo Trình Vi Xử Lý Lưu Phú 7.2 Tổ chức ngắt MCU8051 7.2.2 SFR IP- Mức ưu tiên ngắt Thực ngắt ưu tiên: - Khi nguồn ngắt xảy đồng thời điểm,MCU thực trước nguồn ngắt mức ưu tiên cao,sau thực nguồn ngắt mức ưu tiên thấp - Khi MCU thực ISR nguồn ngắt mức ưu tiên thấp,có tín hiệu u cầu nguồn ngắt mức ưu tiên cao,MCU tạm dừng thực ISR nguồn ngắt ưu tiên thấp,chuyển sang thực ISR nguồn ngắt ưu tiên cao hơn,sau quay thực tiếp ISR nguồn ngắt mức ưu tiên thấp điểm dừng trước 7.2.3 Trình tự hỏi vòng Trường hợp nguồn ngắt cấp ưu tiên,MCU xác định mức ưu tiên theo trình tự hỏi vòng theo thứ tự nguồn ngắt ưu tiên đứng trước: /INT0,Time0,/INT1,Timer1,SPI,Timer2 Giáo Trình Vi Xử Lý Lưu Phú 7.2 Tổ chức ngắt MCU8051 Ví dụ 7.2: Sau reset hệ thống,thực lệnh sau: MOV IE,#93H SETB PS Giả sử MCU thực ISR Timer0,có tín hiệu u cầu ngắt /INT0 sau tín hiệu u cầu ngắt SPI Mơ tả hoạt động MCU trường hợp Giải: MCU thực ISR Timer0→ngắt /INT0 xảy ra,do sau reset hệ thống mức ưu tiên nguồn ngắt nhau(PX0=PT0=0)→xét trình tự hỏi vịng ngắt /INT0 ưu tiên cao hơn→MCU tạm dừng ISR Timer0 chuyển đến thực ISR /INT0 MCU thực ISR /INT0→ngắt SPI xảy ra,do PS=1→mức ưu tiên cao hơn→MCU tạm dừng ISR /INT0 chuyển đến thực ISR SPI Sau thực xong ISR SPI,MCU quay thực tiếp ISR /INT0 Sau thực xong ISR /INT0,MCU quay thực tiếp ISR Timer0 Sau thực xong ISR Timer0,MCU quay thực tiếp chương trình Giáo Trình Vi Xử Lý Lưu Phú 10 7.7 Ngắt ngồi Ví dụ 7.10: Mạch điều khiển nhiệt độ hình vd7.7 hoạt động sau: - P1.7 điều khiển mạch lái nguồn nhiệt : P1.7=1 lò nung on,P1.7=0 lò nung off - Các cảm biến có ngõ ra: = = ℎ > 21° = = ℎ < 19° Viết chương trình sử dụng ngắt /INT0 ngắt /INT1 điều khiển lò nung ổn định nhiệt độ = 20° ± 1° Giải: P1.7=0 > 21° ,P1.7=1 < 19° ORG LJMP MAIN EX0_ISR: CLR P1.7 ;vector ngắt /INT0,off lò nung RETI ORG 000BH;vector ngắt /INT1 EX1_ISR: SETB P1.7 ;on lò nung RETI ORG 0030H MAIN: MOV IE,#85H ; cho phép ngắt /INT0 /INT1 SETB IT0 ;ngắt /INT0 cạnh xuống SETB IT1 ;ngắt /INT1 cạnh xuống SETB P1.7 ; on lị nung SJMP $ Hình vd7.10 Giáo Trình Vi Xử Lý Lưu Phú 29 END 7.7 Ngắt ngồi Ví dụ 7.11: Thiết kế mạch phát âm cảnh báo tần số 400Hz giây cảm biến cửa mở phát tín hiệu logic từ 1→0 theo sơ đồ mạch hình vd7.11(Fosc=12Mhz) Giải: Sử dụng tín hiệu cảm biến cửa mở làm tín hiệu ngắt /INT0: - Trong ISR /INT0 cho phép ngắt Timer0 Timer1 Sử dụng ngắt Timer0 tạo chuỗi xung vng đối xứng f=400Hz→T=2500µs: - Khai báo Timer0 mode 1,giá trị nạp lại=-1250 Sử dụng ngắt Timer1 tạo thời gian delay 50ms đếm số lần ngắt 20 lần→tạo trễ 1s: - Khai báo Timer1 mode 1,giá trị nạp lại=-50000 N0 EQU -1250 N1 EQU -50000 ORG LJMP MAIN LJMP EX0_ISR ;vector ngắt /INT0 ORG 000BH ;vector ngắt Timer0 LJMP T0_ISR ; ORG 001BH ;vector ngắt Timer1 LJMP T1_ISR Giáo Trình Vi Xử Lý Lưu Phú 30 7.7 Ngắt ORG MAIN: SETB MOV MOV SJMP EX0_ISR: MOV SETB SETB SETB SETB RETI T0_ISR: CLR MOV MOV CPL SETB RETI T1_ISR: CLR DJNZ CLR CLR SJMP 0030H IT0 TMOD,#11H IE,#81H $ R7,#20 TF0 TF1 ET0 ET1 ;ngắt /INT0 cạnh xuống ;Timer0 Timer1 mode ; cho phép ngắt /INT0 ;đếm số lần ngắt /INT0 ;ép ngắt Timer0 ;ép ngắt Timer1 ;cho phép ngắt Timer0 ;cho phép ngắt Timer1 TR0 TH0,#HIGH(N0);giá trị nạp lại Timer0 TL0,#LOW(N0) P1.7 ;xuất xung P1.7 TR0 TR1 R7,SKIP ET0 ET1 EXIT Hình vd7.11 SKIP: MOV TH1,#HIGH(N1);giá trị nạp lại Timer1 MOV TL1,#LOW(N1) SETB TR1 ;đếm số lần ngắt đủ 20? EXIT: RETI ;cấm ngắt Timer0 END ;cấm ngắt Timer1 Giáo Trình Vi Xử Lý Lưu Phú 31 7.7 Ngắt ngồi Trong ISR /INT0 đặt số lần đếm ngắt timer0,ép ngắt Timer0 Timer1 mềm cho phép ngắt Timer để khởi động nạp giá trị nạp lại cho Timer Trong ISR Timer1 đếm số lần ngắt Timer1 đến 20 lần vừa 1s→cấm ngắt Timer trở lại Trong ISR Timer0 tạo chuỗi xung vuông đối xứng f=400Hz xuất P1.7 Mức ưu tiên ngắt nguồn ngắt cấp(IP=00H)→thứ tự ưu tiên ngắt /INT0,Timer0,Timer1 Sử dụng ngắt Timer0 tạo chuỗi xung f=400Hz thời gian lần ngắt 1.25ms ngắn nhiều so với thời gian lần ngắt Timer1 50ms→ngắt Timer0 ưu tiên ngắt Timer1 để tạo xung xác theo yêu cầu! Giáo Trình Vi Xử Lý Lưu Phú 32 7.7 Ngắt ngồi Ví dụ 7.12: Viết chương trình đo độ rộng xung thực công việc sau: - Đo độ rộng xung mức độ rộng xung mức ,tầm độ rộng xung từ 13µs đến 10ms - Đo liên tục chuỗi 16 xung liên tiếp,lần lượt lưu thời gian mức vào RAM nội địa đầu 20H thời gian mức vào địa đầu 40H,lặp vòng lưu lại địa đầu sau chuỗi 16 xung - Liên tục phát data tương ứng thời gian mức thời gian mức chuỗi 16 xung địa đầu 20H 40H RAM địa đầu1000H, lặp vòng lưu lại địa đầu lưu đủ chuỗi 16 xung - Khi SPI nhận ký tự STX(mã ASCII=02H), liên tục phát data tương ứng thời gian mức thời gian mức chuỗi 16 xung địa đầu 20H 40H SPI với BR9600,sau lưu lại thời gian đo độ rộng từ địa đầu - Tự chọn Fosc thích hợp Giải: Sơ đồ mạch đo hình vd7.12 Đo thời gian mức 1: cho tín hiệu vào ngõ /INT0,khai báo Timer0 mode bit GATE=1,đếm CK - Timer0 chạy /INT0=1→số đếm Timer0=thời gian mức - Khi /INT0=1→0 tạo ngắt /INT0 để đọc giá trị ghi Timer0 Giáo Trình Vi Xử Lý Lưu Phú 33 7.7 Ngắt ngồi Đo thời gian mức 0: tín hiệu vào qua cổng NOT đưa vào ngõ /INT1,khai báo Timer1 Timer0 ngắt /INT1 →đo thời gian mức Timer1 ngắt /INT1 tương tự Muốn truyền BR=9600 xác,tối thiểu Fosc=11.059Mhz →1MC=1.085µs: - Tđo min=13µs→thời gian thực ISR /INTx