❶ 2、簡述MCS-51單片機的中斷響應過程
(正在看書是電話響了,暫停看書,去接電話。。。接完電話從剛才的地方繼續看書!這個過程就是中斷響應的過程!而且呼叫方是否是美女直接影響中斷響應級別!)這個例子非常的恰當不過我要更正一下,正在看書時電話響了,暫停看書,記下當前看到的頁數(將下一條指令的地址壓入單片機堆棧中),去接電話。。。接完電話從剛才的地方繼續看書(將指令的地址從堆棧彈出)!這個過程就是中斷響應的過程!而且呼叫方是否是美女直接影響中斷響應級別,這句話的意思是如果你正在接電話,有美女打電話過來,你要暫停當前的電話,先接通美女的電話,然後回來繼續講你剛才講的電話。
❷ MCS-51的中斷問題
51單片機的中斷響應的大概過程:
1.發現中斷請求,一般情況本條指令完成後的下一機器周期開始響應。
2.響應開始,先由硬體自動把當前程序指針PC入棧(保護起來)。
3.然後把中斷入口地址(各中斷入口地址固定)裝入程序指針PC,也是由硬體自動完成,至此中斷響應結束。
4.程序轉入中斷服務程序,先進行現場保護,再進行中斷處理,之後現場恢復,最後一條RETI指令結束中斷調用。
5.RETI指令的執行結果,就是把原來堆棧中保存的PC值,重新彈回PC,使得程序能在原來被中斷的地方繼續往下執行
所以選A,現場保護在中斷服務里邊,,不在中斷響應里邊。希望採納!!!
❸ 51單片機中斷響應過程舉例
CPU響應中斷時,首先把當前指令的下一條指令(就是中斷返回後將要執行的指令)的地址送入堆棧,然後根據中斷標記,將相應的中斷入口地址送入PC,PC是程序指針,CPU取指令就根據PC中的值,PC中是什麼值,就會到什麼地方去取指令,所以程序就會轉到中斷入口處繼續執行。這些工作都是由硬體來完成的,不必我們去考慮。這里還有個問題,大家是否注意到,每個中斷向量地址只間隔了8個單元,如0003-000B,在如此少的空間中如何完成中斷程序呢?很簡單,你在中斷處安排一個LJMP指令,不就可以把中斷程序跳轉到任何地方了嗎?
一個完整的主程序看起來應該是這樣的:
ORG 0000H
LJMP START
ORG 0003H
LJMP INT0 ;轉外中斷0
ORG 000BH
RETI ;沒有用定時器0中斷,在此放一條RETI,萬一 「不小心「產生了中斷,也不會有太大的後果。 資料來源:吳鑒鷹吧
中斷程序完成後,一定要執行一條RETI指令,執行這條指令後,CPU將會把堆棧中保存著的地址取出,送回PC,那麼程序就會從主程序的中斷處繼續往下執行了。注意:CPU所做的保護工作是很有限的,只保護了一個地址,而其它的所有東西都不保護,所以如果你在主程序中用到了如A、PSW等,在中斷程序中又要用它們,還要保證回到主程序後這裡面的數據還是沒執行中斷以前的數據,就得自己保護起來。
❹ 說明80C51單片機的中斷過程.
中斷響應
中斷響應就是單片機CPU對中斷源提出的中斷請求的接受。中斷請求被響應後,再經過一系列的操作,而後轉向中斷服務程序,完成中斷所要求的處理任務。下面簡要說明80c51的中斷響應過程:
1.外中斷采樣和內中斷置位
1.1外中斷采樣
-
要想知道外中斷是否有請求發生,需要對外中斷進行采樣。
當通過軟體將寄存器TCON的IT0(或IT1)位設置為0時,/INT0(或/INT1)為電平觸發方式,CPU在每個機器周期的S5P2(第五個狀態第2拍節)期間對/INT0(或/INT1)采樣,一旦在P3.2(或P3.3)上檢測到低電平時,則認為有外部中斷申請,隨即由硬體使TCON的IE0(或IE1)位置1,向CPU申請中斷。在中斷響應完成後轉向中斷服務子程序,再由硬體自動對IE0(或IE1)位清0.
當寄存器TCON的IT0(或IT1)位為1,/INT0(或/INT1)為脈沖觸發方式,則CPU在每個機器的S5P2期間對/INT0(或/INT1)采樣,當檢測到前一周期為高電平、後一周期為低電平時,由硬體使TCON的IE0(IE1)位置1,向CPU申請中斷,在中斷響應完成後轉向中斷服務子程序時,再由硬體自動對IE0(IE1)位清0.在邊沿觸發方式中,為保證CPU在兩個機器周期內檢測到由高到低的負跳變,高電平與低電平的持續時間不得少於一個機器周期的時間。
1.2內中斷置位
80c51把所有中斷標志都集中到TCON和SCON寄存器中。其中外中斷是使用采樣的方法把中斷請求鎖定在TCON寄存器的IE0(IE1)標志位上,而定時中斷和串列中斷的中斷請求由於都發生在晶元的內部,定時中斷可以直接去置位TCON的TF0(TF1),串列中斷可以直接去置位SCON的RI和TI。內中斷不存在采樣問題。
2.中斷查詢
所謂查詢,就是由CPU測試TCON和SCON中各標志位的狀態,以確定有沒有中斷請求發生以及是哪一個中斷請求。單片機是在每一個機器周期的最後狀態(S6),按優先順序順序對中斷請求標志進行查詢,即先查詢高級中斷後查詢低級中斷,同級中斷按「外部中斷0—定時中斷0—外部中斷1—定時中斷1—串列中斷」的順序查詢。如果查詢到有標志位為「1」,則表明有中斷請求發生,接著就從相鄰的下一個機器周期的S6狀態開始進行中斷響應。
由於中斷請求是隨機發生的,CPU無法預先得知,因此在程序執行過程中,中斷查詢要在指令執行的每個機器周期中不停地重復進行。換句話說,就相當於你在看書的時候,每一秒鍾都會抬起頭來聽一聽,看一看,是不是有人按門鈴,是否有電話,燒的開水是否開了。。。。。。看來,單片機比人蠢多了。
3.中斷響應
當查詢到有效的中斷請求時,緊接著就進行中斷響應。中斷響應時,根據寄存器TCON、SCON中的中斷標記,由硬體自動生成一條長調用指令LCALL XXXX,這里的XXXX就是程序存儲器中斷區中相應中斷的入口地址。對於80c51的5個獨立中斷源,這些入口地址已由系統設定。這樣在產生了相應的中斷以後,就可轉到相應的位置去執行。
例如,對於外部中斷0的響應,產生的長調用指令為
LCALL 0003H
生成LCALL指令後,緊接著就由CPU執行,首先將當前程序計數器PC的內容(准備執行的指令的地址)壓入堆棧以保護斷點,再將中斷入口地址裝入PC,使程序轉向相應的中斷區入口地址。從中斷源所對應的向量地址中可以看出,一個中斷向量入口地址到下一個中斷向量入口地址之間只有8個單元。也就是說,中斷服務程序的長度如果超過了8B,就會佔用下一個中斷的入口地址,導致出錯。但一般情況下,很少有一段中斷服務程序只佔用少於8B的情況,為此可以在中斷入口處寫一條「LJMPXXXX」或「AJMPXXXX」指令,這樣可以把實際處理中斷的程序放到ROM的任何一個位置。
例如,若採用外中斷0,在程序的開始處可以這樣寫:
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP INT_0
;以下是主程序
MAIN:
;以下是外中斷0服務程序
INT_0:
RETI
END
中斷服務程序完成後,一定要執行一條RETI指令,執行這條指令後,CPU將會把堆棧中保存著的地址取出,送回PC,那麼程序就會從主程序的中斷處繼續往下執行了。
說明 CPU所做的保護工作是很有限的,只保護了一個地址(主程序中斷處的地址),而其他的所有東西都不保護,所以如果你在主程序中用到了如A、DPTR、PSW等,在中斷程序中要用它們,還要保證回到主程序後這裡面的數據還是沒執行中斷以前的數據,就得自己保護起來。
-
CPU會在機器周期的S5P2階段讀入中斷標志,並在下一個機器周期中檢查,如果中斷條件成立時,系統會自行產生一個LCALL到相對應的中斷服務常式中,可是如果有下面3種情況時,系統是不會對中斷要求信號有反應的:
a有相等或更高級的中斷正在執行中,這與處理突發事件的狀況相同,既然已經在處理突發情況,當然就不再接受其他中斷條件,除非接下來的中斷情形的優先權比較高。
由此得到一個觀念:所有的中斷程序都應該盡量簡捷,一處理完中斷事項後立即回主程序,才不會佔用過多時間,進而影響系統的性能。
b目前的機器周期不是該指令的最後一個周期,由於80c51在指令執行時,分別有1個、2個和4個機器周期之分,也就是說,必須完全執行完此指令後,系統對中斷信號才會有所反應。比方說,當系統正在執行MULAB指令(需花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之外,必要時還需在中斷響應後把中斷請求信號引腳從低電平強制改變為高電平,為此,可在系統中增加如圖所示電路
外中斷請求標志撤除電路
從圖可以看出,外部中斷0請求信號在D觸發器(可選用74LS74)的時鍾輸入端。當外部設備有中斷請求信號(為低電平)出現時,Q端輸出為低電平,/INT0有效,向CPU發出中斷請求信號。CPU響應中斷後,在中斷服務程序中由軟體安排1個低電平中斷應答信號,從P1.0送至D觸發器的/SD(置位端,低電平有效),使D觸發器的Q端輸出為高電平,從而撤除了低電平的外中斷0請求信號。/SD端所需的低電平可通過在中斷服務程序中增加一下指令的得到:
ANLP1,#0FEH ;使P1.0輸出為低電平,D觸發器置位
在中斷服務程序中還要加上撤除外中斷0標志指令,即
CLRIE0 ;清外中斷標志,以便下次可再次中斷
可見,電平方式外部中斷請求信號的撤除是通過軟、硬體相結合的方法實現的。
❺ 簡述單片機中斷相應過程
首先開中斷,包括各個中斷源和總中斷,並設置中斷觸發條件,如定時器初值, 低電平觸發還是下降沿觸發,然後運行主程序,中斷條件具備時,轉入中斷程序,中斷程序完成後,返回主程序,至於保護重要的寄存器內容,屬於中斷程序之中的內容,包括有些共用中斷判斷到底屬於哪 一個中斷和清除中斷標志,都是中斷程序的內容,有的必須有,有的就沒有。
❻ MCS-51單片機在響應中斷過程中,PC如何變化
響應中斷時,PC先將斷點地址(就是執行完該語句的下一條語句的首位元組地址)壓入堆棧(先入低位元組,再入高位元組),然後將對應的中斷入口地址裝入PC,接下來就是執行中斷服務子程序。中斷結束後再從堆棧中彈出兩位元組的斷口地址裝入PC;返回到前面的斷點處。
T0的中斷入口地址是0x000B,這就是響應中斷後的PC值。
(6)單片機中斷響應過程擴展閱讀:
中斷響應是硬體對中斷請求作出響應的過程,包括識別中斷源,保留現場,引出中斷處理程序等過程。
① CPU在當前指令執行結束時,響應中斷,進入中斷的響應周期;
② 發出二個中斷回答信號INTA完成一個中斷響應周期;
③ 進行斷點及標志保存
如:將段地址(CS),偏移地址(IP)標志FR以及壓入堆棧。
④ 讀取中斷類型號,找到中斷源;
⑤ 裝入中斷服務程序的入口地址(CS,IP)
❼ 51單片機之中斷系統,外部中斷
中斷分為前棚4個步驟:中斷請求→中斷相應→中斷處理→中斷返回(先做更重要的事)
1、數據的輸入/輸出傳送方式
外部中斷要段梁看對應引腳外部的電平狀態。
例如:外部中斷0(INT0)對應的引腳是P32,
當出現 低電平 ,即P32引腳連接的地方是 低電平 ,進入相應的中斷函數;
當出現 下降沿 ,即P32引腳連接的地方 由高電平變為低電平 ,進入相應的中斷函數
內部中斷源要看單片機內部的定時器/計數器
中斷允許寄存器IE
定時器/計數器0/1控制寄存器TCON
對同時發生多個中斷申請時:
不同優先順序的中斷同時申請:先高後低
相同優先順序的中斷同時申請:按序執行
正處理低優先順序中斷又接到高級別中斷:高打斷低
正處理高優先順序中斷又接到低級別中斷:高不理低
初始化的意思如圖所示
實現思路
查看上方 P3第二功能各引腳功能定義 ,P3.3是外部中斷1 (INT1)的外部輸入引腳
編寫一個程序握悔運,使得 S2按鍵按下 時,某個IO口(下面程序選擇了P3.7這個IO口) 產生跳變沿 (由1變0)。P3.3與P3.7用跳線連接,使P3.3口與P3.7口同時產生跳變沿。