Interrupts in 8051
BÀI HỌC RỒI NHỮNG ĐIỂM CHÚ Ý SAU:
1. Lập trình ngắt timer trong 8051.
2.Lập trình ngắt phần cứng bên ngoài.
Các loại ngắt trong Vi điều khiển 8051.
- Timer 0 overflow interrupt - TF0
- External hardware interrupt - INT0
- Timer 1 overflow interrupt - TF1
- External hardware interrupt - INT1
- Serial communication interrupt - RI/TI
Tạm dịch là :
-Ngắt tràn bộ định thời 0 - TF0
-Ngắt phần cứng bên ngoài - INT0
-Ngắt tràn bộ định thời 1 - TF1
-Ngắt phần cứng bên ngoài - INT1
-Ngắt giao tiếp nối tiếp - RI / TI
Khi xảy ra ngắt thì bộ vi điều khiển sẽ thực hiện quy trình phục vụ ngắt. Do đó, vị trí bộ nhớ tương ứng với ngắt cho phép nó. Xem xét ngắt tương ứng với vị trí bộ nhớ được hiển thị trong bảng vectơ ngắt dưới đây.
Cấu trúc ngắt của Vi điều khiển 8051
Sau khi 'ĐẶT LẠI - RESET ', tất cả các ngắt sẽ bị vô hiệu hóa, và do đó, tất cả các ngắt được kích hoạt bởi phần mềm. Từ tất cả năm ngắt, nếu bất kỳ ai hoặc tất cả ngắt được kích hoạt, điều này sẽ đặt các cờ ngắt tương ứng như biểu diễn trong hình tương ứng với cấu trúc ngắt của vi điều khiển 8051
Tất cả các ngắt có thể được thiết lập hoặc xóa bởi một số thanh ghi chức năng đặc biệt còn được gọi là kích hoạt ngắt (IE), và nó hoàn toàn phụ thuộc vào mức độ ưu tiên, được thực hiện bằng cách sử dụng thanh ghi ưu tiên ngắt.
Interrupt Enable (IE) Register
Thanh ghi IE được sử dụng để bật và tắt ngắt. Đây là một thanh ghi có địa chỉ bit, trong đó giá trị EA phải được đặt thành một để cho phép ngắt. Các bit riêng lẻ trong thanh ghi này cho phép ngắt cụ thể như bộ định thời, đầu vào nối tiếp và bên ngoài. Xem xét trong thanh ghi IE bên dưới, bit tương ứng với 1 kích hoạt ngắt và 0 vô hiệu ngắt.
Interrupt Priority Register (IP) (Đăng ký ưu tiên ngắt (IP)- Ngắt ưu Tiên).
- #include< reg51 .h>
- sbit Blink Led = P2^0; // LED SỐ 2
- void timer0_ISR (void) interrupt 1 //interrupt no. 1 for Timer0
- {
- Blink Led=~Blink Led; // Blink LED on interrupt
- TH0=0xFC; // loading initial values to timer
- TL0=0x66;
- }
- void main()
- {
- TMOD=0x0l; // mode 1 of Timer0
- TH0 = 0xFC: // initial value is loaded to timer
- TL0 = 0x66:
- ET0 =1; // enable timer 0 interrupt
- TR0 = 1; // start timer
- while (1); // do nothing
- }
- void main()
- {
- IT0 = 1; // Configure interrupt 0 for falling edge on INT0
- EXO = 1; // Enabling the EX0 interrupt
- EA =1; // Enabling the global interrupt flag
- }
- void ISR_ex0(void) interrupt 0
- {
- <body of interrupt>
- }
- void main()
- {
- TMOD = 0x20:
- TH1= 0xFD; // baud rate for 9600 bps
- SCON = 0x50;
- TR1=1;
- EA=l;
- whlle(l);
- }
- void ISR_Serial(void) interrupt 4
- {
- if(TI==l)
- {
- SBUF= ?E?;
- TI=0;
- }
- else
- RI =0;
- }