新聞中心

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

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

        作者: 時間:2014-01-17 來源:網絡 收藏

        中斷服務程序完成后,一定要執行一條RETI指令,執行這條指令后,CPU將會把堆棧中保存著的地址取出,送回PC,那么程序就會從主程序的中斷處繼續往下執行了。

        說明 CPU所做的保護工作是很有限的,只保護了一個地址(主程序中斷處的地址),而其他的所有東西都不保護,所以如果你在主程序中用到了如A、DPTR、PSW等,在中斷程序中要用它們,還要保證回到主程序后這里面的數據還是沒執行中斷以前的數據,就得自己保護起來。

        CPU會在機器周期的S5P2階段讀入中斷標志,并在下一個機器周期中檢查,如果中斷條件成立時,系統會自行產生一個LCALL到相對應的中斷服務例程中,可是如果有下面3種情況時,系統是不會對中斷要求信號有反應的:

        a有相等或更高級的中斷正在執行中,這與處理突發事件的狀況相同,既然已經在處理突發情況,當然就不再接受其他中斷條件,除非接下來的中斷情形的優先權比較高。

        由此得到一個觀念:所有的中斷程序都應該盡量簡捷,一處理完中斷事項后立即回主程序,才不會占用過多時間,進而影響系統的性能。

        b目前的機器周期不是該指令的最后一個周期,由于80c51在指令執行時,分別有1個、2個和4個機器周期之分,也就是說,必須完全執行完此指令后,系統對中斷信號才會有所反應。比方說,當系統正在執行MUL AB指令(需花4個機器周期)時,中斷信號必須出現在第4個機器周期上才算有效。這也就意味著,中斷信號必須持續足夠長的時間,以便80c51的CPU有時間去反應。

        c若正在執行的指令為RETI或者是關于中斷設置IE、IP的指令時,對正好出現的中斷信號不反應,因為上述的情況剛好是某個中斷服務程序的結束,或是允許/禁止某個中斷的指令,當然是等到這些指令執行完畢后,才會對中斷信號有所反應,這些指令最多占用兩個機器周期的時間,所以這時的中斷信號必須保持有兩個機器周期以上的時間,才能被80c51接受。

        中斷的撤除

        應后,TCON或SCON中的中斷請求標志應及時清除。否則就意味著中斷請求仍然存在,弄不好就會造成中斷的重復查詢和響應,因此就存在一個中斷請求的撤除問題。

        1 定時器中斷請求的撤除

        定時應后,硬件自動把標志位TF0(或TF1)清0,因此定時中斷的中斷請求是自動撤除的,不需要用戶干預。

        2 串行中斷軟件撤除

        對于串行中斷,CPU響應中斷后,沒有用硬件清除它們的中斷標志RI、TI,必須在中斷服務程序中用軟件清除,以撤除其中斷請求。

        3 外中斷請求的撤除

        外部中斷的撤除包括中斷標志位IE0(或IE1)的清0和外中斷請求信號的撤除。其中IE0(或IE1)清“0”是在應后由硬件電路自動完成的。剩下的只是外中斷引腳請求信號的撤除了。下面對脈沖和電平兩種觸發方式分別進行討論。

        a對于脈沖方式的中斷請求,由于脈沖信號過后就消失了,也可以說中斷請求信號是自動撤除的。

        b對于電平方式的外部中斷,中斷標志的撤除是自動的,但中斷請求信號的低電平可能繼續存在,在以后機器周期采樣時,又會把已清0的IE0或IE1標志位重新置1.為此,要徹底解決電平方式外中斷的撤除,除了標志位清0之外,必要時還需在中斷響應后把中斷請求信號引腳從低電平強制改變為高電平,為此,可在系統中增加如圖所示電路

        6.jpg

        外中斷請求標志撤除電路

        從圖可以看出,外部中斷0請求信號在D觸發器(可選用74LS74)的時鐘輸入端。當外部設備有中斷請求信號(為低電平)出現時,Q端輸出為低電平,/INT0有效,向CPU發出中斷請求信號。CPU響應中斷后,在中斷服務程序中由軟件安排1個低電平中斷應答信號,從P1.0送至D觸發器的/SD(置位端,低電平有效),使D觸發器的Q端輸出為高電平,從而撤除了低電平的外中斷0請求信號。/SD端所需的低電平可通過在中斷服務程序中增加一下指令的得到:

        ANL P1,#0FEH ;使P1.0輸出為低電平,D觸發器置位

        在中斷服務程序中還要加上撤除外中斷0標志指令,即

        CLR IE0 ;清外中斷標志,以便下次可再次中斷

        可見,電平方式外部中斷請求信號的撤除是通過軟、硬件相結合的方法實現的。


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 齐河县| 汝阳县| 平凉市| 南投县| 华容县| 遂宁市| 科技| 江西省| 全椒县| 泸溪县| 弋阳县| 泾川县| 聂荣县| 威远县| 通榆县| 阿勒泰市| 从江县| 靖安县| 澎湖县| 蒙阴县| 普兰县| 宣恩县| 疏勒县| 吴川市| 榆中县| 额济纳旗| 平武县| 措美县| 嘉义市| 北川| 洪洞县| 宁海县| 宜兴市| 青州市| 曲阜市| 广州市| 旺苍县| 冷水江市| 商水县| 镇江市| 泽州县|