增缩减扩
2019-10-07 00:16
采纳率: 12.5%
浏览 483

51单片机外部中断自动重复了一次

51单片机外部中断自动重复了一次

#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char
#define uint unsigned int

void delay(uint);
void breath();

uchar tr_1;

void main()
{
    EX0=1;
    IT0=1;
    EA=1;
    P0=0xfe;
    delay(4000);
    while(1)
    {
        tr_1=P0;
        P0=_crol_(P0,1);
        tr_1=P0;
        delay(4000);
    }
}

void breath()
{
    uint count_1;
    count_1=0;
    while(count_1<100)
    {
        P0=0xff;
        delay(100-count_1);
        P0=0x00;
        delay(count_1);
        count_1++;
    }
    while(count_1>0)
    {
        P0=0x00;
        delay(count_1);
        P0=0xff;
        delay(100-count_1);
        count_1--;
    }
    P0=tr_1;
}

void delay(uint t)
{
    uint count_1;
    while(t>0)
    {
        for(count_1=0;count_1<5;count_1++);
        t--;
    }
}

void led() interrupt 0
{
    uint count_1;
    count_1=0;
    while(count_1<1)
    {
        breath();
        count_1++;
    }
}

点击了外部中断按钮之后,应该只出现一次呼吸灯的亮和灭,可是实际上有时候是一次,有时候是两次。???求助

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 评论
    解决 无用
    打赏 举报
  • JonathanYan 2019-10-07 10:36

    按下按钮可能存在按键抖动,即由于硬件原因或者按键原因导致输出信号来回跳变,导致多次中断。
    一般识别到按钮按键后会延时50ms再检测,这样能避免按键抖动,只获得一次中断。
    楼主也可以查一下按键抖动相关的东西。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题