一、中斷的概念:
(1)CPU 在處理某一事件A時,發(fā)生了另一事件B請求 CPU 迅速去處理(中斷發(fā)生);
(2)CPU 暫時中斷當前的工作,轉去處理事件B(中斷響應和中斷服務);
(3)待 CPU 將事件B處理完畢后,再回到原來事件A被中斷的地方繼續(xù)處理事件A(中斷返回),
這一過程稱為中斷。
中斷源:
引起 CPU 中斷的根源,稱為中斷源。
中斷返回:
中斷源向 CPU 提出的中斷請求。CPU 暫時中斷原來的事務 A,轉去處理事件 B。對事件 B 處理完畢后,再回到原來被中斷的地方(即斷點),稱為中斷返回。
中斷系統(tǒng):
實現(xiàn)上述中斷功能的部件(即中斷機構),稱為中斷系統(tǒng)。
中斷技術的優(yōu)點:
(1)分時操作:CPU 可以分時為多個 I / O 設備服務,提高了計算機的利用率;
(2)實時響應:CPU 能夠及時處理應用系統(tǒng)的隨機事件,系統(tǒng)的實時性大大增強;
(3)可靠性高:CPU 具有處理設備故障及掉電等突發(fā)性事件能力,從而使系統(tǒng)可靠性提高。
二、80C51中斷系統(tǒng)的結構:
80C51的中斷系統(tǒng)有 5 個中斷源(8052有 6個) ,2個優(yōu)先級,可實現(xiàn)二級中斷嵌套 。
1.(P3.2)可由IT0(TCON.0)選擇其為低電平有效還是下降沿有效。當 CPU 檢測到P3.2引腳上出現(xiàn)有效的中斷信號時,中斷標志IE0(TCON.1)置 1,向 CPU 申請中斷。
2.(P3.3)可由IT1(TCON.2)選擇其為低電平有效還是下降沿有效。當CPU檢測到P3.3引腳上出現(xiàn)有效的中斷信號時,中斷標志IE1(TCON.3)置 1 ,向 CPU 申請中斷。
3.TF0(TCON.5),片內定時 / 計數(shù)器T0溢出中斷請求標志。當定時 / 計數(shù)器T0發(fā)生溢出時,置位TF0,并向CPU 申請中斷。
4.TF1(TCON.7),片內定時/計數(shù)器T1溢出中斷請求標志。當定時/計數(shù)器T1發(fā)生溢出時,置位TF1,并向CPU 申請中斷。
5.RI(SCON.0)或TI(SCON.1),串行口中斷請求標志。當串行口接收完一幀串行數(shù)據(jù)時置位RI或當串行口發(fā)送完一幀串行數(shù)據(jù)時置位TI,向CPU申請中斷。
三、中斷請求標志:
1、TCON的中斷標志:
IT0(TCON.0),外部中斷0觸發(fā)方式控制位。
當IT0= 0 時,為電平觸發(fā)方式。
當IT0= 1 時,為邊沿觸發(fā)方式(下降沿有效)。
IE0(TCON.1),外部中斷 0 中斷請求標志位。
IT1(TCON.2),外部中斷 1 觸發(fā)方式控制位。
IE1(TCON.3),外部中斷 1 中斷請求標志位。
TF0(TCON.5),定時 / 計數(shù)器 T0 溢出中斷請求標志位。
TF1(TCON.7),定時 / 計數(shù)器 T1 溢出中斷請求標志位。
2、SCON的中斷標志:
RI(SCON.0),串行口接收中斷標志位。當允許串行口接收數(shù)據(jù)時,每接收完一個串行幀,由硬件置位RI。 注意,RI必須由軟件清除。
TI(SCON.1),串行口發(fā)送中斷標志位。當 CPU 將一個發(fā)送數(shù)據(jù)寫入串行口發(fā)送緩沖器時,就啟動了發(fā)送過 程。每發(fā)送完一個串行幀,由硬件置位TI。CPU 響應中斷時,不能自動清除TI,TI必須由軟件清除。
四、80C51 中斷控制
1、中斷允許控制
CPU 對中斷系統(tǒng)所有中斷以及某個中斷源的開放和屏蔽是由中斷允許寄存器IE控制的。
EX0(IE.0),外部中斷 0 允許位;
ET0(IE.1),定時/計數(shù)器T0中斷允許位;
EX1(IE.2),外部中斷 0 允許位;
ET1(IE.3),定時 / 計數(shù)器 T1 中斷允許位;
ES(IE.4),串行口中斷允許位;
EA(IE.7), CPU 中斷允許(總允許)位。
2、中斷優(yōu)先級控制
斷源的中斷優(yōu)先級都是由中斷優(yōu)先級 寄存器IP中的相應位的狀態(tài)來規(guī)定的 。
PX0(IP.0),外部中斷 0 優(yōu)先級設定位;
PT0(IP.1),定時 / 計數(shù)器 T0 優(yōu)先級設定位;
PX1(IP.2),外部中斷 0 優(yōu)先級設定位;
PT1(IP.3),定時 / 計數(shù)器 T1 優(yōu)先級設定位;
PS(IP.4),串行口優(yōu)先級設定位;
PT2(IP.5),定時 / 計數(shù)器 T2 優(yōu)先級設定位。
(1)同一優(yōu)先級中的中斷申請不止一個時,則有中斷優(yōu)先權排隊問題。同一優(yōu)先級的中斷優(yōu)先權排隊,由中斷系統(tǒng)硬件確定的自然優(yōu)先級形成,其排列如所示:
(2)80C51單片機中斷優(yōu)先級三條原則:
(1)CPU同時接收到幾個中斷時,首先響應優(yōu)先級別最高的中斷請求。
(2)正在進行的中斷過程不能被新的同級或低優(yōu)先級的中斷請求所中斷。
(3)正在進行的低優(yōu)先級中斷服務,能被高優(yōu)先級中斷請求所中斷。
為了實現(xiàn)上述后兩條原則,中斷系統(tǒng)內部設有兩個用戶不能尋址的優(yōu)先級狀態(tài)觸發(fā)器。其中一個置 1,表示正在響應高優(yōu)先級的中斷,它將阻斷后來所有的中斷請求;另一個置 1,表示正在響應低優(yōu)先級中斷,它將阻斷后來所有的低優(yōu)先級中斷請求。
五、中斷響應條件
(1)中斷源有中斷請求;
(2)此中斷源的中斷允許位為 1;
(3)CPU 開中斷(即EA= 1)。
六、中斷程序:
#include
#define uint unsigned int
#define uchar unsigned char
sbit dula = P2^6;//段選
sbit wela = P2^7;//位選
sbit d1 = P1^0;//P1 口 0 號 LED
uchar num;
uchar code table[]={ //LED 數(shù)字編碼
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);
void main()
{
EA = 1;//開總中斷
EX0 = 1;//開外部中斷0
//IT0 = 1;
TCON = 0x01;
wela = 1;//11101010 打開鎖存器
P0 = 0xea;//選擇數(shù)碼管
wela = 0;//鎖住數(shù)碼管
while(1)
{
for(num = 0; num < 16; num++)
{
d1 = 1; //關閉LED
dula = 1;//打開鎖存器
P0 = table[num];//數(shù)碼管入值
dula = 0;//鎖住數(shù)碼管輸入值
delay(1000);//延時1s
}
}
}
void Delay(unsigned int xx) //輸入 xx :ms
{
while(xx--)
{
Delay1ms();
}
}
void Delay1ms()//@11.0592MHz 1ms
{
unsigned char i, j;
_nop_();
_nop_();
_nop_();
i = 11;
j = 190;
do
{
while (--j);
} while (--i);
}
void exter0() interrupt 0 //中斷程序,0 為 中斷號
{
d1=0;//打開LED
}