NGT INTERUPT NGT Cc loi ngt v bng
NGẮT (INTERUPT)
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 IE 0 Địa chỉ vector ngắt TF 0 IE 1 TF 1 RI hoặc TI TF 2 hoặc EXF 2 Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng 0000 H 0003 H 000 BH 0013 H 001 BH 0023 H 002 BH caonam@gmail. com
Thanh ghi cho phép ngắt IE (Interrupt Enable Register) IE D 7 D 6 D 5 EA D 4 ET 2 ES Cho phép ngắt do Timer 2 Không sử dụng D 2 ET 1 Cho phép ngắt toàn cục D 3 D 1 ET 0 EX 1 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 D 0 EX 0 Cho phép ngắt do Timer 0 Cho phép ngắt ngoài 1 Cho phép ngắt ngoài 0 caonam@gmail. com
Thanh ghi ưu tiên ngắt IP (Interrupt Priority Register) IP D 7 D 6 D 5 D 4 D 3 PT 2 Không sử dụng D 2 PT 1 Không sử dụng PS Ưu tiên ngắt cho Timer 2 D 1 PT 0 PX 1 Ư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 D 0 PX 0 Ưu tiên ngắt cho Timer 0 Ưu tiên ngắt ngoài 1 Ưu tiên ngắt ngoài 0 caonam@gmail. com
Giới thiệu timer XTAL oscillator TH ÷ 12 C/T = 0 TF bật lên 1 khi FFFF → 0 TR TH 0 D 15 D 14 D 13 D 12 D 11 Cờ tràn (Overflow Flag) TL 0 D 10 D 9 D 8 D 7 D 6 D 5 TH 1 D 15 TF TL D 4 D 3 D 2 D 1 D 0 TL 1 D 10 D 9 D 8 D 7 Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng D 6 D 5 D 4 D 3 caonam@gmail. com
Thanh ghi TMOD: Timer Mode Chọn chế độ hoạt động TMOD D 7 D 6 D 5 GATE M 1 C/T D 4 D 3 D 2 GATE M 0 Chọn chế độ hoạt động cho TIMER 1 Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng D 1 D 0 M 1 C/T M 0 Chọn chế độ hoạt động cho TIMER 0 caonam@gmail. com
1. Lập trình ngắt timer IE – Interrupt Enable Register EA - ET 2 ES ET 1 EX 1 ET 0 EX 0 • 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 ET 0 = 1; // Nếu sử dụng ngắt timer 0 ET 1 = 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. Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng caonam@gmail. com
Bit M 0, M 1 – của thanh ghi TMOD GATE C/T M 1 M 0 Chế độ 0 0 1 1 0 1 0 1 2 3 GATE C/T M 1 M 0 Mô tả Chế độ định thời 13 bit Chế độ định thời 16 bit Chế độ tự động nạp lại 8 -bit Chế độ định thời chia xẻ 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 P 1. 0 với chu kỳ 500 us sử dụng ngắt timer 0. (Thạch anh 12 Mhz). ORG 0000 H LJMP MAIN ASM ORG 001 BH LJMP T 0_ISR ORG 0030 H MAIN: MOV TMOD, #00000010 B; Chế độ 2 MOV TH 0, #55 MOV TL 0, #55 CLR TF 0; Xóa cờ tràn SETB ET 0 SETB EA SETB TR 0; Khởi động Timer 0 JMP $ T 0_ISR: CPL P 1. 0 RETI C void main() { TMOD = 0 x 02; // Timer 0 ở chế độ 2 TH 0 = 5; TL 0 = 5; // Nạp giá trị cho TH 0, TF 0 = 0; // Xóa cờ tràn ET 0 = 1; EA =1; TR 0 = 1; // Khởi động Timer 0 while(1); } void T 0_ISR() interrupt 1 { P 1_0 = !P 1_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 vuông ở chân P 1. 0 với tần số 500 Hz sử dụng ngắt timer 1. Thạch anh 12 Mhz. C ASM ORG 0000 H LJMP MAIN ORG 000 BH LJMP T 1_ISR ORG 0030 H MAIN: MOV TMOD, #00010000 B; Timer 1 chế độ 1 MOV TH 1, #HIGH(-1000) MOV TL 1, #LOW(-1000) CLR TF 1; Xóa cờ tràn SETB ET 1 SETB EA SETB TR 1; Khởi động Timer 0 JMP $ T 1_ISR: CLR TR 1; Dừng bộ định thời MOV TH 1, #HIGH(-1000); Nạp lại MOV TL 1, #LOW(-1000) CPL P 1. 0 SETB TR 1; Khởi động timer 0 RETI void main() { TMOD = 0 x 10; // Timer 1 ở chế độ 1 TH 1 = 0 x. FC; TL 1 = 0 x 17; // Nạp giá trị cho TF 1 = 0; // Xóa cờ tràn ET 1 = 1; EA = 1; TR 1 = 1; // Khởi động Timer 1 while(1); } void T 1_ISR() interrupt 3 { TR 1 = 0; // Dừng bộ định thời TH 1 = 0 x. FC; TL 1 = 0 x 17; // Nạp lại P 1_0 = !P 1_0; TR 1 = 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 caonam@gmail. com
2. Lập trình ngắt ngoài IE – Interrupt Enable Register EA - ET 2 ES ET 1 EX 1 ET 0 EX 0 + Lập trình cho ngắt ngoài 0 Cho phép ngắt ngoài 0 EX 0 = 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 EX 1 = 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 caonam@gmail. com
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 TF 1 TR 1 TF 0 TR 0 IE 1 IT 1 IE 0 IT 0 • Ngắt ngoài 0: • IT 0 = 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 (P 3. 2) • IT 0 = 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 (P 3. 2) • Ngắt ngoài 1: • IT 1 = 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 (P 3. 3) • IT 1 = 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 1 (P 3. 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 P 1. 0 khi xảy ra mức 0 ở chân ngắt ngoài 0 (P 3. 2). Sử dụng ngắt ngoài 0. ASM ORG 0000 H LJMP MAIN ORG 0003 H LJMP EX 0_ISR ORG 0030 H MAIN: SETB EX 0; Cho phép ngắt ngoài 0 SETB EA; Cho phép ngắt toàn cục JMP $ C void main() { EX 0 = 1; // Cho phép ngắt ngoài 0 EA = 1; // Cho phép ngắt toàn cục while(1); } void EX 0_ISR() interrupt 0 { P 1_0 = 0; } EX 0_ISR: CLR P 1. 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 khi xảy ra sườn xuống ở chân ngắt ngoài 1 (P 3. 3). Sử dụng ngắt ngoài 1. ASM ORG 0000 H LJMP MAIN ORG 0013 H LJMP EX 1_ISR ORG 0030 H MAIN: SETB EX 1; Cho phép ngắt ngoài 0 SETB EA; Cho phép ngắt toàn cục SETB IT 1; JMP $ EX 1_ISR: CLR P 1. 0 RETI C void main() { EX 1 = 1; // Cho phép ngắt ngoài 0 EA = 1; // Cho phép ngắt toàn cục IT 1 =1; while(1); } void EX 1_ISR() interrupt 2 { P 1_0 = 0; } 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) D 7 D 6 D 5 D 4 D 3 D 2 D 1 PT 2 Không sử dụng PT 1 Không sử dụng PS Ưu tiên ngắt cho Timer 2 PT 0 PX 1 Ư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 D 0 PX 0 Ưu tiên ngắt cho Timer 0 Ưu tiên ngắt ngoài 1 Ưu tiên ngắt ngoài 0 caonam@gmail. com
Lập trình ưu tiên ngắt IP – Interrupt Priority Register - - PT 2 PS PT 1 PX 1 PT 0 PX 0 • 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 AT 89 S 52 trở lên) Cao Nguyễn Khoa Nam - Khoa Điện - Trường Cao đẳng Công nghệ Đà Nẵng caonam@gmail. com
- Slides: 16