<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 關(guān)于單片機中斷詳解

關(guān)于單片機中斷詳解

作者: 時(shí)間:2016-12-01 來(lái)源:網(wǎng)絡(luò ) 收藏
什么是中斷?就是打斷當前要做的事,轉而去執行別的事情。比如小七我現在正在電腦前寫(xiě)帖子,突然老媽叫我幫她下樓拿點(diǎn)東西,于是我就收到了老媽給我的一個(gè)中斷(可以叫做外部中斷),當我去拿東西時(shí),突然尿急(內部中斷,尿袋快要撐爆了),這又是一個(gè)中斷,!我們把引起中斷的事件叫做中斷源(如老媽給我的任務(wù),以及我的尿意。。。外部引起的叫外部中斷,內部引起的叫內部中斷),產(chǎn)生中斷后就要去處理它,這稱(chēng)為中斷的響應。


由于尿急這個(gè)內部中斷的優(yōu)先級比老媽給我的外部中斷還要高,尿急了,我總得先去撒尿吧?所以我就先去執行撒尿這個(gè)語(yǔ)句(小七:怎么我覺(jué)得這個(gè)比喻很別扭呢?!)。當我撒完尿后(還是覺(jué)得很別扭。。。)我會(huì )返回來(lái)幫老媽拿東西(高優(yōu)先級的中斷處理完后返回執行優(yōu)先級較低的中斷),拿完?yáng)|西了我再回到電腦前繼續寫(xiě)帖子(全部中斷處理完后繼續接手中斷前的工作)。這個(gè)就叫做中斷的返回。這么通俗的比喻,大家對中斷的概念應該都明白了吧,那么在單片機里面,中斷有什么用呢?

當單片機正在執行程序的時(shí)候,突然某個(gè)按鍵按下了(產(chǎn)生外部中斷),單片機就必須得去處理那個(gè)按鍵(中斷的響應),看看是發(fā)生了什么事,按鍵處理完后繼續回來(lái)執行程序(中斷的返回)。

同樣,單片機正在執行程序的時(shí)候,內部的定時(shí)器溢出(定時(shí)器后面會(huì )單獨講到),或者檢測到單片機的電壓低于正常值等等(單片機內部產(chǎn)生的中斷叫內部中斷),單片機就得去處理這些事情,然后再返回來(lái)。

在單片機里面,中斷是有特殊的功能寄存器控制的,單片機里面一共有兩個(gè)中斷,一個(gè)是中斷0,一個(gè)是中斷1 ,和兩個(gè)定時(shí)器T0,T1,定時(shí)器就是你打開(kāi)它后,它會(huì )自動(dòng)數數,當數到你給它限定的值時(shí),它就會(huì )溢出,產(chǎn)生中斷讓CPU處理(就像一個(gè)桶,你打開(kāi)水龍頭后,水越來(lái)越多,當達到你需要的水位時(shí),就會(huì )產(chǎn)生中斷叫你去處理它)。這些我們先不深入了解他是什么東西,我們只需知道中斷是用下面這幾個(gè)關(guān)鍵詞控制的就行了:

IT0聲明外部中斷0的類(lèi)型,IT0=1是邊沿觸發(fā),0是電平觸發(fā)
邊沿觸發(fā)就是當檢測到外部電平發(fā)生變化,即由低變高,或者由高變低時(shí),就會(huì )產(chǎn)生一個(gè)中斷
電平觸發(fā)就是檢測到高電平或者低電平時(shí),產(chǎn)生中斷

IE0 外部邊沿觸發(fā)產(chǎn)生中斷后,它的值會(huì )變1,當CPU響應后,會(huì )自動(dòng)變?yōu)?

IT1和IT0一樣的含義
IE1 和IT0一樣的含義


EX0外部中斷0控制器,EX0=1是允許外部中斷,0是禁止外部中斷,也就是不理會(huì )外部中斷
ET0這個(gè)是定時(shí)器中斷控制器,ET1=1是允許定時(shí)器產(chǎn)生中斷,0是禁止
EX1,ET1的含義跟上面的都一樣。
EA總中斷控制器,1是允許有中斷產(chǎn)生,0是禁止所有中斷,就算天打雷劈也不理會(huì )

另外,還有一個(gè)中斷優(yōu)先級的控制器,就是控制是去幫媽媽拿東西的優(yōu)先級高還是去撒尿的優(yōu)先級高。


PX0 外部中斷0的優(yōu)先級控制,假如內外都產(chǎn)生了中斷,1就是優(yōu)先處理外部中斷,0就是優(yōu)先處理內部中斷

PT0 定時(shí)器0優(yōu)先級控制器,1就是優(yōu)先相應定時(shí)器0

PT1 定時(shí)器1優(yōu)先級控制器,1就是優(yōu)先相應定時(shí)器1

另外還有串口的RI,TI,PS等我們先不學(xué)習了,不然大伙該亂了
(眾人:其實(shí)我們早已凌亂了。。。一頭霧水?。?br />
還有個(gè)概念,就是中斷請求的撤銷(xiāo),也就是說(shuō),產(chǎn)生中斷后,會(huì )產(chǎn)生一個(gè)中斷請求,為1,當CPU處理完中斷后,必須清除這個(gè)請求,不然CPU又會(huì )認為這個(gè)中斷沒(méi)有處理又跑去處理它……

對于兩個(gè)定時(shí)器產(chǎn)生的中斷,當CPU響應后,會(huì )自動(dòng)清除TF0,TF1這兩個(gè)定制器中斷請求,處理完后就跳出來(lái),回到原來(lái)的地方繼續執行。

對于外部中斷INT0,INT1,如果中斷類(lèi)型是邊沿觸發(fā),單片機會(huì )自動(dòng)清除中斷請求IE0,IE1
若是電平觸發(fā),如果有一個(gè)電平,使中斷產(chǎn)生后,這個(gè)電平仍然還保持著(zhù),那么這個(gè)電平還會(huì )觸發(fā)中斷,這樣CPU就死在中斷的石榴裙下出不來(lái)了。。。

(眾人:說(shuō)了那么多,沒(méi)例子你說(shuō)個(gè)J8)

例子來(lái)啦!用外部中斷來(lái)控制一個(gè)LED的亮滅。對了,外部中斷并不是單片機的每個(gè)引腳都能產(chǎn)生,標有INT0或INT1的才行,我們看看11F02E的引腳圖





中斷的引腳是INT0:P3^2和 INT1:P3^3,我們用邊沿觸發(fā)(由高電平變成低電平時(shí),就會(huì )觸發(fā))的中斷方式來(lái)控制LED,


當我們沒(méi)按下按鍵的時(shí)候,由于上拉電阻(不懂的問(wèn)百度姐姐哦~)的原因,P3^2是高電平,當我們按下按鍵后,P3^2的電平就會(huì )變低,這個(gè)從高變低的過(guò)程就會(huì )產(chǎn)生一個(gè)中斷(邊沿觸發(fā)),CPU會(huì )第一時(shí)間來(lái)相應這個(gè)中斷,看看是誰(shuí)看帖不回貼,看完帖子不評分,然后根據小七寫(xiě)的中斷處理程序去處理他!


O(∩_∩)O 。

程序怎么寫(xiě)呢?

#include
sbit led=P1^7; //定義LED
void zhongduan() interrupt 0 using 1 //聲明中斷處理函數,由于是外部中斷,所以 interrupt X 里X的值是 0
{
led=!led; //CPU響應中斷后會(huì )跑來(lái)這里執行(讓led的狀態(tài)取反)
}
void main() //主函數,程序執行的起點(diǎn)
{
EA=1; //允許CPU響應所有中斷
IT0=1; //設外部中斷0的響應模式為邊沿觸發(fā)
EX0=1; //允許中斷0產(chǎn)生中斷
while(1); //CPU不斷在這里死循環(huán),中斷產(chǎn)生后放下工作去響應中斷,處理完后然后再返回來(lái)繼續死循環(huán)
}

本文引用地址:http://dyxdggzs.com/article/201612/324143.htm

按下按鍵,CPU會(huì )跑去中斷處理函數執行,執行完中斷處理后返回原處繼續執行




(眾人:這個(gè)中斷跟我們前面學(xué)習的按鍵有什么區別么?)


當然有區別啦!雖然都是控制LED,但是按鍵是當CPU執行到按鍵檢測如 if(key==0) 語(yǔ)句后,才去改變LED的狀態(tài),如果沒(méi)有執行到,那么即使你按下按鍵單片機也不會(huì )響應的,也就是CPU主動(dòng)去問(wèn)按鍵有沒(méi)有被按下。而中斷呢,就是無(wú)論CPU在干嘛,只要觸發(fā)中斷后,CPU就會(huì )放下手中的活,第一時(shí)間趕回來(lái)處理,也就是按鍵被按下后主動(dòng)告訴CPU。。。就像windows系統的ctrl+alt+del組合鍵,你一按下這個(gè)組合鍵,無(wú)論系統在做什么,都會(huì )彈出任務(wù)管理器。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 單片機中斷詳

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>