中断的概念:
CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生),那么CPU就会暂停当前的工作(A事件),去执行B事件(中断响应和中断服务),然后B事件做完之后,再回到原来的事件(A事件)中继续工作。(中断的返回)。
51单片机有5个中断源分别是:
1、INT0——外部中断0,由P3.2端口引入,低电平或下降沿引起。默认优先级最高
2、INT1——外部中断1,由P3.3端口引入,低电平或下降沿引起。默认优先级第二
3、T0——定时器/计数器0中断,由T0计数器计满回零引起。默认优先级第三
4、T1——定时器/计数器1中断,由T1计数器计满回零引起。默认优先级第四
5、TI/RI——串行口中断,串行端口完成一帧字符发送/接收后引起。默认中断优先级最低
今天为大家演示51单片机中外部中断0的使用示例:
下面是显示仿真电路,该电路的功能是单片机上电后数码管从A-G循环点亮,当连接P3^2(INT0)引脚的按键按下时,系统检测到外部中断请求信号,CPU执行的主程序断开,跳转去执行中断模块程序,中断模块的功能是数码管闪烁显示数字‘8’ 八次。然后CPU返回主程序断点继续执行A-G的循环点亮。
?
实现代码:
#include<reg51.h>
#include<intrins.h>//左移函数和右移函数包含头文件
#define uint unsigned int//把unsigned int 重新起名为uint
#define uchar unsigned char
uchar aa;
void delayms(uint xms){//延时函数
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--)
;
}
void main(){
EA=1;//开启总中断
EX0=1;//开启外部中断0
IT0=1;//把外部中断0设置为下降沿触发
aa=0x01;
while(1){
P0=aa;//把aa的值赋给P0
delayms(1000);//延时1s
aa=_crol_(aa,1);//把aa的值左移一位在赋给aa
}
}
void ex0_time()interrupt 1//中断函数
{
unsigned char a;
P0=0x00;//熄灭数码管
for(a=8;a>0;a--){//使数码管闪烁显示数字8(带小数点)8次
P0=0xff;//使数码管显示数字8
delayms(1000);//延时1s
P0=0X00;//熄灭数码管
delayms(1000);//延时1s
}
}
Protues仿真结果部分截图:
?
?
|