導航:首頁 > 操作系統 > 51單片機中斷控制教程

51單片機中斷控制教程

發布時間:2025-07-21 10:24:33

⑴ 51單片機中斷筆記

51單片機中斷筆記

一、中斷的概念

中斷是指在CPU處理某一事件時,另一事件請求CPU迅速去處理,CPU中斷當前的工作,轉去處理該請求(中斷響應和中斷服務),待處理完畢後,再回到原來被中斷的地方繼續處理原事件(中斷返回)。這一過程類似於在看電視時,突然蹦出一個廣告,廣告播放完畢後繼續之前的節目。

二、基本中斷源

51單片機中的5個重要中斷源包括:

三、中斷結構圖

(此處插入中斷結構圖,markdown格式如下)

四、特殊功能寄存器

51單片機中與中斷相關的特殊功能寄存器主要包括:

  1. 中斷控制寄存器(IE)

    EA:中斷總開關。EA=1時,CPU開放中斷;EA=0時,CPU屏蔽所有中斷申請。

    ELVD:低壓檢測中斷允許位。ELVD=1時,允許低壓檢測中斷;ELVD=0時,禁止低壓檢測中斷。

    EADC:ADC中斷允許位。EADC=1時,允許ADC中斷;EADC=0時,禁止ADC中斷。

    ES:串列口1中斷允許位。ES=1時,允許串列口1中斷;ES=0時,禁止串列口1中斷。

    ET1:定時/計數器T1的溢出中斷允許位。ET1=1時,允許T1中斷;ET1=0時,禁止T1中斷。

    EX1:外部中斷1中斷允許位。EX1=1時,允許外部中斷1中斷;EX1=0時,禁止外部中斷1中斷。

    ET0:定時/計數器T0的溢出中斷允許位。ET0=1時,允許T0中斷;ET0=0時,禁止T0中斷。

    EX0:外部中斷0中斷允許位。EX0=1時,允許外部中斷0中斷;EX0=0時,禁止外部中斷0中斷。

  2. 中斷優先順序控制寄存器(IP)

    PT1:定時器1中斷優先順序控制位。PT1=1時,定時器1中斷為最高優先順序;PT1=0時,定時器1中斷為最低優先順序。

    PX1:外部中斷1優先順序控制位。PX1=1時,外部中斷1為最高優先順序;PX1=0時,外部中斷1為最低優先順序。

    PT0:注意此處應為「定時器0中斷優先順序控制位」,而非原文中的「定時器1中斷優先順序控制位」。PT0=1時,定時器0中斷為最高優先順序;PT0=0時,定時器0中斷為最低優先順序。

    PX0:外部中斷0優先順序控制位。PX0=1時,外部中斷0為最高優先順序;PX0=0時,外部中斷0為最低優先順序。

  3. TCON:定時器/計數器控制寄存器

    TF1:T1溢出中斷標志。TF1=1時,表示T1計數器溢出;TF1=0時,表示T1計數器未溢出。

    TR1:定時器1運行控制位。TR1=1時,啟動定時器1;TR1=0時,關閉定時器1。

    TF0:T0溢出中斷標志。TF0=1時,表示T0計數器溢出;TF0=0時,表示T0計數器未溢出(原文中「TF10計數器未溢出」應為筆誤,應為「TF0計數器未溢出」)。

    TR0:定時器0運行控制位。TR0=1時,啟動定時器0;TR0=0時,關閉定時器0。

    IE1:外部中斷1中斷請求標志位。

    IT1:外部中斷1觸發方式選擇位。IT1=1時,下降沿觸發;IT1=0時,低電平觸發。

    IE0:外部中斷0中斷請求標志位。

    IT0:外部中斷0觸發方式選擇位。IT0=1時,下降沿觸發;IT0=0時,低電平觸發。

  4. SCON:串口控制寄存器

    SM0、SM1:串口工作模式選擇位。

    SM2:多機通信控制位。

    REN:串列接收允許位。

    TB8:發送數據的第9位(奇偶校驗位)。

    RB8:接收數據的第9位(奇偶校驗位)。

    TI:發送完成中斷標志位。發送完數據後由硬體置1,進入中斷程序後需手動軟體清0。

    RI:接收完成中斷標志位。接收完數據後由硬體置1,進入中斷程序後需手動軟體清0。

  5. PCON:電源控制寄存器

    SMOD:波特率選擇位。SMOD=1時,方式1、2、3的波特率加倍。

  6. AUXR:輔助寄存器

    T(0/1/2)x12:定時器(0/1/2)速度控制位。為0時,定時器是傳統8051速度,12T;為1時,定時器是傳統8051速度的12倍,1T。

    UART_M0x6:串口1模式0的通信速度設置位。為0時,串口1模式0是傳統8051單片機串口速度,12T;為1時,串口1模式0是傳統8051單片機串口速度的6倍,2T。

    T2R:定時器2允許控制位。為1時,允許定時器2工作。

    T2_C/~T:控制定時器2作為定時器還是計數器。為0時作為定時器,為1時用作計數器。

    EXTRAM:內部/外部RAM存取控制位。0時,允許使用邏輯上在片外、物理上在片內的擴展RAM;1時,禁止使用邏輯上在片外、物理上在片內的擴展RAM。

    SIST2:串口1(UART1)選擇定時器2作波特率發生器的控制位。為0時,選擇定時器1作為串口1(UART1)的波特率發生器;為1時,選擇定時器2作為串口1(UART1)的波特率發生器,此時定時器1得到釋放,可以作為獨立定時器使用。

五、定時器/計數器

  1. 計數

    計數是指對外部事件進行計數,外部事件的發生以輸入脈沖的形式表示。計數功能的實質是對外部脈沖進行計數,在單片機中對應引腳T0和T1兩個脈沖輸入端。外部輸入的脈沖在負跳變時有效(即外部脈沖由1變化到0),計數器加1。

  2. 定時

    定時器是通過計數器的計數來實現的,不過定時器的計數脈沖來自單片機的內部,因此定時器的實質是對內部脈沖的計數。

    根據單片機晶振、所選TMOD的工作方式、所要定的時間,來確定TH0和TL0所要賦予的初值。以12MHz晶振、工作方式1、16位計數器為例,設所定時間為Xus(16位計數器最大數65536,即65536us,若所定時間大於65535,則要用if語句控制,現假設X<65535):

    時鍾周期的時間:t=1/12MHz=1/12us

    機器周期的時間:T=12*1/12=1us

    因為每經過一個機器周期計數器+1,所以計數器+1經過的時間為1us。

    若所定時間為X,則要求經過Xus中斷響應,又因為16位計數器要全部置1(即達到65535+1)後,中斷才會響應,所以初值=(65536-X),將初值轉化為16進制碼,分別賦給TH0和TL0。

    例如:所定時間5ms,則:

    初值=(65536-5000)=60536=EC78TH0=

⑵ 51單片機如何用一個按鍵控制一段程序的運行與停止

在51單片機編程中,通過一個按鍵實現程序的運行與停止功能,操作步驟如下:

首先,你需要為你的項目創建一個新的文件,這是基礎步驟,它將承載你的代碼邏輯(

1、在51單片機項目中,新建一個文件用於存放程序代碼。

)。

接著,配置你的按鍵和LED。假設你選擇的按鍵S1連接到P3的第2引腳,當按鍵按下時,可以通過編程使其對應P1的第5引腳點亮LED(

2、按鍵S1的輸入設置為P3^2,LED的控制輸出則連接到P1^5,以便通過按鍵操作來控制LED的亮滅。

)。

然後,進入主函數的編寫,這是程序的核心部分(

3、在C語言中,設計並實現主函數,用於程序的流程式控制制。

)。通常,我們會用一個無限循環(

4、使用while(1){}結構創建循環,以實現程序的持續運行。

)來模擬程序的基本運行狀態。

在主循環中,你可以選擇輸出不同的效果。然而,關鍵在於如何處理按鍵事件。當按鍵S1被按下時,程序會檢測到這一事件,並執行相應的操作(

5、在主循環中,設置按鍵S1的中斷或事件處理,使其在按下時控制LED關閉,程序開始運行。

)。

再次按下按鍵,會觸發中斷,使得LED重新點亮,程序暫停(

6、再次按下S1,中斷執行,LED重新點亮,程序進入暫停狀態,等待下一次按鍵指令。

)。

通過這種方式,一個簡單的按鍵就能控制51單片機程序的運行與停止,實現了用戶與硬體的交互。

⑶ 51單片機ec11編碼器中斷法

配置一個1ms定時器,並設置為自動清零模式,配置好後記得打開定時器中斷。首先要開啟定時器TIM3,我們使用這個 HAL_TIM_IC_Start_IT(htim, Channel);啟動定時器。
使用定時器回調函數
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
在裡面編寫上面的程序,因為我們將B相接在PA7引腳,所以我們使用switch case語句進行判斷引腳電平,如果單片機檢測到A相為高電平就會進入這個中斷判斷B相電平,低電平為反轉,高電平極為正轉(程序中的cnt為計數作用)。

⑷ 51單片機中的外部中斷有什麼作用

可以打個比方,每天上班你都隨時需要知道你同事的工作進度情況,你是希望你不停地打個電話去問「你做完了嗎」,還是希望他做完了主動打個電話給你講「我做完了,我們談談吧」。這就是中斷的意義,在不需要的時候不影響處理 器做其它的事情,提高效率,增強程序的實時性。

⑸ 51單片機如何用一個按鍵控制一段程序的運行與停止

1、創建項目文件。

6、當按下一個按鍵時,關閉燈,整個程序運行,再按一次,程序停止。

⑹ 關於51單片機的外部中斷使用方法

使用方法:
單片機的P2.5,P2.6,P2.7口分別接三位動態數碼管的位選端,P0口接動態數碼管的段選端。然後,P1.0口接一個電阻串聯一個LED燈然後接地,電阻取200~470歐之間就行,是一個限流電阻。
中斷用的是外部中斷0,要觸發中斷的時候,就用一根杜邦線一端接地,一端接到單片機的P3.2口就行,這樣,就滿足了你的要求了。
外部中斷的觸發方式有低電平觸發和下降沿觸發。到底是那種觸發方式,要設置中斷允許寄存器中IT0的值,如果IT0=0,像我寫的程序,就是低電平觸發,如果為1,就是下降沿觸發。
燈不是一定要接到P3.2口上的。中斷要執行的任務是在中斷函數中寫代碼控制的,就像我寫的代碼中,你只需要控制LED燈接的那個IO口就行了。
代碼如下:
#include
#define
uchar
unsigned
char
sbit
led=P1^0;
uchar
code
an[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar
code
wei[3]={0x06,0x05,0x03};
void
delay(uchar
c);
void
ini_()

//初始化函數,設置中斷觸發方式,開中斷
{

EA=1;

IT0=0;

EX0=1;
}
void
main()
{
uchar
i;

ini_();
led=0;

//由於單片機上電之後,所有的IO口默認是高電平,而要求是開始不亮,所以要將P1.0口開始設置為低電平。

while(1)

{
for(i=0;i<3;i++)

動態數碼管閃爍
{
P2=wei[i];
P0=an[i];
delay(35);
}
}
}
void
led_()
interrupt
0

//外部中斷0函數,中斷函數不需要申明
{
uchar
i;
led=1;

//在中斷中讓燈亮起來
while(1)
{
for(i=0;i<3;i++)
{
P2=wei[i];
P0=an[i];
delay(1);
}
}
}
void
delay(uchar
c)
{
uchar
a,b;
for(c;c>0;c--)
for(a=38;a>0;a--)
for(b=80;b>0;b--);
}

閱讀全文

與51單片機中斷控制教程相關的資料

熱點內容
打開桌面圖標加密 瀏覽:7
浪潮伺服器能做什麼 瀏覽:178
javajvm源碼 瀏覽:500
雲伺服器無法安裝愛快 瀏覽:910
安卓機用什麼手機管家 瀏覽:302
懷舊服大伺服器什麼意思 瀏覽:208
android免費解壓縮軟體 瀏覽:771
佰澤app怎麼樣 瀏覽:72
eclipse命令行 瀏覽:322
微信免簽約php源碼 瀏覽:888
江淮同悅cd怎麼調文件夾 瀏覽:46
戴爾伺服器怎麼接電源 瀏覽:468
dayz好玩的國外伺服器地址 瀏覽:523
安卓手機輸入什麼就沒信號了 瀏覽:590
手機上已卸載的app怎麼找回來 瀏覽:643
為什麼點贊少的伺服器就沒人 瀏覽:128
伺服器sensor干什麼用的 瀏覽:312
抖音app互動信息在哪裡 瀏覽:441
王者榮耀至尊寶什麼時候開伺服器 瀏覽:230
如何導出app上的教學視頻 瀏覽:897