關(guān)于單片機(jī)中斷多優(yōu)先級(jí)的軟件擴(kuò)展方法
發(fā)布時(shí)間:2009/2/4 0:00:00 訪問(wèn)次數(shù):720
。薄∫
所謂中斷是指當(dāng)cpu正在處理某件事情的時(shí)候,外部發(fā)生的某一事件(如一個(gè)電平的變化,一個(gè)脈沖沿的發(fā)生或定時(shí)器計(jì)數(shù)溢出等)請(qǐng)求cpu迅速去處理,于是cpu暫時(shí)中止當(dāng)前的工作,轉(zhuǎn)去處理所發(fā)生的事件。中斷服務(wù)處理完該事件以后,再回到原來(lái)被中止的地方繼續(xù)原來(lái)的工作,這樣的一個(gè)過(guò)程稱之為中斷。以8051為例,中斷系統(tǒng)含有5個(gè)中斷源,分別是外部中斷0請(qǐng)求(int0),外部中斷1請(qǐng)求(int1),定時(shí)/計(jì)數(shù)器0溢出中斷請(qǐng)求(t0),定時(shí)/計(jì)數(shù)器1溢出中斷請(qǐng)求(t1)以及串行口中斷請(qǐng)求(tx/rx)。既然系統(tǒng)含有5個(gè)中斷源,就有可能出現(xiàn)數(shù)個(gè)中斷源同時(shí)提出中斷請(qǐng)求的情況,這樣,設(shè)計(jì)人員必須事先根據(jù)它們的輕重緩急來(lái)為每個(gè)中斷源確定cpu對(duì)其的響應(yīng)順序。然而,對(duì)于中斷優(yōu)先級(jí)寄存器ip來(lái)說(shuō),只可能設(shè)定兩級(jí)優(yōu)先,即控制位為1時(shí)對(duì)應(yīng)的中斷源為高級(jí)中斷,反之,控制位為0時(shí)對(duì)應(yīng)的為低級(jí)中斷。這樣就出現(xiàn)一個(gè)問(wèn)題:如果一個(gè)中斷正在執(zhí)行,如何才能讓它響應(yīng)同級(jí)甚至是低級(jí)中斷請(qǐng)求呢?
。病≈袛喽鄡(yōu)先級(jí)的擴(kuò)展
根據(jù)8051的結(jié)構(gòu)特點(diǎn),其中斷系統(tǒng)中含有兩個(gè)不可尋址的“優(yōu)先級(jí)生效”觸發(fā)器。一個(gè)用于指出cpu是否正在執(zhí)行高優(yōu)先級(jí)的中斷服務(wù)程序,這個(gè)觸發(fā)器為1時(shí),系統(tǒng)將屏蔽所有的中斷請(qǐng)求;另一個(gè)則指出cpu是否正在執(zhí)行低優(yōu)先級(jí)中斷服務(wù)程序,該觸發(fā)器為1時(shí),將阻止除高優(yōu)先級(jí)以外的一切中斷請(qǐng)求。由此可見(jiàn),若要響應(yīng)同級(jí)甚至是低級(jí)中斷請(qǐng)求,必須使得該“優(yōu)先級(jí)生效”觸發(fā)器清零。但該觸發(fā)器又是不可尋址的,所以無(wú)法用軟件直接清零。遍歷系統(tǒng)所提供的111條指令,只有reti可以達(dá)到此目的。該指令可在cpu執(zhí)行該指令時(shí),一方面清除中斷響應(yīng)時(shí)所置位的“優(yōu)先級(jí)生效”觸發(fā)器,另一方面可從當(dāng)前棧頂彈出斷點(diǎn)地址送入程序計(jì)數(shù)pc,從而返回主程序。
。场≤浖䲠U(kuò)展方法
。常 高級(jí)中斷源響應(yīng)低級(jí)中斷源的軟件設(shè)計(jì)
現(xiàn)以當(dāng)前ie=84h(開(kāi)放外部中斷1及總控制位),ip=04h設(shè)定int1為高優(yōu)先級(jí) 正在執(zhí)行外部中斷1服務(wù)子程序?yàn)槔齺?lái)進(jìn)行說(shuō)明。如欲響應(yīng)串行口中斷,也就是要實(shí)現(xiàn)高級(jí)中斷源響應(yīng)低級(jí)中斷源,設(shè)計(jì)時(shí)可加入如下代碼而無(wú)須改變ip寄存器的內(nèi)容:
。穑酰螅 ie ;ie內(nèi)容入棧保護(hù)
。恚铮 ie , #10010000b ;開(kāi)放串行口中斷
call pp ;繼續(xù)執(zhí)行原中斷子程序,但可
隨時(shí)響應(yīng)串行口中斷請(qǐng)求
。
。穑铮 ie ;恢復(fù)原ie內(nèi)容
。颍澹簦
pp: reti
。常 同級(jí)中斷源之間的響應(yīng)
上述代碼體現(xiàn)了高級(jí)中斷源(int1)響應(yīng)低級(jí)中斷源(串行口)的軟件實(shí)現(xiàn)方法。但是, 8051系統(tǒng)共含有5個(gè)中斷源,因此必須解決同優(yōu)先級(jí)中斷之間的嵌套問(wèn)題,具體源程序如下:
org 0000h
。欤辏恚 main
。铮颍 0003h
ljmp x0 ;int0入口地址
。铮颍 000bh
ljmp t0 ;t0入口地址
org 0013h
。欤辏恚 x1 ;int1入口地址
。铮颍 001bh
ljmp t1 ;t1入口地址
org 0023h
。欤辏恚 ss ;串行口入口地址
。恚幔椋睿 mov ie ,#9fh ;開(kāi)放所有中斷
mov ip,#03h ;設(shè)定int0、t0為高優(yōu)先級(jí)
。螅辏恚 $
。埃 push dpl
。穑酰螅 dph
。恚铮 dptr,#x0rl
。穑酰螅 dpl
。穑酰螅 dph
。颍澹簦 ;(pc)=x0rl,清"高優(yōu)先級(jí)生效"
觸發(fā)器,此時(shí)可響應(yīng)其它中斷請(qǐng)求
。埃颍欤骸 ;int0子程序的真實(shí)入口地址
·
·
·
pop dph
。穑铮 dpl
reti
。簦埃 push dpl
。穑酰螅 dph
。恚铮 dptr,#t0rl
push dpl
。穑酰螅 dph
。颍澹簦 ;(pc)=t0rl,清"高優(yōu)先級(jí)生效"
觸發(fā)器,此時(shí)可響應(yīng)其它中斷請(qǐng)求
。簦埃颍欤 · ;t0子程序的真實(shí)入口地址
·
·
·
pop dph
。穑铮 dpl
。颍澹簦
。保 push dpl
push dph
。恚铮 dptr,#x1rl
。穑酰螅 dpl
。薄∫
所謂中斷是指當(dāng)cpu正在處理某件事情的時(shí)候,外部發(fā)生的某一事件(如一個(gè)電平的變化,一個(gè)脈沖沿的發(fā)生或定時(shí)器計(jì)數(shù)溢出等)請(qǐng)求cpu迅速去處理,于是cpu暫時(shí)中止當(dāng)前的工作,轉(zhuǎn)去處理所發(fā)生的事件。中斷服務(wù)處理完該事件以后,再回到原來(lái)被中止的地方繼續(xù)原來(lái)的工作,這樣的一個(gè)過(guò)程稱之為中斷。以8051為例,中斷系統(tǒng)含有5個(gè)中斷源,分別是外部中斷0請(qǐng)求(int0),外部中斷1請(qǐng)求(int1),定時(shí)/計(jì)數(shù)器0溢出中斷請(qǐng)求(t0),定時(shí)/計(jì)數(shù)器1溢出中斷請(qǐng)求(t1)以及串行口中斷請(qǐng)求(tx/rx)。既然系統(tǒng)含有5個(gè)中斷源,就有可能出現(xiàn)數(shù)個(gè)中斷源同時(shí)提出中斷請(qǐng)求的情況,這樣,設(shè)計(jì)人員必須事先根據(jù)它們的輕重緩急來(lái)為每個(gè)中斷源確定cpu對(duì)其的響應(yīng)順序。然而,對(duì)于中斷優(yōu)先級(jí)寄存器ip來(lái)說(shuō),只可能設(shè)定兩級(jí)優(yōu)先,即控制位為1時(shí)對(duì)應(yīng)的中斷源為高級(jí)中斷,反之,控制位為0時(shí)對(duì)應(yīng)的為低級(jí)中斷。這樣就出現(xiàn)一個(gè)問(wèn)題:如果一個(gè)中斷正在執(zhí)行,如何才能讓它響應(yīng)同級(jí)甚至是低級(jí)中斷請(qǐng)求呢?
。病≈袛喽鄡(yōu)先級(jí)的擴(kuò)展
根據(jù)8051的結(jié)構(gòu)特點(diǎn),其中斷系統(tǒng)中含有兩個(gè)不可尋址的“優(yōu)先級(jí)生效”觸發(fā)器。一個(gè)用于指出cpu是否正在執(zhí)行高優(yōu)先級(jí)的中斷服務(wù)程序,這個(gè)觸發(fā)器為1時(shí),系統(tǒng)將屏蔽所有的中斷請(qǐng)求;另一個(gè)則指出cpu是否正在執(zhí)行低優(yōu)先級(jí)中斷服務(wù)程序,該觸發(fā)器為1時(shí),將阻止除高優(yōu)先級(jí)以外的一切中斷請(qǐng)求。由此可見(jiàn),若要響應(yīng)同級(jí)甚至是低級(jí)中斷請(qǐng)求,必須使得該“優(yōu)先級(jí)生效”觸發(fā)器清零。但該觸發(fā)器又是不可尋址的,所以無(wú)法用軟件直接清零。遍歷系統(tǒng)所提供的111條指令,只有reti可以達(dá)到此目的。該指令可在cpu執(zhí)行該指令時(shí),一方面清除中斷響應(yīng)時(shí)所置位的“優(yōu)先級(jí)生效”觸發(fā)器,另一方面可從當(dāng)前棧頂彈出斷點(diǎn)地址送入程序計(jì)數(shù)pc,從而返回主程序。
。场≤浖䲠U(kuò)展方法
3.1 高級(jí)中斷源響應(yīng)低級(jí)中斷源的軟件設(shè)計(jì)
現(xiàn)以當(dāng)前ie=84h(開(kāi)放外部中斷1及總控制位),ip=04h設(shè)定int1為高優(yōu)先級(jí) 正在執(zhí)行外部中斷1服務(wù)子程序?yàn)槔齺?lái)進(jìn)行說(shuō)明。如欲響應(yīng)串行口中斷,也就是要實(shí)現(xiàn)高級(jí)中斷源響應(yīng)低級(jí)中斷源,設(shè)計(jì)時(shí)可加入如下代碼而無(wú)須改變ip寄存器的內(nèi)容:
。穑酰螅 ie ;ie內(nèi)容入棧保護(hù)
。恚铮 ie , #10010000b ;開(kāi)放串行口中斷
。悖幔欤 pp ;繼續(xù)執(zhí)行原中斷子程序,但可
隨時(shí)響應(yīng)串行口中斷請(qǐng)求
...
。穑铮 ie ;恢復(fù)原ie內(nèi)容
。颍澹簦
。穑穑 reti
。常 同級(jí)中斷源之間的響應(yīng)
上述代碼體現(xiàn)了高級(jí)中斷源(int1)響應(yīng)低級(jí)中斷源(串行口)的軟件實(shí)現(xiàn)方法。但是, 8051系統(tǒng)共含有5個(gè)中斷源,因此必須解決同優(yōu)先級(jí)中斷之間的嵌套問(wèn)題,具體源程序如下:
。铮颍 0000h
。欤辏恚 main
。铮颍 0003h
。欤辏恚 x0 ;int0入口地址
。铮颍 000bh
。欤辏恚 t0 ;t0入口地址
。铮颍 0013h
。欤辏恚 x1 ;int1入口地址
org 001bh
。欤辏恚 t1 ;t1入口地址
。铮颍 0023h
ljmp ss ;串行口入口地址
。恚幔椋睿 mov ie ,#9fh ;開(kāi)放所有中斷
。恚铮 ip,#03h ;設(shè)定int0、t0為高優(yōu)先級(jí)
。螅辏恚 $
。埃 push dpl
。穑酰螅 dph
。恚铮 dptr,#x0rl
。穑酰螅 dpl
。穑酰螅 dph
reti ;(pc)=x0rl,清"高優(yōu)先級(jí)生效"
觸發(fā)器,此時(shí)可響應(yīng)其它中斷請(qǐng)求
。埃颍欤骸 ;int0子程序的真實(shí)入口地址
·
·
·
pop dph
。穑铮 dpl
。颍澹簦
。簦埃 push dpl
。穑酰螅 dph
。恚铮 dptr,#t0rl
。穑酰螅 dpl
。穑酰螅 dph
。颍澹簦 ;(pc)=t0rl,清"高優(yōu)先級(jí)生效"
觸發(fā)器,此時(shí)可響應(yīng)其它中斷請(qǐng)求
。簦埃颍欤 · ;t0子程序的真實(shí)入口地址
·
·
·
。穑铮 dph
。穑铮 dpl
。颍澹簦
。保 push dpl
push dph
。恚铮 dptr,#x1rl
。穑酰螅 dpl
熱門點(diǎn)擊
- PICC編譯環(huán)境編寫(xiě)PIC單片機(jī)程序的探討
- National Semiconductor
- 3D憶阻器混合芯片面世 實(shí)現(xiàn)人工神經(jīng)網(wǎng)絡(luò)
- 單片機(jī)USB設(shè)備登錄編輯器
- 單片機(jī)端點(diǎn)描述符
- 關(guān)于單片機(jī)中斷多優(yōu)先級(jí)的軟件擴(kuò)展方法
- 單片機(jī)設(shè)備描述符
- 單片機(jī)USB描述符
- 單片機(jī)配置描述符
- 單片機(jī)接口描述符
推薦技術(shù)資料
- 硬盤(pán)式MP3播放器終級(jí)改
- 一次偶然的機(jī)會(huì)我結(jié)識(shí)了NE0 2511,那是一個(gè)遠(yuǎn)方的... [詳細(xì)]
- CV/CC InnoSwitch3-AQ 開(kāi)
- URF1DxxM-60WR3系
- 1-6W URA24xxN-x
- 閉環(huán)磁通門信號(hào)調(diào)節(jié)芯片NSDRV401
- SK-RiSC-SOM-H27X-V1.1應(yīng)
- RISC技術(shù)8位微控制器參數(shù)設(shè)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究