新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > MCS51單片機的外部中斷觸發方式

        MCS51單片機的外部中斷觸發方式

        作者: 時間:2016-11-26 來源:網絡 收藏
        51單片機外部中斷有兩種觸發方式可選:電平觸發和邊沿觸發。選擇電平觸發時,單片機在每個機器周期檢查中斷源口線,檢測到低電平,即置位中斷請求標志,向CPU請求中斷。選擇邊沿觸發方式時,單片機在上一個機器周期檢測到中斷源口線為高電平,下一個機器周期檢測到低電平,即置位中斷標志,請求中斷。


        這個原理很好理解。但應用時需要特別注意的幾點:

        本文引用地址:http://www.104case.com/article/201611/321932.htm


        1)電平觸發方式時,中斷標志寄存器不鎖存中斷請求信號。也就是說,單片機把每個機器周期的S5P2采樣到的外部中斷源口線的電平邏輯直接賦值到中斷標志寄存器。標志寄存器對于請求信號來說是透明的。這樣當中斷請求被阻塞而沒有得到及時響應時,將被丟失。換句話說,要使電平觸發的中斷被CPU響應并執行,必須保證外部中斷源口線的低電平維持到中斷被執行為止。因此當CPU正在執行同級中斷或更高級中斷期間,產生的外部中斷源(產生低電平)如果在該中斷執行完畢之前撤銷(變為高電平)了,那么將得不到響應,就如同沒發生一樣。同樣,當CPU在執行不可被中斷的指令(如RETI)時,產生的電平觸發中斷如果時間太短,也得不到執行。


        2)邊沿觸發方式時,中斷標志寄存器鎖存了中斷請求。中斷口線上一個從高到低的跳變將記錄在標志寄存器中,直到CPU響應并轉向該中斷服務程序時,由硬件自動清除。因此當CPU正在執行同級中斷(甚至是外部中斷本身)或高級中斷時,產生的外部中斷(負跳變)同樣將被記錄在中斷標志寄存器中。在該中斷退出后,將被響應執行。如果你不希望這樣,必須在中斷退出之前,手工清除外部中斷標志。


        3)中斷標志可以手工清除。一個中斷如果在沒有得到響應之前就已經被手工清除,則該中斷將被CPU忽略。就如同沒有發生一樣。


        4)選擇電平觸發還是邊沿觸發方式應從系統使用外部中斷的目的上去考慮,而不是如許多資料上說的根據中斷源信號的特性來取舍。

        傳統的MCS51單片機有兩個外部中斷,有低電平和下降沿兩種觸發方式。通過特殊功能寄存器TCON的狀態,可以配置中斷的觸發方式。

        當處于低電平觸發方式時,CPU在每個機械周期內進行電平采樣,當采樣到的電平為低時,將中斷標記IE1(IE0)置1,表示正在向CPU請求中斷。需要注意的是,IE1(IE0)的值必須通過軟件在中斷服務程序中清除,否則會再次進入中斷。如下:

        #include

        void main(void)

        {

        EA= 1;//總線開中斷

        EX0 = 1;//外部中斷0使能

        IT0 = 0;//低電平觸發方式

        while(1);

        }

        void INTR0(void) interrupt 0 unsing 0 //中斷服務程序

        {

        P1_1 =~P1_1;

        IE0 = 0;//軟件清除標志位

        }

        低電平觸發方式下,中斷標志寄存器不會鎖存中斷請求信號,也就是說,要確保低電平觸發的中斷被執行。需要保持低電平直至該中斷服務程序開始執行;而邊沿觸發方式下,中斷標志寄存器會所鎖存,同時中斷標志位也會在中斷服務程序執行完畢之后,由硬件清除。在使用電平觸發時,如不希望出現重復程序進入中斷的現象,應在中斷執行完畢后關閉中斷允許。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 内丘县| 桓台县| 汉川市| 柞水县| 峨边| 昌吉市| 常山县| 永宁县| 交口县| 萍乡市| 阿合奇县| 新泰市| 马龙县| 清水县| 赣榆县| 东平县| 嵊泗县| 丰县| 丽水市| 平湖市| 吴桥县| 襄汾县| 勐海县| 临桂县| 哈尔滨市| 开原市| 灵武市| 莲花县| 洮南市| 怀集县| 闻喜县| 贵港市| 绥中县| 德安县| 平乐县| 沙坪坝区| 台中县| 藁城市| 含山县| 磐安县| 宿松县|