中斷是單片機(jī)和其他各種微處理器中必不可少的一部分之一,在此對(duì)51單片機(jī)中斷有用的部分加以小結(jié)。
小結(jié)(1)主要是對(duì)中斷部分,對(duì)中斷編程常用的特殊功能寄存器加以羅列小結(jié),這一部分是中斷思想的核心,以后的編程全部圍繞這些寄存器進(jìn)行。以后對(duì)于中斷的編程及其寄存器設(shè)置可參考這一部分內(nèi)容。
一、關(guān)于51中斷:
對(duì)于51單片機(jī)中斷子程序的編寫(xiě)我們必須知道大多51單片機(jī)芯片有5個(gè)中斷源,有2個(gè)中斷優(yōu)先級(jí),每個(gè)中斷源的優(yōu)先級(jí)可以編程控制。
5個(gè)中斷源分別是:
外部中斷0,由INT0/P3.2輸入
外部中斷1,由INT1/P3.3輸入
定時(shí)器/計(jì)數(shù)器0,溢出中斷請(qǐng)求;
定時(shí)器/計(jì)數(shù)器1,溢出中斷請(qǐng)求;
串行口發(fā)送/接收,中斷請(qǐng)求;
這里給出一個(gè)非常經(jīng)典的中斷源圖,根據(jù)這個(gè)圖我們就能大概知道中斷的具體過(guò)程,以及在中斷編程中哪些地方需要設(shè)置。
很明顯的,5個(gè)中斷源可以分為三類,外
部中斷,定時(shí)器中斷和串口中斷;并且我們需要對(duì)TCON,IE,IP等進(jìn)行設(shè)置。
二、幾個(gè)重要的特殊功能寄存器:
1.中斷允許控制寄存器IE
CPU對(duì)中斷系統(tǒng)所有中斷以及某個(gè)中斷源的開(kāi)放和屏蔽是由中斷允許寄存器IE控制的。
EX0(IE.0),外部中斷0允許位;
ET0(IE.1),定時(shí)/計(jì)數(shù)器T0中斷允許位;
EX1(IE.2),外部中斷1允許位;
ET1(IE.3),定時(shí)/計(jì)數(shù)器T1中斷允許位;
ES(IE.4),串行口中斷允許位;
EA (IE.7), CPU中斷允許(總允許)位。
2.控制寄存器TCON
TCON的低4位用于控制外部中斷, TCON的高4位用于控制定時(shí)/計(jì)數(shù)器的啟動(dòng)和中斷申請(qǐng)。其格式如下:
TF1(TCON.7):T1溢出中斷請(qǐng)求標(biāo)志位。T1計(jì)數(shù)溢出時(shí)由硬件自動(dòng)置TF1為1。CPU響應(yīng)中斷后TF1由硬件自動(dòng)清0。T1工作時(shí),CPU可隨時(shí)查詢TF1的狀態(tài)。所以,TF1可用作查詢測(cè)試的標(biāo)志。TF1也可以用軟件置1或清0,同硬件置1或清0的效果一樣。
TR1(TCON.6):T1運(yùn)行控制位。TR1置1時(shí),T1開(kāi)始工作;TR1置0時(shí),T1停止工作。TR1由軟件置1或清0。所以,用軟件可控制定時(shí)/計(jì)數(shù)器的啟動(dòng)與停止。
TF0(TCON.5):T0溢出中斷請(qǐng)求標(biāo)志位,其功能與TF1類同。
TR0(TCON.4):T0運(yùn)行控制位,其功能與TR1類同。
IE1(TCON.3),外部中斷1中斷請(qǐng)求標(biāo)志位。
IT1(TCON.2),外部中斷1觸發(fā)方式控制位。
當(dāng)IT0=0時(shí),為電平觸發(fā)方式。
當(dāng)IT0=1時(shí),為邊沿觸發(fā)方式(下降沿有效)。
IE0(TCON.1),外部中斷0中斷請(qǐng)求標(biāo)志位。
IT0(TCON.0),外部中斷0觸發(fā)方式控制位。
當(dāng)IT0=0時(shí),為電平觸發(fā)方式。
當(dāng)IT0=1時(shí),為邊沿觸發(fā)方式(下降沿有效)。
3.串口控制寄存器SCON
RI(SCON.0),串行口接收中斷標(biāo)志位。當(dāng)允許串行口接收數(shù)據(jù)時(shí),每接收完一個(gè)串行幀,由硬件置位RI向CPU申請(qǐng)中斷。注意,RI必須由軟件清除。
TI(SCON.1),串行口發(fā)送中斷標(biāo)志位。當(dāng)CPU將一個(gè)發(fā)送數(shù)據(jù)寫(xiě)入串行口發(fā)送緩沖器時(shí),就啟動(dòng)了發(fā)送過(guò)程。每發(fā)送完一個(gè)串行幀,由硬件置位TI向CPU申請(qǐng)中斷。注意,TI必須由軟件清除。
4.中斷優(yōu)先級(jí)寄存器IP
51單片機(jī)有兩個(gè)中斷優(yōu)先級(jí),即可實(shí)現(xiàn)二級(jí)中斷服務(wù)嵌套。每個(gè)中斷源的中斷優(yōu)先級(jí)都是由中斷優(yōu)先級(jí)寄存器IP中的相應(yīng)位的狀態(tài)來(lái)規(guī)定的 。
PX0(IPH.0),外部中斷0優(yōu)先級(jí)設(shè)定位;
PT0(IPH.1),定時(shí)/計(jì)數(shù)器T0優(yōu)先級(jí)設(shè)定位;
PX1(IPH.2),外部中斷0優(yōu)先級(jí)設(shè)定位;
PT1(IPH.3),定時(shí)/計(jì)數(shù)器T1優(yōu)先級(jí)設(shè)定位;
PS (IPH.4),串行口優(yōu)先級(jí)設(shè)定位;
PT2 (IPH.5) ,定時(shí)/計(jì)數(shù)器T2優(yōu)先級(jí)設(shè)定位
三、其他相關(guān):
1.P3口復(fù)用功能;
51單片機(jī)P3口除了作為通用I/O口外,還具有復(fù)用的特殊功能,而這些功能通常都和各種中斷有關(guān)。
P3.0 RXD(串行數(shù)據(jù)輸入口)
P3.1 TXD(串行數(shù)據(jù)輸出口)
P3.2 INT0(外部中斷0)
P3.3 INT1(外部中斷1)
P3.4 T0(定時(shí)器/計(jì)數(shù)器0外部輸入)
P3.5 T1(定時(shí)器/計(jì)數(shù)器1外部輸入)
P3.6 WR(外部數(shù)據(jù)存儲(chǔ)器寫(xiě)脈沖)
P3.7 RD(外部數(shù)據(jù)存儲(chǔ)器讀脈沖)
2.中斷排隊(duì)和中斷服務(wù)入口表
同一優(yōu)先級(jí)中的中斷申請(qǐng)不止一個(gè)時(shí),則有中斷優(yōu)先權(quán)排隊(duì)問(wèn)題。同一優(yōu)先級(jí)的中斷優(yōu)先權(quán)排隊(duì),由中斷系統(tǒng)硬件確定的自然優(yōu)先級(jí)形成,其排列如所示:
3.中斷函數(shù)寫(xiě)法:
在C51中中斷函數(shù)的完整語(yǔ)法如下:
返回值 函數(shù)名({參數(shù)}) [模式] [重入] interrupt n [ using n ]
Interrupt 后面接一個(gè)0-31的整數(shù),不允許用表達(dá)式。
例:
void INT_TEST() interrupt 0 using 0 //外部中斷0/1 編號(hào)(0/2)
{
…………
}
中斷不允許用于外部函數(shù),小型程序中的中斷程序使用默認(rèn)的寄存器0,
不帶using屬性的可能會(huì)取得更高的效率。
其實(shí)今后對(duì)于中斷的應(yīng)用除了核心思想外,無(wú)非是對(duì)上述特殊功能寄存器的設(shè)置。