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

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

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

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

Ngày đăng: 23/05/2020, 11:54

Mục lục

  • Xử lý của CPU đối với 1 ngắt

  • Thanh ghi cho phép ngắt IE (Interrupt Enable Register)

  • Thanh ghi ưu tiên ngắt IP (Interrupt Priority Register)

  • 1. Lập trình ngắt timer

  • 2. Lập trình ngắt ngoài

  • Kích hoạt ngắt ngoài

  • Thanh ghi ưu tiên ngắt IP

  • Lập trình ưu tiên ngắt

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan