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