intel公司的mcs-51系列單片機因其強大的功能和低廉的價格,在我國各個領域得到廣泛的應用,特別是中斷系統(tǒng)更加強了它處理突發(fā)事件的能力和響應速度。 mcs-51系列單片機提供了多個中斷源(8051提供5個,8052提供了6個中斷源),每個中斷源可編程兩種級別的中斷,高級中斷請求和低級中斷請求,因此可實現(xiàn)兩級中斷服務嵌套。即使同一級別的中斷源,在同時請求中斷時,cpu響應也有先后順序的區(qū)別。因此mcs-51在實時系統(tǒng),儀器儀表中使用十分廣泛,中斷系統(tǒng)的設計則是軟件設計中的一個關鍵點,處理不好往往使軟件達不到設計效果。 下面是筆者在應用過程中曾遇到過的一個問題。
我們設計的一臺電力測量儀含有鍵盤和秒時鐘,鍵盤中斷采用int0,秒時鐘用t0,int0設置為高優(yōu)先級別中斷,t0為低級別,秒中斷服務占有約750ms。要求cpu對鍵盤具有很高的響應速度,而且一旦接收有效的鍵盤命令,使程序重新從等待處進入的測量狀態(tài),不再回到被鍵盤打斷的地方。軟件流程如圖1所示。 最初的鍵盤服務程序末尾如下:
在調(diào)試過程中,常常響應鍵盤中斷后,不能正常進入秒中斷,只在wait處等待循環(huán),此時ea=1,tr0=1,tf0=1,可見ea=1,tr0=1,tf0=1不是中斷t0響應的充要條件。 經(jīng)多方查詢有關資料發(fā)現(xiàn),mcs-51系列單片機的中斷系統(tǒng)有兩個不可尋址的優(yōu)先狀態(tài)觸發(fā)器,它們的置位狀態(tài),一個指示cpu正在執(zhí)行的高優(yōu)先級中斷服務程序,另一個指出正在執(zhí)行低優(yōu)先級中斷服務,這兩個觸發(fā)器的置位狀態(tài)分別屏蔽所有中斷申請和同一優(yōu)先級的其它中斷請求。 秒中斷服務需要750ms,當按下鍵盤時有75%的機率正在執(zhí)行秒中斷服務程序,指示執(zhí)行低優(yōu)先級中斷服務的觸發(fā)器已置位。響應鍵盤中斷后,指示執(zhí)行高優(yōu)先級中斷服務的觸發(fā)器置位,而整個過程中只執(zhí)行了一次reti指令,指示cpu正在執(zhí)行t0中斷的觸發(fā)器沒有復位,即使tr0=1,tf=1,ea=1,cpu仍認為程序已執(zhí)行秒中斷服務,因而不能再次進入秒中斷服務,為此,筆者將原程序改為 匯編裝入系統(tǒng)后,一切正常。筆者進一步驗證其它中斷也有類似現(xiàn)象。