資源描述:
《實(shí)驗(yàn)十二、中斷優(yōu)先級控制及中斷保護(hù)實(shí)驗(yàn)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、實(shí)驗(yàn)十二、中斷優(yōu)先級控制及中斷保護(hù)實(shí)驗(yàn)一、實(shí)驗(yàn)?zāi)康?、掌握單片機(jī)中斷機(jī)制2、熟悉中斷的應(yīng)用和編程二、實(shí)驗(yàn)設(shè)備1、仿真器2、單片機(jī)最小系統(tǒng)3、發(fā)光二極管陣列顯示模塊4、獨(dú)立式鍵盤模塊三、實(shí)驗(yàn)要求連接單片機(jī)最小系統(tǒng)和發(fā)光二極管陣列的電路并編寫程序,學(xué)習(xí)單片機(jī)中斷機(jī)制,及中斷優(yōu)先級和中斷保護(hù)的方法:使用獨(dú)立式按鍵A連接INT0(P3.2),按鍵B連接INT1(P3.3),在平時狀態(tài)下,發(fā)光二極管行以200ms的時間間隔,依次點(diǎn)亮。A鍵按下時INT0中斷處理程序點(diǎn)亮P0.0對應(yīng)的發(fā)光管2秒鐘,其他發(fā)光管熄滅;B鍵
2、按下時P0.1對應(yīng)發(fā)光管點(diǎn)亮2秒,其他發(fā)光管熄滅。四、實(shí)驗(yàn)原理通常一個微處理器讀取外圍設(shè)備(如鍵盤等)的輸入信息的方法有輪詢(Polling)及中斷(Interrupt)兩種。輪詢的方法是CPU依照某種既定法則,依序詢問每一外圍設(shè)備I/O是否需要服務(wù),此種方法CPU需花費(fèi)一些時間來做詢問服務(wù),當(dāng)I/O設(shè)備增加時,詢問服務(wù)時間也相對增加,因此勢必浪費(fèi)許多CPU時間,降低整體運(yùn)行的效率。使用中斷是一個較好的解決方法。使用中斷使系統(tǒng)對外部設(shè)備的請求響應(yīng)更加靈敏,并且不需要占用CPU的時間進(jìn)行輪詢。但是,當(dāng)使用中
3、斷,特別是有多個中斷嵌套時要特別注意內(nèi)存單元內(nèi)容的保護(hù)。4.180C51中斷結(jié)構(gòu)當(dāng)中斷發(fā)生后,程序?qū)⑻翆?yīng)中斷入口地址去執(zhí)行中斷子程序,或稱中斷服務(wù)例程(InterruptServiceRoutine),這些特殊的地址稱為中斷向量,例如當(dāng)80C51外部中斷INTl發(fā)生時,會暫停主程序的執(zhí)行,跳至地址0013H去執(zhí)行中斷服務(wù)例程,直到RETI指令后,才返回主程序繼續(xù)執(zhí)行。MCS-51系列的程序內(nèi)存中有7個矢量地址,敘述如下:(1)00H復(fù)位當(dāng)?shù)?腳RESET為高電平,CPU會跳至地址00H處開始執(zhí)行程序,
4、亦即程序一定要從地址00H開始寫起。(2)03H(外部中斷0)當(dāng)INT0引腳由高電位變至低電位時,CPU會接受外部中斷0,并跳至地址03H處去執(zhí)行中斷子程序。(3)0BH(計時/計數(shù)器0中斷)當(dāng)CPU接受計時/計數(shù)器0中斷置位而產(chǎn)生中斷要求時,會跳至地址0BH處去執(zhí)行中斷子程序。(4)13H(外部中斷1)當(dāng)INTl引腳由高電位變至低電位時,CPU會接受外部中斷1,并跳至地址13H處去執(zhí)行中斷子程序。(5)1BH(計時/計數(shù)器1中斷)當(dāng)CPU接受計時/計數(shù)器1中斷置位而產(chǎn)生中斷要求時,會跳至地址1BH刻去執(zhí)
5、行中斷子程序。(6)23H(串行中斷1)當(dāng)串行端口傳送數(shù)據(jù)或接收數(shù)據(jù)完畢時,CPU會接受串行中斷,并跳至地址23H處去執(zhí)行中斷子程序。(7)2BH(計時/計數(shù)器2中斷)當(dāng)CPU接受計時/計數(shù)器2產(chǎn)生中斷要求時,會跳至地址2BH處去執(zhí)行中斷子程序。此中斷僅8052系列才有。2.中斷使能位8051針對中斷提供兩層使能,第一層為EA全局使能控制,第二層為分別控制EX0,ET0、EXl、ETl、ES、ET2。當(dāng)8051在初始狀態(tài)時,寄存器的各個中斷使能位都預(yù)設(shè)為“0”,即所有中斷都禁止,故欲允許中斷時,應(yīng)先使能相
6、對應(yīng)的中斷。當(dāng)中斷產(chǎn)生后,此中斷狀態(tài)會記錄于定時器/計數(shù)器控制寄存器(Timer/CounterControlRigister,TCON)的中斷請求標(biāo)志(InterruptRequestflag)中,當(dāng)標(biāo)志被設(shè)立,表示中斷已發(fā)生。由圖20-1可知,當(dāng)外部中斷或定時器0、定時器1中斷發(fā)生時,CPU都可以判別是哪種中斷。因此當(dāng)這四個中斷發(fā)生時,中斷服務(wù)例程被執(zhí)行后,CPU會主動清除中斷請求標(biāo)志,對于其他的中斷,由于CPU無法判別,因此中斷請求標(biāo)志需由程序指令來清除。另外,在TCON中尚有兩個位稱為中斷型式控制
7、位(Wypecontrolbit),經(jīng)由這兩個位的設(shè)定,可以邊擇外部中斷為負(fù)邊緣觸發(fā)或低電平觸發(fā)。欲設(shè)定中斷使能與否,必須規(guī)劃位于特殊功能寄存器中的中斷使能寄存器IE(InterruptEnableRegister),其位于地址A8H,是一個可位尋址的寄存器。3.中斷保護(hù)由于各個中斷執(zhí)行的起始地址間僅有8個Bytes,因此欲在此空間內(nèi)完成中斷服務(wù)例程是有困難的。通常中斷服務(wù)例程是置于主程序后面,而在中斷向量地址只書寫跳躍指令,跳至相對應(yīng)中斷服務(wù)例程去執(zhí)行。當(dāng)執(zhí)行新的中斷服務(wù)例程時,注意不可以破壞舊有的數(shù)據(jù)
8、和狀態(tài),因此在編寫時還要保存各個寄存器的數(shù)據(jù)。通常會被更改的數(shù)據(jù)(如ACC、PSW等),可以利用堆棧在執(zhí)行中斷服務(wù)例程之前就將其PUSH起來,待執(zhí)行結(jié)束后再將相關(guān)寄存器POP即可。另外,因?yàn)?051可任意選擇四個寄存器庫中的一組寄存器,所以利用選擇不同寄存器庫的方式亦可達(dá)到數(shù)據(jù)保存的目的。4.中斷優(yōu)先級8051對于各種中斷優(yōu)先權(quán)采用雙層結(jié)構(gòu),首先對于優(yōu)先權(quán)可由中斷優(yōu)先權(quán)寄存器(InterruptPriorityIP)設(shè)定該中斷