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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機中斷的響應及撤銷

          51單片機中斷的響應及撤銷

          作者: 時間:2012-08-30 來源:網(wǎng)絡 收藏

          本文引用地址:http://www.ex-cimer.com/article/170967.htm

          就是CPU對源提出的中斷請求的接受。中斷請求被后,再經(jīng)過一系列的操作,而后轉向中斷服務程序,完成中斷所要求的處理任務。下面簡要說明80c51的中斷響應過程:

          1.外中斷采樣和內(nèi)中斷置位

          1.1外中斷采樣

          要想知道外中斷是否有請求發(fā)生,需要對外中斷進行采樣。

          當通過軟件將寄存器TCON的IT0(或IT1)位設置為0時,/INT0(或/INT1)為電平觸發(fā)方式,CPU在每個機器周期的S5P2(第五個狀態(tài)第2拍節(jié))期間對/INT0(或/INT1)采樣,一旦在P3.2(或P3.3)上檢測到低電平時,則認為有外部中斷申請,隨即由硬件使TCON的IE0(或IE1)位置1,向CPU申請中斷。在中斷響應完成后轉向中斷服務子程序,再由硬件自動對IE0(或IE1)位清0.

          當寄存器TCON的IT0(或IT1)位為1,/INT0(或/INT1)為脈沖觸發(fā)方式,則CPU在每個機器的S5P2期間對/INT0(或/INT1)采樣,當檢測到前一周期為高電平、后一周期為低電平時,由硬件使TCON的IE0(IE1)位置1,向CPU申請中斷,在中斷響應完成后轉向中斷服務子程序時,再由硬件自動對IE0(IE1)位清0.在邊沿觸發(fā)方式中,為保證CPU在兩個機器周期內(nèi)檢測到由高到低的負跳變,高電平與低電平的持續(xù)時間不得少于一個機器周期的時間。

          1.2內(nèi)中斷置位

          80c51把所有中斷標志都集中到TCON和SCON寄存器中。其中外中斷是使用采樣的方法把中斷請求鎖定在TCON寄存器的IE0(IE1)標志位上,而定時中斷和串行中斷的中斷請求由于都發(fā)生在芯片的內(nèi)部,定時中斷可以直接去置位TCON的TF0(TF1),串行中斷可以直接去置位SCON的RI和TI。內(nèi)中斷不存在采樣問題。

          2.中斷查詢

          所謂查詢,就是由CPU測試TCON和SCON中各標志位的狀態(tài),以確定有沒有中斷請求發(fā)生以及是哪一個中斷請求。是在每一個機器周期的最后狀態(tài)(S6),按優(yōu)先級順序對中斷請求標志進行查詢,即先查詢高級中斷后查詢低級中斷,同級中斷按“外部中斷0—定時中斷0—外部中斷1—定時中斷1—串行中斷”的順序查詢。如果查詢到有標志位為“1”,則表明有中斷請求發(fā)生,接著就從相鄰的下一個機器周期的S6狀態(tài)開始進行中斷響應。

          由于中斷請求是隨機發(fā)生的,CPU無法預先得知,因此在程序執(zhí)行過程中,中斷查詢要在指令執(zhí)行的每個機器周期中不停地重復進行。換句話說,就相當于你在看書的時候,每一秒鐘都會抬起頭來聽一聽,看一看,是不是有人按門鈴,是否有電話,燒的開水是否開了。。。。。。看來,比人蠢多了。

          3.中斷響應

          當查詢到有效的中斷請求時,緊接著就進行中斷響應。中斷響應時,根據(jù)寄存器TCON、SCON中的中斷標記,由硬件自動生成一條長調用指令LCALL XXXX,這里的XXXX就是程序存儲器中斷區(qū)中相應中斷的入口地址。對于80c51的5個獨立中斷源,這些入口地址已由系統(tǒng)設定。這樣在產(chǎn)生了相應的中斷以后,就可轉到相應的位置去執(zhí)行。

          例如,對于外部中斷0的響應,產(chǎn)生的長調用指令為

          LCALL 0003H

          生成LCALL指令后,緊接著就由CPU執(zhí)行,首先將當前程序計數(shù)器PC的內(nèi)容(準備執(zhí)行的指令的地址)壓入堆棧以保護斷點,再將中斷入口地址裝入PC,使程序轉向相應的中斷區(qū)入口地址。從中斷源所對應的向量地址中可以看出,一個中斷向量入口地址到下一個中斷向量入口地址之間只有8個單元。也就是說,中斷服務程序的長度如果超過了8B,就會占用下一個中斷的入口地址,導致出錯。但一般情況下,很少有一段中斷服務程序只占用少于8B的情況,為此可以在中斷入口處寫一條“LJMP XXXX”或“AJMP XXXX”指令,這樣可以把實際處理中斷的程序放到ROM的任何一個位置。

          例如,若采用外中斷0,在程序的開始處可以這樣寫:

          ORG 0000H

          LJMP MAIN

          ORG 0003H

          LJMP INT_0

          ;以下是主程序

          MAIN:

          ;以下是外中斷0服務程序

          INT_0:

          RETI

          END


          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();