Đăng ký Đăng nhập
Trang chủ Giáo dục - Đào tạo Cao đẳng - Đại học Công nghệ thông tin Tài liệu môn kỹ thuật vi điều khiển 5.ppt...

Tài liệu Tài liệu môn kỹ thuật vi điều khiển 5.ppt

.PPT
16
31
103

Mô tả:

5. NGẮT (INTERUPT) Mở đầu … • Giới thiệu ngắt • Ứng dụng của ngắt Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng [email protected] BẢNG VECTOR NGẮT • Các loại ngắt và bảng vector ngắt: • • • • • • • Reset hệ thống Ngắt ngoài 0 Timer 0 Ngắt ngoài 1 Timer 1 Cổng nối tiếp Timer 2 RST IE0 Địa chỉ vector ngắt TF0 IE1 TF1 RI hoặc TI TF2 hoặc EXF2 Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng 0000H 0003H 000BH 0013H 001BH 0023H 002BH [email protected] Xử lý của CPU đối với 1 ngắt Khi một ngắt xuất hiện và được CPU chấp nhận, chương trình chính bị ngắt. Các thao tác sau đây xảy ra: - Hoàn tất việc thực thi lệnh hiện hành - Cất bộ đếm chương trình (PC) vào stack - Trạng thái của ngắt hiện hành được lưu giữ lại - Bộ đếm chương trình PC sẽ nạp địa chỉ của chương trình con phục vụ ngắt và đi thực hiện. - Thực hiện xong sẽ quay về chương trình chính tại vị trí nó bị ngắt và thực hiện tiếp chương trình chính. Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng [email protected] Thanh ghi cho phép ngắt IE (Interrupt Enable Register) IE D7 D6 D5 EA D4 ET2 ES Cho phép ngắt do Timer 2 Không sử dụng D2 ET1 Cho phép ngắt toàn cục D3 D1 ET0 EX1 Cho phép ngắt do Timer 1 Cho phép ngắt do port nối tiếp Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng D0 EX0 Cho phép ngắt do Timer 0 Cho phép ngắt ngoài 1 Cho phép ngắt ngoài 0 [email protected] Thanh ghi ưu tiên ngắt IP (Interrupt Priority Register) IP D7 D6 D5 D4 D3 PT2 Không sử dụng D2 PT1 Không sử dụng PS Ưu tiên ngắt cho Timer 2 D1 PT0 PX1 Ưu tiên ngắt cho Timer 1 Ưu tiên ngắt do port nối tiếp Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng D0 PX0 Ưu tiên ngắt cho Timer 0 Ưu tiên ngắt ngoài 1 Ưu tiên ngắt ngoài 0 [email protected] LẬP TRÌNH NGẮT 1. Lập trình với ngắt timer • Timer 0 • Timer 1 2. Lập trình với ngắt ngoài • Ngắt ngoài 0 • Ngắt ngoài 1 • Ngắt ngoài theo sườn xuống và theo mức 0 3. Ưu tiên ngắt • Thứ tự ưu tiên thực hiện các ngắt • Lập trình theo đổi ưu tiên các ngắt Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng [email protected] 1. Lập trình ngắt timer IE – Interrupt Enable Register EA - ET2 ES ET1 EX1 ET0 EX0 • Bước 1: 1 Chọn chế độ hoạt động của timer như ở phần lập trình cho timer • Bước 2: 2 Cho phép ngắt: • Cho phép ngắt do timer ET0 = 1; // Nếu sử dụng ngắt timer 0 ET1 = 1; // Nếu sử dụng ngắt timer 1 • Cho phép ngắt toàn cục EA = 1; // Bắt buộc phải có khi sử dụng bất cứ ngắt nào. • Bước 3: 3 Viết chương trình phục vụ ngắt Timer. Chương trình phục vụ ngắt do timer được đặt ở các vector ngắt 000Bh (Timer 0) 001Bh (Timer 1). Các chương trình con phục vụ ngắt cũng giống như các chương trình con khác, tuy nhiên nó được kết thúc bằng lệnh RETI (Return from Interrupt) thay vì lệnh RET. Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng [email protected] Ví dụ 1: Viết chương trình nháy LED nối ở chân P1.0 với chu kỳ 500us sử dụng ngắt timer 0. (Thạch anh 12Mhz). ORG 0000H LJMP MAIN ASM ORG 001BH LJMP T0_ISR ORG 0030H MAIN: MOV TMOD, #00000010B; Chế độ 2 MOV TH0, #55 MOV TL0, #55 CLR TF0; Xóa cờ tràn SETB ET0 SETB EA SETB TR0; Khởi động Timer 0 JMP $ T0_ISR: CPL P1.0 RETI C void main() { TMOD = 0x02; // Timer 0 ở chế độ 2 TH0 = 5; TL0 = 5; // Nạp giá trị cho TH0, TF0 = 0; // Xóa cờ tràn ET0 = 1; EA =1; TR0 = 1; // Khởi động Timer 0 while(1) continue; } void T0_ISR() interrupt 1 { P1_0 = !P1_0; } Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng [email protected] Ví dụ 2: Viết chương trình tạo xung vuông ở chân P1.0 với tần số 500Hz sử dụng ngắt timer 1. Thạch anh 12Mhz. C ASM ORG 0000H LJMP MAIN ORG 000BH LJMP T1_ISR ORG 0030H MAIN: MOV TMOD, #00010000B;Timer 1 chế độ 1 MOV TH1, #HIGH(-1000) MOV TL1, #LOW(-1000) CLR TF1; Xóa cờ tràn SETB ET1 SETB EA SETB TR1; Khởi động Timer 0 JMP $ T1_ISR: CLR TR1; Dừng bộ định thời MOV TH1, #HIGH(-1000); Nạp lại MOV TL1, #LOW(-1000) CPL P1.0 SETB TR1; Khởi động timer 0 RETI void main() { TMOD = 0x10; // Timer 1 ở chế độ 1 TH1 = 0xFC; TL1 = 0x17; // Nạp giá trị cho TF1 = 0; // Xóa cờ tràn ET1 = 1; EA = 1; TR1 = 1; // Khởi động Timer 1 while(1) continue; } void T1_ISR() interrupt 3 { TR1 = 0; // Dừng bộ định thời TH1 = 0xFC; TL1 = 0x17; // Nạp lại P1_0 = !P1_0; TR1 = 1; // Khởi động bộ định thời } Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng [email protected] 2. Lập trình ngắt ngoài IE – Interrupt Enable Register EA - ET2 ES ET1 EX1 ET0 EX0 + Lập trình cho ngắt ngoài 0 Cho phép ngắt ngoài 0 EX0 = 1; Cho phép ngắt toàn cục EA = 1; Viết chương trình phục vụ ngắt ngoài 0 + Lập trình cho ngắt ngoài 1 Cho phép ngắt ngoài 0 EX1 = 1; Cho phép ngắt toàn cục EA = 1; Viết chương trình phục vụ ngắt ngoài 1 + Ngắt ngoài có 2 kiểu: Ngắt bằng mức 0 Ngắt bằng sườn xuống Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng [email protected] Kích hoạt ngắt ngoài Bằng sườn xuống hoặc bằng mức 0 ở chân ngắt ngoài TCON – Timer/Counter Control Register TF1 • • • • • • TR1 TF0 TR0 IE1 IT1 IE0 IT0 Ngắt ngoài 0: IT0 = 0: Ngắt ngoài 0 được kích hoạt khi phát hiện mức 0 ở chân ngắt ngoài 0 (P3.2) IT0 = 1: Ngắt ngoài 0 được kích hoạt khi phát hiện sườn xuống ở chân ngắt ngoài 0 (P3.2) Ngắt ngoài 1: IT1 = 0: Ngắt ngoài 1 được kích hoạt khi phát hiện mức 0 ở chân ngắt ngoài 0 (P3.3) IT1 = 1: Ngắt ngoài 1 được kích hoạt khi phát hiện sườn xuống ở chân ngắt ngoài 0 (P3.3) Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng [email protected] Ví dụ 1: Bật LED ở chân 1.0 khi xảy ra mức 0 ở chân ngắt ngoài 0 (P3.2). Sử dụng ngắt ngoài 0. ASM ORG 0000H LJMP MAIN ORG 0003H LJMP EX0_ISR ORG 0030H MAIN: SETB EX0; Cho phép ngắt ngoài 0 SETB EA; Cho phép ngắt toàn cục JMP $ C void main() { EX0 = 1; // Cho phép ngắt ngoài 0 EA = 1; // Cho phép ngắt toàn cục while(1) continue; } void EX0_ISR() interrupt 0 { P1_0 = 0; } EX0_ISR: CLR P1.0 RETI Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng [email protected] Ví dụ 2: Bật LED ở chân 1.0 khi xảy ra sườn xuống ở chân ngắt ngoài 1 (P3.3). Sử dụng ngắt ngoài 1. ASM ORG 0000H LJMP MAIN ORG 0013H LJMP EX1_ISR ORG 0030H MAIN: SETB EX1; Cho phép ngắt ngoài 0 SETB EA; Cho phép ngắt toàn cục JMP $ C void main() { EX1 = 1; // Cho phép ngắt ngoài 0 EA = 1; // Cho phép ngắt toàn cục while(1) continue; } void EX1_ISR() interrupt 2 { P1_0 = 0; } EX1_ISR: CLR P1.0 RETI Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng [email protected] Thanh ghi ưu tiên ngắt IP IP (Interrupt Priority Register) D7 D6 D5 D4 D3 D2 D1 PT2 Không sử dụng PT1 Không sử dụng PS Ưu tiên ngắt cho Timer 2 PT0 PX1 Ưu tiên ngắt cho Timer 1 Ưu tiên ngắt do port nối tiếp Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng D0 PX0 Ưu tiên ngắt cho Timer 0 Ưu tiên ngắt ngoài 1 Ưu tiên ngắt ngoài 0 [email protected] Lập trình ưu tiên ngắt IP – Interrupt Priority Register - - PT2 PS PT1 PX1 PT0 PX0 • Muốn cho ngắt nào ưu tiên thì set bit ưu tiên của ngắt đó lên. • Khi 2 ngắt xảy ra cùng lúc thì chuỗi ngắt bình thường sẽ bị thay đổi • Chuỗi ngắt là thứ tự thực hiện các ngắt bình thường khi không có ngắt nào được ưu tiên, thứ tự 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 bộ timer 2 (đối với AT89S52 trở lên) Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng [email protected]
- Xem thêm -

Tài liệu liên quan