部落客福利: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;//關蜂鳴器
}