<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > MCS-51中斷系統(tǒng)中的復(fù)位問題

          MCS-51中斷系統(tǒng)中的復(fù)位問題

          作者: 時間:2011-10-12 來源:網(wǎng)絡(luò) 收藏

            系列單片機提供了多個中斷源(8051提供5個,8052提供了6個中斷源),每個中斷源可編程兩種級別的中斷,高級中斷請求和低級中斷請求,因此可實現(xiàn)兩級中斷服務(wù)嵌套。即使同一級別的中斷源,在同時請求中斷時,CPU響應(yīng)也有先后順序的區(qū)別。因此在實時系統(tǒng),儀器儀表中使用十分廣泛,的設(shè)計則是軟件設(shè)計中的一個關(guān)鍵點,處理不好往往使軟件達(dá)不到設(shè)計效果。

            下面是筆者在應(yīng)用過程中曾遇到過的一個問題。

            我們設(shè)計的一臺電力測量儀含有鍵盤和秒時鐘,鍵盤中斷采用INT0,秒時鐘用T0,INT0設(shè)置為高優(yōu)先級別中斷,T0為低級別,秒中斷服務(wù)占有約750ms。要求CPU對鍵盤具有很高的響應(yīng)速度,而且一旦接收有效的鍵盤命令,使程序重新從等待處進入的測量狀態(tài),不再回到被鍵盤打斷的地方。軟件流程如圖1所示。

            最初的鍵盤服務(wù)程序末尾如下:

            

          MCS-51中斷系統(tǒng)中的復(fù)位問題

          MCS-51中斷系統(tǒng)中的復(fù)位問題

            在調(diào)試過程中,常常響應(yīng)鍵盤中斷后,不能正常進入秒中斷,只在WAIT處等待循環(huán),此時EA=1,TR0=1,TF0=1,可見EA=1,TR0=1,TF0=1不是中斷T0響應(yīng)的充要條件。

            經(jīng)多方查詢有關(guān)資料發(fā)現(xiàn),系列單片機的有兩個不可尋址的優(yōu)先狀態(tài)觸發(fā)器,它們的置位狀態(tài),一個指示CPU正在執(zhí)行的高優(yōu)先級中斷服務(wù)程序,另一個指出正在執(zhí)行低優(yōu)先級中斷服務(wù),這兩個觸發(fā)器的置位狀態(tài)分別屏蔽所有中斷申請和同一優(yōu)先級的其它中斷請求。

            秒中斷服務(wù)需要750ms,當(dāng)按下鍵盤時有75%的機率正在執(zhí)行秒中斷服務(wù)程序,指示執(zhí)行低優(yōu)先級中斷服務(wù)的觸發(fā)器已置位。響應(yīng)鍵盤中斷后,指示執(zhí)行高優(yōu)先級中斷服務(wù)的觸發(fā)器置位,而整個過程中只執(zhí)行了一次RETI指令,指示CPU正在執(zhí)行T0中斷的觸發(fā)器沒有復(fù)位,即使TR0=1,TF=1,EA=1,CPU仍認(rèn)為程序已執(zhí)行秒中斷服務(wù),因而不能再次進入秒中斷服務(wù),為此,筆者將原程序改為

            

          MCS-51中斷系統(tǒng)中的復(fù)位問題

            匯編裝入系統(tǒng)后,一切正常。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();