新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MCS-51單片機的中斷系統(2)

        MCS-51單片機的中斷系統(2)

        作者: 時間:2016-11-23 來源:網絡 收藏

        中斷響應過程

        中斷響應過程為,中斷源發出中斷請求→對中斷請求進行響應→執行中斷服務程序→返回主程序。這個過程可分為三個階段來完成。
        1. 中斷采樣
        對于外部中斷請求,中斷請求信號來自于單片機外部,計算機要想知道有沒有中斷請求發生,必須對信號進行采樣。
        ① 電平觸發方式的外中斷請求(IT0/IT1=0)采樣到高電平時,表明沒有中斷請求,IE0或IE1繼續為“0”。采樣到低電平時,IE0/IE1由硬件自動置“1”,表明有外中斷請求發生。
        ② 脈沖觸發式的外中斷請求(IT0/IT1=1)在相鄰的機器周期采樣到的電平由高電平變為低電平時,則IE0/IE1由硬件自動置“1”,否則為“0”。
        2. 中斷查詢
        由CPU測試TCON和SCON中的各個中斷標志位的狀態,確定有那個中斷源發生請求,查詢時按優先級順序進行查詢,即先查詢高優先級再查詢低優先級。如果同級,按以下順序查詢:
        #INT0→T0→#INT1→T1→ S
        如果查詢到有標志位為“1”,表明有中斷請求發生,接著就從相鄰的下一機器周期開始進行中斷響應。
        3. 中斷響應
        當CPU查詢到中斷請求時,由硬件自動產生一條LCALL指令,LCALL指令執行時,首先將PC內容壓入堆棧進行斷點保護,再把中斷入口地址裝入PC,使程序轉向相應的中斷區入口地址。LCALL指令的形式如下:
        LCALL addr16 ;addr16:中斷入口地址
        入口地址已由系統設定,如下:
        中斷源入口地址
        0003H
        T0000BH
        0013H
        T1001BH
        S0023H
        從表中可以看出,每個中斷區只有8個單元,很難安排下一個中斷程序,一般是在中斷入口地址處加一條跳轉指令,跳轉到用戶的服務程序入口。編寫中斷服務程序的格式一般如下:
        ORG 0000H
        SJMP MAIN
        ORG 0003H
        AJMP 1NJERRVP
        MAIN: ···
        HERE: SJMP HERE
        1NJERRVP: ··· ;中斷響應程序
        RETI
        并不是所有的請求都被響應,當遇到下列情況之一時不響應這些中斷請求:
        (1)CPU正在處理一個同級或者高級的中斷服務
        (2)當前指令還沒有執行完畢
        (3)當前指令是RET、RETI或者是訪問IP、IE的指令,執行完這些指令后,還必須再執行一條指令,才響應中斷請求。
        注意:MCS-51單片機對中斷查詢結果不作記憶,當有新的查詢結果出現時,因為以上原因而被拖延的查詢結果將不復存在,其中斷請求也就不能再被響應了。

        中斷請求的撤銷

        中斷響應后,TCON和SCON的中斷請求標志位應及時撤銷。否則意味著中斷請求仍然存在,有可能造成中斷的重復查詢和響應,因此需要在中斷響應完成后,撤銷其中斷標志。
        1. 定時中斷請求的撤銷
        硬件自動把TF0(TF1)清0,不需要用戶參與。
        2. 串行中斷請求的撤銷
        需要軟件清零。
        3. 外部中斷請求的撤銷
        (1)脈沖觸發方式的外中斷請求撤銷
        中斷標志位的清零是自動的,脈沖信號過后就不存在了,因此其撤銷是自動的。
        (2)電平觸發方式的外中斷請求撤銷
        中斷標志位的清零是自動的,但是如果低電平持續存在,在以后的機器周期采樣時,又會把中斷請求標志位(IE 0/IE 1)置位。為此,需要外加電路,把中斷請求信號從低電平強制為高電平。

        電平觸發方式的外中斷請求撤銷
        通過直接置位端#Sd使中斷請求信號強制從低電平變為高電平,要實現此功能需要在中斷入口地址處加入如下兩條指令:
        ORL P1, #01H
        ANL P1,#0FEH


        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 文成县| 临武县| 怀来县| 嘉义县| 扶风县| 克什克腾旗| 正宁县| 洪洞县| 乡宁县| 漠河县| 吉林省| 武安市| 万全县| 金平| 桃园县| 清河县| 敦煌市| 赤水市| 湘潭县| 盖州市| 榆中县| 莱阳市| 佛教| 哈巴河县| 沂南县| 青铜峡市| 遂平县| 蒲城县| 平邑县| 六枝特区| 滨州市| 临夏县| 呼伦贝尔市| 广灵县| 平潭县| 郎溪县| 漳平市| 鸡东县| 临朐县| 肥东县| 阳信县|