STC15单片机外部中断仅上升沿触发的方法

STC15系列单片机的外部中断0(INT0)和外部中断1(INT1)的触发有两种方式,上升沿和下降沿均可触发方式和仅下降沿触发方式。在实际应用中,有时候需要上升沿触发。这时有两种方案可以解决。
1.将触发方式设置成仅下降沿触发。当外部电路产生一个上升沿时,通过硬件电路加一个三极管进行反向变成下降沿。
2.这种方法不需要改变硬件电路。将触发方式设置成上升沿和下降沿均可触发方式。外部中断产生一个上升沿时,进入中断服务函数,这时在中断服务函数里做进一步处理,检测当前INT0的电平状态。如果是高电平,则判断为上升沿。如果是低电平,则判断为是下降沿。
注意(很重要!): 进入中断服务函数后,一定要延时几个毫秒再去做电平检测。因为不管是上升沿还是下降沿,都不可能是在一个瞬间完成的,中间会经历一个从高(低)到低(高)的过程。
如果进入中断服务函数就立刻检测,可能当时电平还没有达到满足高或低电平的默认电压值或者处于高和低之间的临界电压状态,很可能出现误判的现象。这样做的目的是让跳变后的电平达到稳定状态再检测,说白了就是一个去抖动的过程。
下面把初始化和中断服务函数的代码贴出来:

void Initial_INT0(void)
{
        INT0=0;
        IT0=0;      // 设置成上升沿和下降沿均触发
        EX0=1;      //使能INT0中断
        EA=0;
}

void exint0() interrupt 0  //外部中断入口
{
        delay_ms(50);       //延时消抖
        if(INT0==1)     //如果检测到INT0=1,则判断为上升沿
        {
                led=0;
                delay_ms(500);
                led=1;
        }                                 
        else
            led=1;
}

在实际做东西的过程中遇到的一个小问题,希望对你有帮助。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值