问题:外部中断到底如何正确配置?
解决:
第一步:看明白外部中断工作的内部框图
直接看第一个INT0,这就是外部中断0,从左往右,一共需要配置三个地方,分别是IT0,这里可以填写0/1,区别就是触发方式的差异,0的时候是低电平触发,1的时候是下降沿触发;再次是EX0要置1,这是中断允许控制位,,最后是IE0,也要置1,是CPU中断允许,也称之为总允许位。到此外部中断0就配置完成,外部中断1和外部中断0同理。文章来源:https://www.toymoban.com/news/detail-562512.html
补充:中断号也称中断源,计算机用来识别哪一种中断。
第二步:使用的完整结构
//在这里写一个初始化函数和服务函数框架
void INT0_init()
{
IT0=0;//选择低电平触发
EX0=1;//中断允许控制位打开
EA=1;//总中断打开,也就是CPU中断允许位打开
}
void INT0_exit() interrupt 0//这是中断服务函数的结构
{
//当外部中断被触发,CPU会从main函数直接跳出直接执行该程序。
}
具体实现:
#include <reg52.h>
sbit LED=P2^1;
sbit LED1=P2^2;
sbit KEY=P3^2;
sbit KEY1=P3^3;
typedef unsigned int u16;
void delay(u16 num)
{
while(num--);
}
void INT0_1_init()
{
IT0=0;//IT是触发方式选择,0是低电平触发,1是下降沿触发。
IT1=0;
EX0=1;
EX1=1;
EA=1;
}
void main()
{
INT0_1_init();
while(1)
{
}
}
void INT0_e() interrupt 0
{
delay(1000);
if(KEY==0)
LED=!LED;
while(!KEY);//针对按键不稳定,用这个可以有效提高按键稳定性,但是可能会影响运行。
}
void INT0_a() interrupt 2
{
delay(1000);
if(KEY1==0)
LED1=!LED1;
while(!KEY1);//针对按键不稳定,用这个可以有效提高按键稳定性,但是可能会影响运行。
}
注意:外部中断0和1,有两个区别,一个是中断号,分别是0和2,其次就是IT0和IT1名字的区别。文章来源地址https://www.toymoban.com/news/detail-562512.html
到了这里,关于关于51单片机的外部中断INT0和INT1的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!