王超
(昌吉學(xué)院物理系,新疆昌吉 831100)
中斷是單片機(jī)在實(shí)時(shí)處理和實(shí)時(shí)控制中不可缺少的一項(xiàng)技術(shù),應(yīng)用十分廣泛,如果沒(méi)有中斷,其大量的時(shí)間可能會(huì)浪費(fèi)在查詢是否有中斷請(qǐng)求的操作上,采用中斷技術(shù)可消除查詢方式中的等待現(xiàn)象,提高單片機(jī)的實(shí)時(shí)性和工作效率[1-3]。但是,由于中斷的發(fā)生具有隨機(jī)性,尤其是多個(gè)中斷源共存的情況下,更增加了分析及調(diào)試程序的難度,利用Proteus仿真軟件設(shè)計(jì)多中斷源電路,編寫程序?qū)崿F(xiàn)軟硬件協(xié)同調(diào)試,可定性、直觀、實(shí)時(shí)地展現(xiàn)多中斷源發(fā)生中斷的全過(guò)程,縮短了開發(fā)周期,提高了效率。
MCS-51 系列單片機(jī)有五個(gè)中斷請(qǐng)求源,兩個(gè)中斷優(yōu)先級(jí)別,可以實(shí)現(xiàn)兩級(jí)中斷服務(wù)嵌套,每個(gè)中斷源都可以用軟件獨(dú)立地控制為允許和關(guān)閉中斷,每個(gè)中斷源的優(yōu)先級(jí)別均可以使用軟件來(lái)設(shè)置[4-6]。
實(shí)際上,51 系列單片機(jī)中斷優(yōu)先級(jí)有兩種:查詢優(yōu)先級(jí)和執(zhí)行優(yōu)先級(jí),所謂查詢優(yōu)先級(jí)是從芯片的datasheet 或者教材中看到的默認(rèn)優(yōu)先級(jí)(IP 不設(shè)置,復(fù)位后其值為00H),其優(yōu)先級(jí)順序?yàn)椋捍锌?,?dāng)多個(gè)中斷源申請(qǐng)中斷時(shí),CPU 會(huì)按照查詢優(yōu)先級(jí)的順序依次查詢各個(gè)中斷標(biāo)志位的狀態(tài),不代表高優(yōu)先級(jí)的中斷可以打斷正在執(zhí)行的低優(yōu)先級(jí)的中斷服務(wù)。而執(zhí)行優(yōu)先級(jí)則需先進(jìn)行IP 設(shè)置,當(dāng)經(jīng)過(guò)設(shè)置的低優(yōu)先級(jí)中斷正在運(yùn)行時(shí),如果有高優(yōu)先級(jí)別的中斷申請(qǐng)則會(huì)執(zhí)行中斷嵌套,進(jìn)入高優(yōu)先級(jí)別的中斷服務(wù)處理,若是處于同一個(gè)級(jí)別,則要按照查詢優(yōu)先級(jí)的順序進(jìn)行處理。
單片機(jī)多中斷源電路由AT89C51 單片機(jī)、中斷源申請(qǐng)電路、中斷過(guò)程指示電路、串行口數(shù)據(jù)傳輸電路組成,電路設(shè)計(jì)圖如圖1 所示,中斷源與對(duì)應(yīng)按鍵對(duì)照表如表1 所示。
圖1 多中斷源電路設(shè)計(jì)圖
表1 中斷源與對(duì)應(yīng)按鍵對(duì)照表
中斷源申請(qǐng)電路由四個(gè)獨(dú)立的按鍵K0、K1、K2、K3 和總按鍵K 組成,用來(lái)控制和T0 這四個(gè)中斷源(T1 與T0 運(yùn)行過(guò)程類似,選擇一個(gè)即可)的分時(shí)申請(qǐng)和同時(shí)申請(qǐng)。
中斷指示電路由4 個(gè)發(fā)光二極管D1、D2、D3、D5組成,D1 的亮滅指示的發(fā)生,D2 的亮滅指示的發(fā)生,D3 的亮滅指示串行口中斷的發(fā)生,D5 的亮滅指示T0 中斷的發(fā)生,D4 為電路的運(yùn)行指示燈。
串行口輸出傳輸電路由串行輸入/并行輸出的同步移位寄存器74LS164 和數(shù)據(jù)指示燈L1-L8 組成[7-9],串行口工作在方式0 輸出模式,串行輸出數(shù)據(jù)由P3.0 輸出,移位脈沖由P3.1 輸出,MR 接高電平時(shí)移位脈沖才有效,在移位脈沖作用下,發(fā)送緩沖器SBUF 中的數(shù)據(jù)依次通過(guò)RXD 端送往74LS164,并通過(guò)L1-L8 顯示串口傳輸?shù)臄?shù)據(jù)。
在中斷指示電路圖中,分別在D1、D2、D3 和D5處添加探針,在仿真圖表中添加對(duì)應(yīng)的數(shù)字量曲線,以便記錄中斷發(fā)生過(guò)程。
要完成單片機(jī)多個(gè)中斷源同時(shí)和不同時(shí)申請(qǐng)的處理,需要實(shí)現(xiàn)多個(gè)中斷源的申請(qǐng)可控,多中斷源申請(qǐng)的控制有兩種實(shí)現(xiàn)方式,方式一是采用按鍵作為中斷請(qǐng)求的輸入開關(guān),用軟件檢測(cè)開關(guān)的閉合,實(shí)現(xiàn)不同開關(guān)作用下的中斷處理,如圖1 中的K、K0、K1、K2、K3 開關(guān),K 用來(lái)控制中斷源同時(shí)申請(qǐng),K0-K3 用來(lái)控制不同中斷源的申請(qǐng)?zhí)幚?。方式二使用Proteus中提供的虛擬信號(hào)源來(lái)實(shí)現(xiàn),單擊工具箱中的快捷圖標(biāo),選擇單周期數(shù)字脈沖發(fā)生器(DPULSE),放置在每個(gè)按鍵上,并在屬性對(duì)話框中進(jìn)行有關(guān)的設(shè)置,對(duì)話框內(nèi)數(shù)據(jù)類型選擇為單脈沖,只產(chǎn)生一個(gè)脈沖信號(hào),脈沖屬性選擇負(fù)的(高低高),脈沖時(shí)間需要設(shè)置開始時(shí)間、脈沖持續(xù)的寬度和停止時(shí)間[10-13],可精確設(shè)置不同中斷源的申請(qǐng)信號(hào),借助單周期數(shù)字脈沖發(fā)生器,可以實(shí)現(xiàn)仿真圖表的交互式動(dòng)態(tài)仿真,可變以往只有示波器、邏輯分析儀可以實(shí)現(xiàn)的功能。
四個(gè)中斷源對(duì)應(yīng)的輸入請(qǐng)求有四個(gè)按鍵K0-K3,若是中斷源同時(shí)申請(qǐng)中斷,可以把單周期數(shù)字脈沖發(fā)生器設(shè)置為一致即可,若是中斷源不同時(shí)申請(qǐng)中斷,四個(gè)按鍵的組合就有16 種情況,主程序流程圖如圖2 所示。
圖2 主程序流程圖
圖2 中,首先進(jìn)行初始化處理,即P0=0xff,P3=0xff,TMOD=0x01,EA=0,關(guān)中斷,然后使用while(1)完成循環(huán)掃描判斷,四個(gè)中斷源共16 種情況,使用switch(button)開關(guān)語(yǔ)句實(shí)現(xiàn)多分支處理,當(dāng)K0-K4全部閉合時(shí),button 為0X00,執(zhí)行switch 的第一個(gè)分支TCON=0xff;EA=1;break;即:和T0 定時(shí)器中斷請(qǐng)求標(biāo)志位置1,執(zhí)行串口發(fā)送程序ChuanKou(),使TI=1,最后使EA=1,開放所有中斷,即可實(shí)現(xiàn)四個(gè)中斷源同時(shí)產(chǎn)生中斷,其他情況類似。
全速運(yùn)行后,仿真結(jié)果如圖3 所示,四個(gè)中斷源在同一時(shí)刻觸發(fā)申請(qǐng)中斷,首先響應(yīng),響應(yīng)結(jié)束后依次是T0 響應(yīng)、響應(yīng)和串行口響應(yīng),中斷源的執(zhí)行順序是查詢優(yōu)先級(jí)順序,依據(jù)確定的順序依次進(jìn)行,不會(huì)形成高優(yōu)先級(jí)中斷低優(yōu)先級(jí)的嵌套形式,仿真圖表的運(yùn)行結(jié)果與CPU 寄存器窗口數(shù)據(jù)一致。
圖3 IP不設(shè)置多中斷源同時(shí)申請(qǐng)
設(shè)置四個(gè)中斷源的單周期數(shù)字脈沖發(fā)生器屬性,脈沖屬性均為高低高、脈沖寬度均為20 ms,四個(gè)中斷源脈沖觸發(fā)的開始時(shí)間分別為100 ms(串行口)、200 ms()、300 ms(T0)和400 ms()。
在T0 中斷服務(wù)程序中設(shè)置斷點(diǎn),SCON=000 00000B=00H,即TI=0,發(fā)送中斷申請(qǐng)標(biāo)志位為0,表示串口中斷完成,標(biāo)志位已經(jīng)清零,TCON=1100 1101B=0CDH,即TF0=0、IE0=0、IE1=1,定時(shí)器T0、的標(biāo)志位均為0,表示其中斷已經(jīng)結(jié)束,標(biāo)志位清零,的標(biāo)志位為1,說(shuō)明中斷還未執(zhí)行。
本文利用模塊化理論與方法,對(duì)發(fā)射場(chǎng)特種機(jī)械設(shè)備進(jìn)行模塊化分析和研究,綜合傳統(tǒng)模塊劃分方法的分類,結(jié)合特種設(shè)備的具體特點(diǎn),歸納了創(chuàng)新式和變型式模塊的方法步驟,為實(shí)現(xiàn)發(fā)射場(chǎng)特種機(jī)械設(shè)備通用化設(shè)計(jì)與系列化設(shè)計(jì)提供技術(shù)支持,并以火箭測(cè)試廠房平開大門為研究對(duì)象,進(jìn)行了實(shí)例分析.
全速運(yùn)行后,仿真結(jié)果如圖4 所示,四個(gè)中斷源申請(qǐng)不同時(shí)到達(dá),每個(gè)中斷源間隔100 ms,首先到達(dá)的是串行口中斷請(qǐng)求,則串行口首先響應(yīng),在串行口響應(yīng)期間,依次是請(qǐng)求到達(dá),即使執(zhí)行優(yōu)先級(jí)高于串行口,也不會(huì)出現(xiàn)嵌套,體現(xiàn)的是先到先處理,與優(yōu)先級(jí)高低沒(méi)有關(guān)系,先到的中斷請(qǐng)求處理完成后,再依次處理后續(xù)的中斷請(qǐng)求,仿真圖表的運(yùn)行結(jié)果與CPU 寄存器窗口數(shù)據(jù)一致。
圖4 IP不設(shè)置多中斷源不同時(shí)申請(qǐng)
設(shè)置IP=0x14,即PX1=1、PX0=0、PT0=0、PS=1,和串行口DTXD為高優(yōu)先級(jí),和T0 為 低優(yōu)先級(jí),設(shè)置單周期數(shù)字脈沖發(fā)生器脈沖屬性為高低高,脈寬為20 ms,開始時(shí)間均為100 ms。
全速運(yùn)行后,仿真結(jié)果如圖5 所示,四個(gè)中斷源分成兩個(gè)級(jí)別,和串行口DTXD 為高優(yōu)先級(jí),和T0 為低優(yōu)先級(jí),高優(yōu)先級(jí)別的兩個(gè)中斷源同時(shí)申請(qǐng)時(shí),按照查詢優(yōu)先級(jí)順序響應(yīng),即先響應(yīng),然后響應(yīng)DTXD;低優(yōu)先級(jí)的兩個(gè)中斷源同時(shí)申請(qǐng)時(shí),也會(huì)按照查詢優(yōu)先級(jí)的順序響應(yīng),即先響應(yīng),然后響應(yīng)T0,由于先執(zhí)行的是高優(yōu)先級(jí)別的中斷源申請(qǐng),所以,不會(huì)發(fā)生嵌套,同一級(jí)別中的兩個(gè)中斷源依次按照查詢優(yōu)先級(jí)順序進(jìn)行處理,仿真圖表的運(yùn)行結(jié)果與CPU 寄存器窗口數(shù)據(jù)一致。
圖5 IP設(shè)置多中斷源同時(shí)申請(qǐng)
圖6 IP設(shè)置多中斷源不同時(shí)申請(qǐng)
圖6 中,在100 ms 時(shí),T0 中斷申請(qǐng),此時(shí)只有一個(gè)中斷申請(qǐng),立刻執(zhí)行T0 中斷過(guò)程,在T0 執(zhí)行期間,申請(qǐng)中斷,由于的優(yōu)先級(jí)高于T0,所以發(fā)生了嵌套,在執(zhí)行期間,和DTXD 依次申請(qǐng),因51 系列單片機(jī)只有兩個(gè)優(yōu)先級(jí)別,只能執(zhí)行兩級(jí)中斷嵌套,當(dāng)響應(yīng)完后,立即響應(yīng)DTXD的請(qǐng)求,繼續(xù)暫停T0,執(zhí)行DTXD,當(dāng)DTXD 響應(yīng)完后,返回T0 繼續(xù)執(zhí)行,因T0 和屬于同一個(gè)級(jí)別,只有當(dāng)T0 響應(yīng)完后,才去響應(yīng)的申請(qǐng)。
圖7 監(jiān)視窗口
使用Proteus 軟件實(shí)現(xiàn)了單片機(jī)多中斷源共同作用下的執(zhí)行過(guò)程,借助Proteus 軟件提供的仿真圖表、CPU 寄存器窗口等虛擬分析器件,將抽象的中斷過(guò)程直觀化,有助于學(xué)生更好地理解多中斷源執(zhí)行過(guò)程,提高了分析問(wèn)題和解決問(wèn)題的能力。