中文字幕无码不卡一区二区三区_少妇被又大又粗又爽毛片久久黑人_91精品国产在热久久无毒不卡_久久久久久亚洲综合网站

技術(shù)熱線: 4007-888-234
設(shè)計(jì)開發(fā)

專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

開發(fā)工具

提供開發(fā)工具、應(yīng)用測(cè)試 完善的開發(fā)代碼案例庫(kù)分享

技術(shù)支持

從全面的產(chǎn)品導(dǎo)入到強(qiáng)大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無(wú)限潛能!

新品推廣

提供新的芯片及解決方案,提升客戶產(chǎn)品競(jìng)爭(zhēng)力

新聞中心

提供最新的單片機(jī)資訊,行業(yè)消息以及公司新聞動(dòng)態(tài)

PIC中檔單片機(jī)的中斷總結(jié)

更新時(shí)間: 2019-03-26
閱讀量:3818

中斷是PIC高手必須掌握的武器,轉(zhuǎn)貼一篇,還希望大家補(bǔ)充發(fā)表對(duì)中斷應(yīng)用的見解。


;******************** 中斷服務(wù)代碼


    btfss    INTCON,T0IE      ; 判斷是否為T0中斷


    goto    other_int


    btfss    INTCON,T0IF      ; it ’s the time of T0 int


    goto    other_int


    bcf    INTCON,T0IF      ; T0中斷,清除中斷標(biāo)志


    movlw    0x10          ; 微秒的高位字節(jié)加上定時(shí)時(shí)間 256x16分頻=4096=0x1000的高位(0x10) 

   addwf    us+1


    goto    end_int          


other_int              ; 可添加其他中斷服務(wù)代碼


    nop              ; other isr code can be added


;**********************************


end_int                  ; 恢復(fù)現(xiàn)場(chǎng)

 

=================


假如又有新的中斷正好在這段程序中間產(chǎn)生


btfss    INTCON,T0IF         


goto    other_int


bcf    INTCON,T0IF    
-------------------------

 

   PIC中檔單片機(jī)的中斷總結(jié)正文 

一、中斷活動(dòng)的過(guò)程

 

  對(duì)于PIC單片機(jī)來(lái)說(shuō),一次中斷的過(guò)程大致有下列階段:

 

為了使得說(shuō)明形象和直觀,本文采用一些詼諧的語(yǔ)句來(lái)比喻說(shuō)明:


中斷請(qǐng)求---------比喻成申請(qǐng)買經(jīng)濟(jì)適用房的請(qǐng)求


中斷標(biāo)志-------一份申請(qǐng)書


本中斷使能xxIE-----本單位領(lǐng)導(dǎo)


PEIE-------------戶口辦公室主任


GIE--------------銀行的管理信貸的科長(zhǎng) 

 1. 中斷請(qǐng)求:房子太少,兒子要結(jié)婚了,得買房了,可資源和財(cái)力有限,不能賣商品房,只好按特殊情況處理,寫一份申請(qǐng)書(中斷標(biāo)志位IF1);

  2. 本單位領(lǐng)導(dǎo)xxIE看了之后,如果給你蓋了一個(gè)戳:(即該中斷使能位IE=1),那么恭喜你,這份申請(qǐng)書可以提交到更高一級(jí)的部門;如果沒(méi)蓋(xxIE=0),那么對(duì)不起,先放我這里吧,等我們研究研究好后再說(shuō)。如果你不開心,要拿回申請(qǐng)書撕掉,呵呵,那么IF=0;你的購(gòu)房請(qǐng)求之夢(mèng)破滅; 

3. xxIE領(lǐng)導(dǎo)將根據(jù)戶口,將這些請(qǐng)求書給分類,一類是外地遷來(lái)的戶口,提交給戶口辦公室PEIE主任審查,PEIE主任如果給你蓋了個(gè)戳(PEIE=1),那么,他將會(huì)把申請(qǐng)書提交給銀行的GIE科長(zhǎng)批準(zhǔn),否則就是放在這里再研究研究或者你要回來(lái)撕毀;一類是本地戶口,可直接提交給銀行的GIE科長(zhǎng)批準(zhǔn),然后你將申請(qǐng)書帶到GIE科長(zhǎng)的辦公室。

  4. GIE科長(zhǎng)蓋了章之后(GIE=1),然后,你就可以拿著申請(qǐng)書去找房地產(chǎn)商要房子了(此時(shí)PC指針=0004H),因?yàn)?/span>GIE科長(zhǎng)有很多事情要做,所以他每蓋了一次戳之后(注意是一次不是一個(gè),因?yàn)橐苍S有多個(gè)中斷同時(shí)發(fā)生,也就是說(shuō)有其他地方的人來(lái)請(qǐng)GIE蓋戳),就在辦公室門外掛了個(gè)牌子:請(qǐng)勿打擾。他自己則休息去了,直到接到RETFIE的電話或者有人打他的手機(jī)。 

5. 房地產(chǎn)商準(zhǔn)備給房子了,不過(guò)你最好得先把各項(xiàng)手續(xù)給填好,叫5w押金,另外協(xié)議阿,合同阿,都得自己搞定,這叫保護(hù)現(xiàn)場(chǎng)。


  6. 房地產(chǎn)商開始上班了,于是挨個(gè)查申請(qǐng)書是誰(shuí)提交的,以便給你安排你預(yù)定的房子。這個(gè)叫中斷查詢。


  7. 查到是你的后,然后打電話讓你過(guò)來(lái),帶你去看房子,把鑰匙給你。這個(gè)交中斷處理。

 

  8. 鑰匙交給你之后,房子你是到手了,不過(guò)這份申請(qǐng)書就失效了,房地產(chǎn)商將該申請(qǐng)書銷毀。這個(gè)叫清除中斷標(biāo)志。

 

9. 好啦,現(xiàn)在你可以去房地產(chǎn)商自己去要回以前交的押金,身份證啊等等。這個(gè)叫恢復(fù)現(xiàn)場(chǎng)


  10. 最后,房地產(chǎn)商辦完了,讓RETFIE小姐打個(gè)電話給GIE科長(zhǎng)(執(zhí)行RETFIE指令),GIE科長(zhǎng)才起來(lái),把請(qǐng)勿打擾的牌子取下,讓其他的帶著申請(qǐng)書的人進(jìn)來(lái)。當(dāng)然,如果你的事情還沒(méi)搞定,GIE科長(zhǎng)的關(guān)系戶打了他的手機(jī)(你在辦事時(shí)-處理中斷時(shí),若有GIE被置1),他也會(huì)開門取下請(qǐng)勿打擾的牌子,讓關(guān)系戶進(jìn)來(lái),給他蓋好章。這下就對(duì)不起了,人家有關(guān)系,所以你的事情要馬上停下來(lái),先等關(guān)系戶辦完他的事情之后,再給你辦你的事情。這個(gè)叫中斷嵌套,要注意GIE科長(zhǎng)有8個(gè)關(guān)系戶(硬件堆棧的深度為8級(jí))哦。 

10. 最后,房地產(chǎn)商辦完了,讓RETFIE小姐打個(gè)電話給GIE科長(zhǎng)(執(zhí)行RETFIE指令)GIE科長(zhǎng)才起來(lái),把請(qǐng)勿打擾的牌子取下,讓其他的帶著申請(qǐng)書的人進(jìn)來(lái)。當(dāng)然,如果你的事情還沒(méi)搞定,GIE科長(zhǎng)的關(guān)系戶打了他的手機(jī)(你在辦事時(shí)-處理中斷時(shí),若有GIE被置1),他也會(huì)開門取下請(qǐng)勿打擾的牌子,讓關(guān)系戶進(jìn)來(lái),給他蓋好章。這下就對(duì)不起了,人家有關(guān)系,所以你的事情要馬上停下來(lái),先等關(guān)系戶辦完他的事情之后,再給你辦你的事情。這個(gè)叫中斷嵌套,要注意GIE科長(zhǎng)有8個(gè)關(guān)系戶(硬件堆棧的深度為8級(jí))哦。


二、需要注意的問(wèn)題:


1. 中斷現(xiàn)場(chǎng)的保護(hù)(可以參考以前的帖子,在xieyubing版主的指點(diǎn)下,有恰當(dāng)?shù)睦?/span>);


2. 初次上電復(fù)位、電源跌落復(fù)位和其他情況下的復(fù)位,均使得全局中斷位GIE和其他中斷使能位xxIE=0;


3. 中斷標(biāo)志位的狀態(tài)與該中斷源是否被屏蔽無(wú)關(guān),與全局中斷使能位GIE也無(wú)關(guān)。


4. 當(dāng)開放某一中斷源時(shí),該中斷源就是通過(guò)中斷標(biāo)志向CPU申請(qǐng)中斷的,無(wú)論什么原因,只要標(biāo)志位IF1(可以用軟件強(qiáng)行置1),均會(huì)產(chǎn)生中斷請(qǐng)求。


5. 當(dāng)中斷標(biāo)志位為1,如果該中斷被屏蔽或者被禁止了,只要不清除標(biāo)志位,那么該中斷請(qǐng)求會(huì)被潛伏下來(lái),一旦屏蔽解除,立即產(chǎn)生中斷響應(yīng)。反之,如果在屏蔽/禁止條件解除之前清除了該標(biāo)志位,那么則無(wú)中斷請(qǐng)求。

6. 當(dāng)CPU響應(yīng)任一中斷時(shí),全局中斷使能位GIE會(huì)自動(dòng)清零;當(dāng)中斷返回時(shí),它有自動(dòng)置1。如果在中斷處理期間,用軟件將已經(jīng)清零的GIE位又重新置位,這個(gè)時(shí)候若再出現(xiàn)中斷請(qǐng)求,就可以形成了中斷嵌套。即:在處理某一中斷期間又響應(yīng)了其他中斷請(qǐng)求,就形成了中斷嵌套,此時(shí),前一中斷處理過(guò)程會(huì)被暫停而進(jìn)入新的中斷處理,當(dāng)新中斷處理完畢后,才會(huì)繼續(xù)處理前一個(gè)被擱置的中斷。此方式可以形成多級(jí)嵌套,但不能超過(guò)硬件堆棧的深度8級(jí),以免造成堆棧溢出而不能正常返回。

 

 


7. 如果同時(shí)發(fā)生多個(gè)中斷請(qǐng)求,則中斷處理的順序取決于中斷程序中的檢查中斷源的順序。

 

 


8. 若要防止中斷請(qǐng)求被丟失:則要注意下面兩種情況:如果同一中斷源的中斷發(fā)生間隔時(shí)間大于該中斷服務(wù)的處理時(shí)間,則可能出現(xiàn)中斷事件被忽略(體現(xiàn)在中斷服務(wù)的過(guò)程中,標(biāo)志位被連續(xù)發(fā)生來(lái)兩次置位),例如:中斷事件發(fā)生的時(shí)間間隔為30ms,中斷服務(wù)處理加上跳轉(zhuǎn)判斷的時(shí)間為50ms,則情況將會(huì)如下所示:

 

   [中斷次數(shù)----------1][中斷次數(shù)----------2][中斷次數(shù)----------3][中斷次數(shù)----------4]


   [處理次數(shù)------------------------1][處理次數(shù)------------------------2][處理次數(shù)------------------------4]


如果在中斷處理一開始就清除IF,那么如上圖所示,中斷事件34 在處理次數(shù)2的過(guò)程中發(fā)生來(lái)兩次,那么即使IF清除發(fā)生在中斷次數(shù)3發(fā)生之前,也將丟失第三次中斷。

 


另外,即使中斷出現(xiàn)的時(shí)間間隔大于中斷服務(wù)的時(shí)間間隔,如果清除中斷標(biāo)志位的指令安排在中斷服務(wù)子程序的尾部,就有可能造成丟失該中斷請(qǐng)求(即兩次中斷標(biāo)志置位的事件只對(duì)應(yīng)一條清除指令和一次中斷處理。

 

 

9. 在進(jìn)行查表操作時(shí)必須禁止CPU響應(yīng)中斷,以避免中斷返回時(shí)跳轉(zhuǎn)到不希望的地址上去。 

三、一個(gè)疑惑

 

 

一個(gè)疑問(wèn):一些書上提到:如果對(duì)寄存器INTCON進(jìn)行--操作的時(shí)候,要事先將GIE0,再對(duì)INTCON進(jìn)行操作,然后將GIE恢復(fù)為1


BCF INTCON,GIE


  BSF INTCON,XX


  BSF INTCON,GIE 

所提到的理由是:當(dāng)CPU正在執(zhí)行一條對(duì)INTCON寄存器進(jìn)行--操作的指令時(shí),如果恰好發(fā)生了中斷請(qǐng)求,則中斷服務(wù)程序會(huì)被執(zhí)行兩次。這是因?yàn)楫?dāng)中斷請(qǐng)求發(fā)生后INTCON寄存器的GIE寄存器會(huì)被硬件自動(dòng)清零(屏蔽所有中斷),并且程序轉(zhuǎn)入中斷例程入口(0004h)。當(dāng)GIE被清零后,這時(shí)如果CPU正在執(zhí)行一條對(duì)INTCON“--的指令時(shí),則GIE位還會(huì)被寫會(huì)操作重新置1,這樣就會(huì)造成CPU兩次進(jìn)入中斷服務(wù)程序。

 

該段解釋晦澀難懂,根據(jù)中斷發(fā)生過(guò)程的時(shí)序(PICmicro中檔單片機(jī)系列參考手冊(cè)的第8-2頁(yè)):在第n個(gè)指令周期里,CPU檢測(cè)到IF標(biāo)志位為1,則在n+1個(gè)周期內(nèi)將自動(dòng)使得GIE=0,該周期內(nèi)既不取指也不執(zhí)行指令,然后在n+2個(gè)指令周期里,0004h指針裝入PC指針,該周期也不運(yùn)行其他指令,只完成0004H->(PC)的取指過(guò)程,第n+3個(gè)指令周期里,CPU執(zhí)行0004h地址的指令碼,并同時(shí)取0005h的指令碼。 

顯然,作者提到的當(dāng)GIE被清零后,這時(shí)如果CPU正在執(zhí)行一條對(duì)INTCON“--的指令時(shí),則GIE位還會(huì)被寫會(huì)操作重新置1,這樣就會(huì)造成CPU兩次進(jìn)入中斷服務(wù)程序。的解釋存在下面的問(wèn)題:GIE被硬件自動(dòng)清零時(shí)的那個(gè)周期,是一個(gè)空運(yùn)行周期,CPU并不執(zhí)行指令,下一個(gè)周期也是空運(yùn)行周期,不過(guò)是完成將0004h地址中的代碼取指操作。然后就開始了0004h地址的代碼的執(zhí)行操作和0005h地址代碼的取指過(guò)程。那么GIE在被硬件自動(dòng)清零后要想置會(huì)1,只有兩種方法:RETFIE指令使GIE自動(dòng)置1;通過(guò)軟件指令對(duì)GIE人為置1。顯然,如果對(duì)GIE人為置1的指令執(zhí)行在對(duì)該標(biāo)志位清零前,那么會(huì)出現(xiàn)前文所述的中斷嵌套(設(shè)該中斷為A),如果沒(méi)有其他中斷發(fā)生且執(zhí)行順序先于中斷A且對(duì)中斷A的標(biāo)志清零的話,那么中斷A的嵌套是一個(gè)死循環(huán)。就不是執(zhí)行兩次的問(wèn)題了----因?yàn)橥粋€(gè)中斷嵌套時(shí),GIE在自動(dòng)清零被軟件置一永遠(yuǎn)都發(fā)生在清除IF之前,那么IF一直得不到清除,而GIE又幾乎一直都是1。 

作者所說(shuō)的情況似乎是這樣的:讀改寫INTCON指令按如下過(guò)程分解:讀INTCON的時(shí)候,GIE先是為1的,此時(shí)發(fā)生了中斷,GIE被硬件清零,開始執(zhí)行中斷服務(wù)程序,然后再IF標(biāo)志沒(méi)有清除之前,執(zhí)行INTCON的其他位的修改和寫回操作,也將中斷發(fā)生前的GIE讀為1的信息寫回GIE,這樣,CPU被迫發(fā)生了第二次中斷。顯然,這樣是將BSF  INTCON, XX指令分解得支離破碎---本來(lái)一個(gè)指令周期可以完成的指令被跨了多個(gè)指令周期;而且一個(gè)指令周期的指令被CPU在不同地址處分解執(zhí)行讀改寫過(guò)程。


如果不是這樣的話,那么作者的解釋就自相矛盾:當(dāng)CPU正在執(zhí)行一條對(duì)INTCON寄存器的--操作的指令時(shí),如果恰好發(fā)生了中斷請(qǐng)求  ”當(dāng)GIE被清零后,這是如果CPU正在執(zhí)行一條對(duì)INTCON‘--的指令時(shí)相互矛盾。 



崇明县| 三亚市| 界首市| 永嘉县| 依安县| 迭部县| 阿克| 长兴县| 东兴市| 加查县| 祁阳县| 香河县| 化德县| 德化县| 白沙| 嵩明县| 射洪县| 衡山县| 海安县| 永胜县| 隆尧县| 武宣县| 五台县| 渑池县| 乌兰浩特市| 德江县| 邳州市| 杭锦后旗| 汤原县| 公安县| 白山市| 会昌县| 深泽县| 习水县| 玉龙| 乌兰察布市| 平邑县| 永顺县| 科技| 微博| 儋州市|