你了解51單片機(jī)的外部中斷嗎?
MCS-51單片機(jī)有兩個(gè)外部中斷源INT0和INT1,它們分別在P3.2和P3.3引腳出現(xiàn)低電平或下降沿信號(hào)時(shí)向單片機(jī)發(fā)出中斷請(qǐng)求。外部中斷可用于檢測(cè)單片機(jī)外部發(fā)生的事件,如鍵盤敲擊和特定脈沖發(fā)生的次數(shù)等。
外部中斷的初始化設(shè)置
外部中斷INT0和INT1的初始化設(shè)置包括:中斷觸發(fā)方式設(shè)置、中斷優(yōu)先級(jí)設(shè)置和中斷允許設(shè)置。與這些設(shè)置有關(guān)的寄存器有TCON、IP和IE。
INT0和INT1有兩種觸發(fā)方式,包括:低電平觸發(fā)和下降沿觸發(fā),可通過(guò)TCON(見(jiàn)表4-7)進(jìn)行設(shè)置。
TCON寄存器的低4位與外部中斷有關(guān),其作用分別如下:
1)IT0:外部中斷0(INT0)的中斷觸發(fā)方式控制位,若IT0=0,則INT0為低電平觸發(fā),若IT0=1,則INT0為下降沿觸發(fā)。
2)IT1:外部中斷1(INT1)的中斷觸發(fā)方式控制位,若IT1=0,則INT1為低電平觸發(fā),若IT1=1,則INT1為下降沿觸發(fā)。
3)IE0:外部中斷0(INT0)的中斷請(qǐng)求標(biāo)志位,若IE0=0,則INT0無(wú)中斷請(qǐng)求,若IE0=1,則INT0發(fā)出了中斷請(qǐng)求。
4)IE1:外部中斷1(INT1)的中斷請(qǐng)求標(biāo)志位,若IE1=0,則INT1無(wú)中斷請(qǐng)求,若IE1=1,則INT1發(fā)出了中斷請(qǐng)求。
中斷程序設(shè)計(jì)方法
含有中斷處理功能的程序應(yīng)該包含以下基本要素:1)主程序入口,放置一條跳轉(zhuǎn)至主程序的跳轉(zhuǎn)指令。2)中斷服務(wù)處理程序入口,放置一條跳轉(zhuǎn)指令,用于跳轉(zhuǎn)至中斷服務(wù)處理程序。3)主程序是程序主體,其中需包含中斷初始化的功能。
4)中斷服務(wù)處理程序,是完成中斷處理任務(wù)的子程序。
編寫中斷服務(wù)處理程序時(shí)需要注意下幾點(diǎn):
1)在剛進(jìn)入中斷服務(wù)處理程序時(shí)和將要退出中斷服務(wù)處理程序之前,需分別進(jìn)行程序現(xiàn)場(chǎng)的保護(hù)和恢復(fù)。程序現(xiàn)場(chǎng)是指主程序和中斷服務(wù)處理程序共用的一些資源,如特殊寄存器或數(shù)據(jù)存儲(chǔ)器(RAM)中的存儲(chǔ)單元等。現(xiàn)場(chǎng)保護(hù)和恢復(fù)的常規(guī)方法分別是用PUSH指令將需要保護(hù)的現(xiàn)場(chǎng)數(shù)據(jù)壓入堆棧和用POP指令將已保護(hù)的現(xiàn)場(chǎng)數(shù)據(jù)從堆棧中取出,并且PUSH和POP指令應(yīng)當(dāng)成對(duì)出現(xiàn),并且按照“先入后出”原則進(jìn)行操作。
2)中斷服務(wù)處理程序必須通過(guò)RETI指令返回,并且不能被RET指令代替。
3)進(jìn)入中斷服務(wù)程序后,應(yīng)及時(shí)將中斷請(qǐng)求標(biāo)志位清0。進(jìn)入中斷服務(wù)處理程序后,外部中斷和定時(shí)/計(jì)數(shù)器中斷的中斷請(qǐng)求標(biāo)志位會(huì)被單片機(jī)硬件自動(dòng)清0,而串口中斷請(qǐng)求標(biāo)志位不會(huì)被硬件清0。因此,在串口中斷服務(wù)處理程序中,必須通過(guò)指令將串口中斷請(qǐng)求標(biāo)準(zhǔn)位清0,即“CLR TI”或“CLR RI”。
外部中斷請(qǐng)求的撤除
對(duì)于單片機(jī)而言,中斷請(qǐng)求標(biāo)志位為1就代表有中斷請(qǐng)求。并且只要中斷請(qǐng)求標(biāo)志位為1且中斷未被屏蔽,單片機(jī)就會(huì)執(zhí)行中斷服務(wù)處理程序。所以,一旦進(jìn)入了中斷服務(wù)處理程序就必須立即將對(duì)應(yīng)的中斷請(qǐng)求標(biāo)志位清0,否則會(huì)重復(fù)執(zhí)行中斷服務(wù)處理程序。
對(duì)于外部中斷,進(jìn)入外部中斷服務(wù)處理程序后,單片機(jī)硬件會(huì)自動(dòng)將IE0或IE1清0。但是,如果外部中斷采用低電平觸發(fā),則必須在外部硬件電路(見(jiàn)圖4-5)和程序軟件配合下才能保證可靠地撤除中斷請(qǐng)求。這是因?yàn)?,低電平往往?huì)持續(xù)一段時(shí)間,不會(huì)立即消失,而低電平存在的時(shí)間內(nèi)將會(huì)再次發(fā)出中斷請(qǐng)求。
圖4-5外部中斷低電平觸發(fā)方式中斷撤除電路
在圖4-5中,若將外部中斷0設(shè)為低電平觸發(fā),則IN引腳出現(xiàn)的低電平代表中斷請(qǐng)求信號(hào)到來(lái),而之前該引腳是高電平。因此,當(dāng)中斷請(qǐng)求發(fā)生時(shí),IN引腳出現(xiàn)電平的下降沿,CP引腳出現(xiàn)上升沿。由D觸發(fā)器的功能可知,CP的上升沿將使D引腳的低電平鎖存在引腳Q上。而Q引腳上的低電平能夠使外部中斷1(已設(shè)置為低電平觸發(fā))產(chǎn)生中斷請(qǐng)求,并進(jìn)入中斷服務(wù)處理程序。進(jìn)入中斷服務(wù)處理程序后,單片機(jī)硬件自動(dòng)將中斷請(qǐng)求標(biāo)志IE0清0。但是因?yàn)镼引腳的低電平未消失,因此會(huì)繼續(xù)產(chǎn)生新的外部中斷請(qǐng)求。而D觸發(fā)器Sd引腳上的低電平可將Q引腳置成高電平,從而撤除低電平的中斷請(qǐng)求。因此,可以在進(jìn)入中斷服務(wù)處理程序后,立刻將P1.0清0,向Sd引腳輸出低電平信號(hào)。但是若Sd引腳一直為低電平,Q引腳將無(wú)法出現(xiàn)新的中斷請(qǐng)求信號(hào),所以,Sd被清0后,應(yīng)該再盡快被置1,為接收新的中斷請(qǐng)求信號(hào)做準(zhǔn)備。根據(jù)上述分析,可在中斷服務(wù)處理程序中添加以下兩條指令,以配合圖4-5所示電路撤除低電平中斷請(qǐng)求信號(hào)。
外部中斷源的擴(kuò)展
對(duì)于某些單片機(jī)應(yīng)用系統(tǒng),MCS-51單片機(jī)僅有兩個(gè)外部中斷輸入引腳,當(dāng)外部中斷數(shù)目較多時(shí),需要擴(kuò)展。“線或法”是一種比較典型的外部中斷源擴(kuò)展方法,其電路如圖4-6所示。在圖4-6中,當(dāng)IN1~IN5均為低電平時(shí),INT0為高電平,而當(dāng)IN1~IN5中任何一個(gè)引腳為高電平時(shí),INT0將變?yōu)榈碗娖健?
圖4-6“線或法”擴(kuò)展外部中斷源的硬件電路