天天看點

單片機中斷 - 技術總結

部落客福利:100G+電子設計學習資源包!

​​http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect​​ --------------------------------------------------------------------------------------------------------------------------

一、簡述

    中斷,即CPU在正常執行程式的過程中,遇到外部/内部的緊急事件需要處理,暫時中斷(中止)目前程式的執行,而轉去為事件服務,待服務完畢,再傳回到暫停處(斷點)繼續執行原來的程式。

單片機中斷 - 技術總結

二、中斷請求标志控制寄存器TCON

單片機中斷 - 技術總結

三、中斷請求标志控制寄存器SCON

單片機中斷 - 技術總結

四、中斷允許寄存器IE

單片機中斷 - 技術總結

五、中斷函數

中斷函數定義的格式為:

函數類型 函數名 interrupt   n  using  m

其中:

    interrupt 後面的n 是中斷号。

    關鍵字using 後的m 是所選擇的寄存器組,取值範圍是0~3。

using m這部分通常可以省略,由編譯器自動選擇一個寄存組。

舉例:

void int0rupt() interrupt 0    

{        

    beep=0;//開蜂鳴器    

    while(P3_2!=1);//當P3^2口一直是低電平時,就一直告警

    beep=1;//關蜂鳴器

}

void 是函數類型表示空類型

int0rupt是函數名

interrupt 0中的0表示該函數是為外部中斷0服務的處理函數(當外部申請中斷0服務時調用此函數)

六、完整例子

1、效果:當按鍵按下時,蜂鳴器就會響,不松開就一直響,松開關閉。

    (主程式死循環,通過CPU中斷可以暫時中斷,先執行其他任務,然後再回來繼續執行被中斷的任務。例子中開啟外部中斷0,中斷方式為下降沿觸發,比如控制端口原來是高電平的,按下按鈕使控制端口變為低電平,高電平到低電平有個下降過程,下降沿觸發中斷0,調用中斷服務處理函數,蜂鳴器響。中斷服務處理函數有個循環檢測直到按鈕釋放才關閉蜂鳴器,退出中斷服務處理函數,控制端口恢複為高電平。)

2、Keil檔案結構

單片機中斷 - 技術總結

3、仿真電路

單片機中斷 - 技術總結
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit P3_2=P3^2;//将P3^2定義為中斷0控制口
sbit beep=P3^3;//将P3^3定義為蜂鳴器控制口
void main()
{
    EA=1;//開許總中斷
      EX0=1;//開外部中斷0
     IT0=0;//中斷觸發方式為低電平觸發
    while(1)  //主程式一直在死循環,外部中斷可以暫時執行中斷處理函數
    {}
}
/**********************************************************/
//函數名:int0rupt() interrupt 0
//功能:外部中斷0中斷響應程式 
//調用函數:
//輸入參數:
//輸出參數:
//說明:當P3^2口為低電平時進入響應程式 
/**********************************************************/
void int0rupt() interrupt 0//當P3^2鍵口為低電平時
{
    beep=0;//開蜂鳴器
    while(P3_2!=1);//當P3^2口置高檢測,就是按鈕不釋放蜂鳴器就一直響
    beep=1;//關蜂鳴器
}