項目宣傳網(wǎng)站模板百度最新版本2022
? ? ? ?中斷是指 CPU 在處理某一事件 A 時,發(fā)生了另一事件 B,請求 CPU 迅速去處理(中斷發(fā)生);CPU 暫時停止當前的工作(中斷響應(yīng)), 轉(zhuǎn)去處理事件 B(中斷服務(wù));待 CPU 將事件 B 處理完畢后,再回到原來事件 A 被中斷的地方繼續(xù)處理事件 A(中斷返回)
1、中斷結(jié)構(gòu)
?
中斷源 | 對應(yīng)的管腳 | 中斷號 | 中斷允許標志位 |
INT0 | P3.2 | 0 | EX0 |
T0 | P3.3 | 1 | ET0 |
INT1 | P3.4 | 2 | EX1 |
T1 | P3.5 | 3 | ET1 |
RI、TI | P3.0? P3.1 | 4 |
2、中斷相關(guān)寄存器
?(1)中斷允許控制
EA:中斷總開關(guān)
(2)中斷請求標志 TCON
IT0/IT1=0,電平觸發(fā);IT0/IT1=1,下降沿觸發(fā)
(T0,T1)定時器中斷0/1:TF0,TF1 ——中斷請求控制位? ? ? ET0,ET1——中斷允許標志位
(INT0,INT1)外部中斷0/1:IT0,IT1——中斷請求控制位? ? ??EX0,EX1——中斷允許標志位
3、外部中斷配置?
51 單片機發(fā)生中斷必須要滿足以下3個條件
①中斷源有中斷請求;
②此中斷源的中斷允許位為 1;
③CPU 開中斷(即 EA=1)。
比如我們配置外部中斷 0,對應(yīng)的配置程序如下:
EA=1;//打開總中斷開關(guān)
EX0=1;//開外部中斷 0
IT0=0/1;//設(shè)置外部中斷的觸發(fā)方式? ? ? ?0——電平觸發(fā)? ? 1——下降沿觸發(fā)
void exti0_init(void)
{
????????IT0=1;//跳變沿觸發(fā)方式(下降沿)
????????EX0=1;//打開 INT0 的中斷允許
????????EA=1;//打開總中斷
}?
當觸發(fā)中斷后即會進入中斷服務(wù)函數(shù),外部中斷 0 中斷服務(wù)函數(shù)如下:
void exti0() interrupt 0? ?//外部中斷 0 中斷函數(shù)?
{
//執(zhí)行所需的功能
}
?注:interrupt 是一個關(guān)鍵字,表示 51 單片機中斷,后面的“0”是中斷號
外部中斷實驗:?使用獨立按鍵 K3 控制D6指示燈亮滅
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
void delay_10us(u16 ten_us){
?? ?while(ten_us--);
}
sbit KEY3=P3^2;
sbit LED6=P2^5;//外部中斷0的配置函數(shù)
void exti0_init(){
?? ?EA=1;//打開總開關(guān)
?? ?EX0=1;//中斷允許位? ? ? ? ?EX0—外部中斷0允許位 ? EX1—外部中斷1允許位
?? ?IT0=1;//下降沿觸發(fā)有效
}
void main(){
?? ?while(1){
?? ??? ?exti0_init();
?? ?}
}
//外部中斷0的服務(wù)函數(shù)
void exti0() interrupt 0{
?? ?delay_10us(1000);? //按鍵消抖
?? ?if(KEY3==0){
?? ??? ??? ?LED6=!LED6;
?? ?}
}