关于51单片机的外部中断INT0和INT1

问题:外部中断到底如何正确配置?

解决:

第一步:看明白外部中断工作的内部框图

直接看第一个INT0,这就是外部中断0,从左往右,一共需要配置三个地方,分别是IT0,这里可以填写0/1,区别就是触发方式的差异,0的时候是低电平触发,1的时候是下降沿触发;再次是EX0要置1,这是中断允许控制位,,最后是IE0,也要置1,是CPU中断允许,也称之为总允许位。到此外部中断0就配置完成,外部中断1和外部中断0同理。

补充:中断号也称中断源,计算机用来识别哪一种中断。
第二步:使用的完整结构
//在这里写一个初始化函数和服务函数框架
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名字的区别。

  • 6
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值