简述
本文主要介绍了单片机的外部中断,总共有四个外部中断,本次讲解中用到了外部中断0和外部中断1。要使用外部中断,首先要在主函数中初始化,所以要写初始化函数,和中断服务函数。(视频中有一个错误,在下文外部中断初始化中指出来啦)
1 外部中断初始化
外部中断0初始化
void Int0_Init(void)
{
EA = 1; //打开总中断
EX0 = 1; //允许外部中断0触发中断
IT0 = 1; //设置外部中断0触发方式 方式为下降沿触发
}
外部中断1初始化(这里IT1是等于0的,因为是低电平触发,视频中没有把1改为0)
void Int1_Init(void)
{
EA = 1; //打开总中断
EX1 = 1; //允许外部中断1触发中断
IT1 = 0; //设置外部中断1触发方式 方式为低电平触发
}
把初始化函数在写main.c的主函数中
void main()
{
Int0_Init(); //外部中断0初始化
Int1_Init(); //外部中断1初始化
while(1)
{
Key_function(); //按键函数
Monitor_function(); //监测函数
Display_function(); //显示函数
Manage_function(); //处理函数
}
}
2 外部中断服务函数,注意中断号是不一样的
外部中断0服务函数,现象是按次按键灯的状态会反转
void Int0_IRQHandler(void) interrupt 0
{
LED = ~LED;
}
外部中断1服务函数,现象是按下按键不松手,灯会闪烁,不加延时也会反转,不过太快了人眼看不出来,
void Int1_IRQHandler(void) interrupt 2
{
LED = ~LED;
Delay_function(500); //延时0.5秒
}
3 外部中断的引脚和现象
外部中断0的引脚是P3.2 外部中断1的引脚是P3.3
因为是用按键控制LED灯的,所以按键的引脚要对应外部中断的引脚
若按下第一个按键,灯亮,再按一次,灯灭
若长按第二个按键,灯以0.5秒的频率闪烁。