新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機的中斷,有些亂

        51單片機的中斷,有些亂

        作者: 時間:2016-11-24 來源:網絡 收藏
        幾個與中斷有關的寄存器:
        1. TCON:中斷標志寄存器,內容為
        TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
        2. SCON:串行口控制寄存器,內容為
        SM0 SM1 SM2 REN TB8 RB8 TI RI
        TI:發送數據前應復位,發完一幀數據時,由硬件置位。
        RI:接收中斷標志,與TI類似
        中斷響應后,RI和TI不能自動清除,須由軟件來清除。
        IT0,1:外部中斷的觸發方式,=1時為下降沿有效
        IE0,1:外部中斷中斷請求標志位
        TF0,1:定時器溢出中斷請求
        3. IP:中斷優先級控制寄存器
        自然優先級的排列順序(由高到低):外部中斷0(INT0)、定時器T0、外部中斷1(INT1)、定時器T1、串口中斷。
        寄存器內容(D7、D6未用):PT2 PS PT1 PX1 PT0 PX0
        PT2:定時器T2(52系列單片機才有T2)的優先級控制位,=1時,設定T2為高優先級,=0時為低優先級;
        PS:串口的優先級控制位;
        PT1:定時器T1的優先級控制位;
        PX1:外部中斷1的優先級控制位;
        PT0:定時器T0的;
        PX0:外部中斷0的。
        如果同時有幾個設定為高優先級的,則按照自解優先級的順序排隊。
        4. IE:中斷允許控制寄存器
        其內容:EA 空 ET2 ES ET1 EX1 ET0 EX0
        EA: CPU中斷的總允許位,=1時開放中斷,=0時屏蔽所有中斷,即俗稱的關中斷;
        ES: 串口中斷允許位,=1時允許;
        ET1:T1的
        EX1:外部中斷1的
        ET0:T0的
        EX0:外部中斷0的
        采用中斷處理的程序結構:
        main()
        ....
        設置 中斷允許控制寄器IE
        設置 中斷優先級寄存器IP
        如果是外部中斷源,還要設置中斷請求的觸發方式IT0或IT1(在TCON中),以決定采用電平觸發還是跳變觸發
        ....
        中斷服務程序(對照前面的定時器處理程序就明白了。。。)
        函數類型 函數名(參數表) [interrupt 中斷號] [using N]
        {
        ....
        }
        中斷號可以取值0-31(C51編譯器允許32個中斷,0-4為51的標準中斷源,0外部中斷0,1是定時器0,2是外部中斷1,3是
        定時器1,4是串口中斷)using后的N表示第N組寄存器(8051有4組寄存器)。以下是有關寄存器組的問題:
        1. 使用using指定與主函數不同的寄存器組(主函數一般使用寄存器組0);
        2. 中斷優先級相同的中斷處理函數(ISR)可用using指定相同的寄存器組(因為它們不會同時被調用),但優先級不
        同的ISR必須使用不同的寄存器組,在ISR中被調用的函數也要使用using指定與中斷函數相同的寄存器組;
        3. 如果不用using,C51默認選擇寄存器組0,這意味著程序將切換寄存器組,而要使用大量的PUSH和POP操作,指定寄
        存器組的結果是節省了以上保護現場的操作,可以節省RAM空間及減少MCU的消耗;但這樣容易引起錯誤,一定要注意
        ,特別是在程序中進行直接內存訪問時。
        4. 可以這樣設定:主程序使用bank 0,低中斷優先級的所有中斷使用bank 1,高中斷優先級的所有中斷使用bank 2。


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 布尔津县| 蕉岭县| 上栗县| 双桥区| 茂名市| 英吉沙县| 清丰县| 巴马| 利辛县| 辰溪县| 堆龙德庆县| 济宁市| 玛曲县| 永宁县| 西贡区| 阿克陶县| 长治县| 新营市| 图木舒克市| 普陀区| 交口县| 贡觉县| 无锡市| 天津市| 拉萨市| 鄱阳县| 山阴县| 宝丰县| 巴彦淖尔市| 阿拉尔市| 阿鲁科尔沁旗| 澎湖县| 图们市| 普兰县| 沙河市| 彭泽县| 南阳市| 宁明县| 巴青县| 咸阳市| 元谋县|