久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

PIC單片機的中斷總結

作者:佚名   來源:不詳   點擊數:  更新時間:2014年08月31日   【字體:

 與51或者其他系列的單片機相比,PIC單片機的中斷機制有其特殊之處,針對我們一些初學者存在的一些問題和疑惑,我在此做一個個人總結,不當的地方,請站友們指正。

先摘引三個對PIC中斷理解的回帖,然后我再對中斷活動的過程、應該注意的事項、及一個疑惑進行較詳細的總結和解釋。
---------------
johnfrank:關于pic中斷有些不明白的地方
借用大蝦的程序;
;********************
中斷服務代碼
btfssINTCON,T0IE;判斷是否為T0中斷
gotoother_int
btfssINTCON,T0IF;it?sthetimeofT0int 
gotoother_int 
bcfINTCON,T0IF;是T0中斷,清除中斷標志 
movlw0x10;微秒的高位字節加上定時時間256x16分頻=4096=0x1000的高位(0x10) 
addwfus+1
gotoend_int  other_int;可添加其他中斷服務代碼 
nop;otherisrcodecanbeadded 
;********************************** 
end_int;恢復現場 
================= 
假如又有新的中斷正好在這段程序中間產生 
btfssINTCON,T0IF 
gotoother_int 
bcfINTCON,T0IF 程序豈不是要出錯跑飛了 
johnfrank:謝謝你的關注。 
我講一下自己的理解,權做回答,不當之處,還請站友們指點。 
pic中檔單片機系列沒有“硬件中斷優先級別”(請允許我這樣說),含義是指:當內核正在處理當前的中斷服務A時,在這個期間里,其他任何中斷的產生,只能使其標志位xxIF入口),等到執行到retfie后返回主程序,然后再次進入中斷入口0004H... 
之所以說其無“硬件中斷優先級別”是與“軟件中斷優先級別”對應的,通過中斷服務代碼對中斷標志和IE的檢測的先后,可設立優先級。當然,準確地說,這是一種順序,而非級別,呵呵。 
如果了解一下51的中斷系統,相信你能更好地理解PIC的中斷的級別:將會出現你說的情況,當優先級更高的中斷來臨時,內核將暫時停止當前中斷服務,保存當前中斷服務的現場,執行優先級更高的中斷服務,處理完成后,恢復現場,執行未處理完成的中斷服務....,最后,返回主程序。 
小弟講得有點煩瑣,并不形象,可能還有紕漏和謬誤之處,請大家指正,相信johnfrank在仔細看書之后,應該可以形成自己的正確看法。 
zdtdl:小弟說兩句~~ 
簡單地說,當系統響應一個中斷時,GIE位將被自動清零以禁止其他的中斷,在執行中斷返回指令RETFIE后系統再自動置GIE位1開放中斷。只要不在中斷程序中對GIE置1,就不會產生反復進入中斷的現象,靠查詢方式決定響應誰。
PIC也有中斷嵌套,可以形成多級嵌套,甚至自身嵌套,不過嵌套的級數絕對不能超過硬件堆棧的深度。
------------------------- 
PIC中檔單片機的中斷總結正文 
一、中斷活動的過程 
對于PIC單片機來說,一次中斷的過程大致有下列階段:為了使得說明形象和直觀,本文采用一些詼諧的語句來比喻說明: 
中斷請求---------比喻成申請買經濟適用房的請求 
中斷標志-------一份申請書 
本中斷使能xxIE-----本單位領導 
PEIE-------------戶口辦公室主任 
GIE--------------銀行的管理信貸的科長 
 
1.中斷請求:房子太少,兒子要結婚了,得買房了,可資源和財力有限,不能賣商品房,只好按特殊情況處理,寫一份申請書(中斷標志位IF置1); 
2.本單位領導xxIE看了之后,如果給你蓋了一個戳:(即該中斷使能位IE=1),那么恭喜你,這份申請書可以提交到更高一級的部門;如果沒蓋(xxIE=0),那么對不起,先放我這里吧,等我們研究研究好后再說。如果你不開心,要拿回申請書撕掉,呵呵,那么IF=0;你的購房請求之夢破滅; 
3.xxIE領導將根據戶口,將這些請求書給分類,一類是外地遷來的戶口,提交給戶口辦公室PEIE主任審查,PEIE主任如果給你蓋了個戳
(PEIE=1),那么,他將會把申請書提交給銀行的GIE科長批準,否則就是放在這里再研究研究或者你要回來撕毀;一類是本地戶口,可直接提交給銀行的GIE科長批準,然后你將申請書帶到GIE科長的辦公室。
4. GIE科長蓋了章之后(GIE=1),然后,你就可以拿著申請書去找房地產商要房子了(此時
5.房地產商準備給房子了,不過你最好得先把各項手續給填好,交5w押金,另外協議阿,合同阿,都得自己搞定,這叫“保護現場”。
6.房地產商開始上班了,于是挨個查“申請書”是誰提交的,以便給你安排你預定的房子。這個叫“中斷查詢”。 
7.查到是你的后,然后打電話讓你過來,帶你去看房子,把鑰匙給你。這個交“中斷處理”。 
8.鑰匙交給你之后,房子你是到手了,不過這份申請書就失效了,房地產商將該申請書銷毀。這個叫“清除中斷標志”。
9.好啦,現在你可以去房地產商自己去要回以前交的押金,身份證啊等等。這個叫“恢復現場”。 
10.最后,房地產商辦完了,讓RETFIE小姐打個電話給GIE科長(執行RETFIE指令),GIE科長才起來,把“請勿打擾”的牌子取下,讓其他的帶著申請書的人進來。當然,如果你的事情還沒搞定,GIE科長的關系戶打了他的手機(你在辦事時-處理中斷時,若有GIE被置1),他也會開門取下“請勿打擾”的牌子,讓關系戶進來,給他蓋好章。這下就對不起了,人家有關系,所以你的事情要馬上停下來,先等關系戶辦完他的事情之后,再給你辦你的事情。這個叫“中斷嵌套”,要注意GIE科長有8個關系戶(硬件堆棧的深度為8級)哦。
 
二、需要注意的問題: 
1.中斷現場的保護(可以參考以前的帖子,在xieyubing版主的指點下,有恰當的例子); 
2.初次上電復位、電源跌落復位和其他情況下的復位,均使得全局中斷位GIE和其他中斷使能位xxIE=0;
3.中斷標志位的狀態與該中斷源是否被屏蔽無關,與全局中斷使能位GIE也無關。
4.當開放某一中斷源時,該中斷源就是通過中斷標志向CPU申請中斷的,無論什么原因,只要標志位IF置1(可以用軟件強行置1),均會產生中斷請求。 
5.當中斷標志位為1,如果該中斷被屏蔽或者被禁止了,只要不清除標志位,那么該中斷請求會被潛伏下來,一旦屏蔽解除,立即產生中斷響應。反之,如果在屏蔽/禁止條件解除之中斷嵌套,此時,前一中斷處理過程會被暫停而進入新的中斷處理,當新中斷處理完畢后,
才會繼續處理前一個被擱置的中斷。此方式可以形成多級嵌套,但不能超過硬件堆棧的深度8級,以免造成堆棧溢出而不能正常返回。 
7.如果同時發生多個中斷請求,則中斷處理的順序取決于中斷程序中的檢查中斷源的順序。
8.若要防止中斷請求被丟失:則要注意下面兩種情況:如果同一中斷源的中斷發生間隔時間大于該中斷服務的處理時間,則可能出現中斷事件被忽略(體現在中斷服務的過程中,標志位被連續發生來兩次置位),例如:中斷事件發生的時間間隔為30ms,中斷服務處理加上
跳轉判斷的時間為50ms,則情況將會如下所示: 
[中斷次數----------1][中斷次數----------2][中斷次數----------3][中斷次數----------4]
[處理次數-----------------------1][處理次數-----------------------2][處理次數------------------------4] 
如果在中斷處理一開始就清除IF,那么如上圖所示,中斷事件3、4在處理次數2的過程中發生來兩次,那么即使IF清除發生在中斷次數3
發生之前,也將丟失第三次中斷。另外,即使中斷出現的時間間隔大于中斷服務的時間間隔,如果清除中斷標志位的指令安排在中斷服務子程序的尾部,就有可能造成丟失該中斷請求(即兩次中斷標志置位的事件只對應一條清除指令和一次中斷處理。
9.在進行查表操作時必須禁止CPU響應中斷,以避免中斷返回時跳轉到不希望的地址上去。  
三、一個疑惑一個疑問:一些書上提到:如果對寄存器INTCON進行“讀-改-寫”操作的時候,要事先將GIE清0,再對INTCON進行操作,然后將GIE恢復為1  即BCF INTCON,GIE  BSF INTCON,XX  BSF INTCON,GIE  所提到的理由是:當CPU正在執行一條對INTCON寄存器進行“讀-改-寫”操作的指令時,如果恰好發生了中斷請求,則中斷服務程序會被執行兩次。這是因為當中斷請求發生后INTCON寄存器的GIE寄存器會被硬件自動清零(屏蔽所有中斷),并且程序轉入中斷例程入口(0004h)。當GIE被清零后,這時如果CPU正在執行一條對INTCON“讀-改-寫”GIE=0,該周期內既不取指也不執行指令,然后在n+2個指令周期里,0004h指針裝入PC指針,該周期也不運行其他指令,只完成0004H->(PC)的取指過程,第n+3個指令周期里,CPU執行0004h地址的指令碼,并同時取0005h的指令碼。 
顯然,作者提到的“當GIE被清零后,這時如果CPU正在執行一條對INTCON“讀-改-寫”的指令時,則GIE位還會被寫會操作重新置1,這樣就會造成CPU兩次進入中斷服務程序。”的解釋存在下面的問題:GIE被硬件自動清零時的那個周期,是一個空運行周期,CPU并不執行指令,下一個周期也是空運行周期,不過是完成將0004h地址中的代碼取指操作。然后就開始了0004h地址的代碼的執行操作和0005h地址代碼的取指過程。那么GIE在被硬件自動清零后要想置會1,只有兩種方法:RETFIE指令使GIE自動置1;通過軟件指令對GIE人為置1。顯然,如果對GIE人為置1的指令執行在對該標志位清零前,那么會出現前文所述的中斷嵌套(設該中斷為A),如果沒有其他中斷發生且執行順序先于中斷A且對中斷A的標志清零的話,那么中斷A的嵌套是一個死循環。就不是執行兩次的問題了----因為同一個中斷嵌套時,GIE在自動清零被軟件置一永遠都發生在清除IF之前,那么IF一直得不到清除,而GIE又幾乎一直都是1。
作者所說的情況似乎是這樣的:讀改寫INTCON指令按如下過程分解:讀INTCON的時候,GIE先是為1的,此時發生了中斷,GIE被硬件清零,開始執行中斷服務程序,然后再IF標志沒有清除之前,執行INTCON的其他位的修改和寫回操作,也將中斷發生前的GIE讀為1的信息寫回GIE,這樣,CPU被迫發生了第二次中斷。顯然,這樣是將BSF INTCON, XX指令分解得支離破碎---本來一個指令周期可以完成的指令被跨了多個指令周期;而且一個指令周期的指令被CPU在不同地址處分解執行讀改寫過程。
如果不是這樣的話,那么作者的解釋就自相矛盾:“當CPU正在執行一條對INTCON寄存器的?讀-改-寫?操作的指令時,如果恰好發生了中斷請求”與“當GIE被清零后,這是如果CPU正在執行一條對INTCON?讀-改-寫?的指令時”相互矛盾。 
總之,我對這里的理解存在一些疑惑,請斑竹及各位前輩指點。
關閉窗口
主站蜘蛛池模板: 欧美亚洲成人网 | 国产美女一区二区三区 | 免费一级毛片 | 国产精品精品视频一区二区三区 | 岛国av在线免费观看 | 免费一区二区在线观看 | 国产一二三区电影 | 亚洲成人免费视频在线观看 | 黄色免费在线观看网址 | www.888www看片 | 日本不卡免费新一二三区 | 亚洲 欧美 日韩 在线 | 亚洲精品乱码久久久久久久久 | 九九热在线观看视频 | 欧美a区| 精品久久久久久久久久久下田 | 色呦呦在线 | 请别相信他免费喜剧电影在线观看 | 国产精品99久久久久 | 久久精品美女 | 亚洲一区二区三区视频免费观看 | 亚洲自拍偷拍av | 免费看的av | 成人在线看片 | 亚洲一区二区三区在线视频 | 麻豆av在线免费观看 | 国产91久久精品一区二区 | 国产一在线观看 | 日本黄色片免费在线观看 | 国产一区二区三区 | 亚洲欧美日本在线 | 成人免费视频一区二区 | 黄色免费在线观看网址 | 欧美激情精品久久久久久 | 久久一视频 | 国产精品视频区 | 亚洲国产精品视频一区 | 欧美日韩电影免费观看 | 久久夜视频 | 国产亚洲日本精品 | 国产在线拍偷自揄拍视频 |