<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è) > 嵌入式系統 > 設計應用 > 51單片機之寄存器-3.2單片機中斷

51單片機之寄存器-3.2單片機中斷

作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò ) 收藏
單片機中斷之前,先來(lái)個(gè)通俗的例子。假如今天有快遞來(lái),你要知道快遞什么時(shí)候到有兩種方式,第一種,每隔一分鐘你到樓下看快遞到了沒(méi),這樣總有一次能碰到快遞。第二種,快遞來(lái)了,給打電話(huà),然后你去取快遞。第一種稱(chēng)為查詢(xún)法,很明顯這種方式很浪費體力。第二種就是中斷了,比較輕松。這樣我們來(lái)詳細的探討一下這個(gè)過(guò)程。假如你在家里正在看電影,忽然電話(huà)響了通知你取快遞,于是你把電影暫停,下樓取快遞,然后回來(lái)繼續看電影,如下圖所示
圖1 日常生活中的中斷?

這個(gè)就是日常生活中的中斷場(chǎng)景。我們再概述一下這個(gè)過(guò)程,當你正在處理某件事情的時(shí)候(看電影),外界發(fā)生了比較急的事件請求(電話(huà)通知快遞到了), 你暫停當前的工作(看電影),轉而去處理這個(gè)比較急的事件(取快遞),處理完以后,再回到原來(lái)的地方,繼續原來(lái)的工作(看電影)。把前面這句話(huà)中的”你”換成CPU就是單片機的中斷過(guò)程了。電話(huà)鈴響就是中斷源用來(lái)通知你(CPU), 然后你(CPU)暫停當前事情,去取快遞。取快遞表示CPU進(jìn)入中斷服務(wù)程序,也就是你接受中斷請求源后決定做什么。日常生活中的中斷源多種多樣,比如水燒開(kāi)了,敲門(mén)聲,鬧鐘響了等等。同樣單片機中也有多種中斷源,STC89C52單片機有8種中斷源,外部中斷(外部中斷0-3),定時(shí)器中斷(0-2),串口中斷. 那么問(wèn)題又來(lái)了,既然這么多中斷源,如果同時(shí)發(fā)生應該處理哪個(gè)呢?比如電話(huà)響起的時(shí)候,家里的水也燒開(kāi)了,你該優(yōu)先處理哪個(gè),當然要把燒水的先關(guān)掉,這個(gè)可能產(chǎn)生危險,因此水燒開(kāi)了的優(yōu)先級要于取快遞。同樣在單片機中斷源也有優(yōu)先級高低之分,這樣同時(shí)向CPU發(fā)出請求的時(shí)候,CPU能判斷回復哪一個(gè)。而且這些中斷源可以通過(guò)軟件來(lái)設置,一共可以設置成四個(gè)優(yōu)先級。

本文引用地址:http://dyxdggzs.com/article/201611/319547.htm

如上表所示,你可以通過(guò)IPH,IP來(lái)設置中斷源的優(yōu)先級,比如Timer0通過(guò)設置PT0H,PT0為1,1,那么Timer0就是最高優(yōu)先級3了。這樣又有一個(gè)問(wèn)題,如果現在我把Timer1也設置成最高優(yōu)先級3,Timer0和Timer1同時(shí)向CPU發(fā)出請求,CPU該怎么辦呢?同樣在上表中給出了答案,通過(guò)相同優(yōu)先級內的查詢(xún)次序來(lái)解決。每個(gè)中斷都有兩個(gè)開(kāi)關(guān),一個(gè)總開(kāi)關(guān)和一個(gè)分開(kāi)關(guān)控制。CPU要能順利進(jìn)入中斷服務(wù)程序,每個(gè)中斷對應的兩個(gè)中斷允許控制位必須打開(kāi)。如上表中的Timer0中斷允許位ET0/EA,其中EA為總中斷開(kāi)關(guān),EA如果關(guān)閉,所有中斷均無(wú)效,另外ET0為分開(kāi)關(guān)。關(guān)于中斷中的中斷(中斷嵌套),我們后面討論,現在我們舉個(gè)例子體驗一下。

例3-2通過(guò)定時(shí)器0中斷來(lái)控制LED亮1秒,滅1秒

現在來(lái)分析一下這個(gè)例子,題目中說(shuō)要通過(guò)定時(shí)器中斷來(lái)控制LED0。既然是中斷,那么中斷誰(shuí)?CPU怎么知道發(fā)生中斷了,如何處理?很容易得出如下解決步驟:

(1) CPU正在干什么(看電影)

(2) 發(fā)生了什么比較急的事情(快遞來(lái)了)

(3) 如何通知CPU(電話(huà)鈴響)

(4) CPU如何處理(取快遞)

(5)處理完后回到原來(lái)的工作(看電影)

第1步,CPU正在干什么。這里可以讓CPU什么都不干,或者點(diǎn)亮另外一個(gè)LED1等待. 第2步,定時(shí)器計時(shí)并溢出。第3步,硬件TF0置1,通知CPU。第4步,CPU如何處理?就是指CPU進(jìn)入中斷服務(wù)程序。在中斷服務(wù)程序中,我們判斷如果定時(shí)1秒則點(diǎn)亮或者熄滅LED0. 這里需要注意定時(shí)器0的中斷號為interrupt 1,其他中斷號如下:

  • void MyInt0(void) interrupt 0;//外部中斷0
  • //MyInt0中斷函數名,可以自己修改,interrupt 0中斷號,不能修改,以下類(lèi)似
  • void MyTimer0(void) interrupt 1;//定時(shí)器0中斷
  • void MyInt1(void) interrupt 2;//外部中斷1
  • void MyTimer1(void) interrupt 3;//定時(shí)器1中斷
  • void MyUART(void) interrupt 4;//串口中斷
  • void MyTimer2(void) interrupt 5;//定時(shí)器2中斷
  • void MyInt2(void) interrupt 6;//外部中斷2
  • void MyInt3(void) interrupt 7;//外部中斷3
參考代碼如下:
  • #include "reg52.h"
  • void timer0_init(void);
  • sbit LED0=P1^0;//設置LED0引腳
  • sbit LED1=P1^6;//設置LED1引腳
  • unsigned char i=0;
  • void main(void)
  • {
  • ET0=1;//打開(kāi)定時(shí)器0中斷
  • EA=1;//打開(kāi)總中斷
  • timer0_init();//發(fā)生了什么事件
  • while(1)//CPU正在干什么?
  • {
  • LED0=0;
  • }
  • }
  • void timer0_init(void)
  • {
  • TMOD=0X01;//定時(shí)器模式選擇16bit
  • TH0=0X4C;
  • TL0=0X00;//TH0,TL0初始值
  • TR0=1;//開(kāi)啟定時(shí)器
  • }
  • void timer0_intrrupt () interrupt 1//定時(shí)器0中斷服務(wù)程序
  • {
  • TH0=0X4C;
  • TL0=0X00;
  • i++;
  • if(i==20)//定時(shí)次數達到20,那么總定時(shí)為1秒
  • {
  • i=0;
  • LED1=~LED1;
  • LED0=1;
  • }
  • }



評論


技術(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>