interruptm修飾符
C51中斷函數(shù)必須通過該修飾符進(jìn)行修飾。在C51程序設(shè)計(jì)中,當(dāng)函數(shù)定義時(shí)用了interruptm修飾符,系統(tǒng)編譯時(shí)把對(duì)應(yīng)函數(shù)轉(zhuǎn)化為中斷函數(shù),自動(dòng)加上程序頭段和尾段,并按51系統(tǒng)中斷的處理方式自動(dòng)把它安排在程序存儲(chǔ)器中的相應(yīng)位置。
在該修飾符中,m的取值為0~31,對(duì)應(yīng)的中斷情況如下:
0——外部中斷0
1——定時(shí)/計(jì)數(shù)器T0
2——外部中斷1
3——定時(shí)/計(jì)數(shù)器T1
4——串行口中斷
5——定時(shí)/計(jì)數(shù)器T2
其它值預(yù)留。
C51編譯器從絕對(duì)地址8m+3處產(chǎn)生一個(gè)中斷向量,其中m為中斷號(hào),也即interrupt后面的數(shù)字。該向量包含一個(gè)到中斷函數(shù)入口地址的絕對(duì)跳轉(zhuǎn)。
【例】編寫一個(gè)用于統(tǒng)計(jì)外中斷0的中斷次數(shù)的中斷服務(wù)程序
1intx=0;2voidint0()interrupt0using13{4x++;5}
usingn修飾符
修飾符usingn用于指定本函數(shù)內(nèi)部使用的工作寄存器組,其中n的取值為0~3,表示寄存器組號(hào)。該修飾符可以省略,省略后系統(tǒng)自動(dòng)選擇
中斷函數(shù)注意如下:
(1)中斷函數(shù)不能進(jìn)行參數(shù)傳遞,如果中斷函數(shù)中包含任何參數(shù)聲明都將導(dǎo)致編譯出錯(cuò)。
(2)中斷函數(shù)沒有返回值,如果企圖定義一個(gè)返回值將得不到正確的結(jié)果,建議在定義中斷函數(shù)時(shí)將其定義為void類型,以明確說明沒有返回值。