剛開始寫匯編的中斷應(yīng)用程序時,曾經(jīng)為出入堆棧的問題而困擾。C51擴(kuò)展了函數(shù)的定義,使它可以直接編寫中斷服務(wù)函數(shù),而可以不必考慮出入堆棧的問題,從而提高了工作的效率。擴(kuò)展的關(guān)鍵字是in—terrupt,它是函數(shù)定義時的一個選項。只要在一個函數(shù)定義后面加上這個選項,那么這個函數(shù)就變成了中斷服務(wù)函數(shù)。定義中斷服務(wù)函數(shù)時可以用如下的形式。
函數(shù)類型函數(shù)名(形式參數(shù))interruptn[usingn]
中斷函數(shù)不能通過形式參數(shù)進(jìn)行參數(shù)傳遞,也沒有返回值。因此建議在定義中斷函數(shù)時將其定義為viod類型,以明確說明沒有返回值。
interru關(guān)鍵字是不可缺少的,它告訴編譯器該函數(shù)是中斷服務(wù)函數(shù),并由后面的n指明所使用的中斷號。n的取值范圍為0~31,但具體的中斷號要取決于芯片的型號,像AT89S52實際上就使用O~4號中斷。每個中斷號都對應(yīng)一個中斷向量,具體地址為8n+3,中斷源響應(yīng)后處理器會跳轉(zhuǎn)到中斷向量所處的地址執(zhí)行程序,編譯器會在這地址上產(chǎn)生一個無條件跳轉(zhuǎn)語句,轉(zhuǎn)到中斷服務(wù)函數(shù)所在的地址執(zhí)行程序。51芯片的中斷向量和中斷號,如下表所示。