找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2296|回复: 11
打印 上一主题 下一主题
收起左侧

51单片机红外中断INT0多次进入怎么解决

  [复制链接]
跳转到指定楼层
楼主
ID:463967 发表于 2019-1-24 14:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
部分源代码:


void ReadIr() interrupt 0
{
        uchar j,k;
        uint err;

        Time=0;
                                                 
        delay(700);        //7ms
        if(IRIN==0)                //确认是否真的接收到正确的信号
        {         
               
                err=1000;                                //1000*10us=10ms,超过说明接收到错误的信号
                /*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时
                侯,程序死在这里*/       
                while((IRIN==0)&&(err>0))        //等待前面9ms的低电平过去                 
                {                       
                        delay(1);
                        err--;
                }
                if(IRIN==1)                        //如果正确等到9ms低电平
                {
                        err=500;
                        while((IRIN==1)&&(err>0))                 //等待4.5ms的起始高电平过去
                        {
                                delay(1);
                                err--;
                        }
                        for(k=0;k<4;k++)                //共有4组数据
                        {                               
                                for(j=0;j<8;j++)        //接收一组数据
                                {

                                        err=60;               
                                        while((IRIN==0)&&(err>0))//等待信号前面的560us低电平过去
                                        {
                                                delay(1);
                                                err--;
                                        }
                                        err=500;
                                        while((IRIN==1)&&(err>0))         //计算高电平的时间长度。
                                        {
                                                delay(10);         //0.1ms
                                                Time++;
                                                err--;
                                                if(Time>30)
                                                {
                                                        return;         //因为位1信号最长持续时间也只为2.25ms  超过3ms肯定接收失败
                                                }
                                        }
                                        IrValue[k]>>=1;         //k表示第几组数据
                                        if(Time>=8)                        //如果高电平出现大于565us,那么是1
                                        {
                                                IrValue[k]|=0x80;
                                        }
                                        Time=0;                //用完时间要重新赋值                                                       
                                }
                        }
                }
                if(IrValue[2]!=~IrValue[3])
                {
                        return;
                }
        }
        keystate=1;                       
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:94031 发表于 2019-1-24 15:47 | 只看该作者
可以进中断后,EA=0;禁止中断,中断处理完后开中断,EA=1;
回复

使用道具 举报

板凳
ID:463967 发表于 2019-1-24 15:54 | 只看该作者
应该具体说是按一次红外遥控器的按键 多次进入了这个中断0  
回复

使用道具 举报

地板
ID:469900 发表于 2019-1-24 16:14 | 只看该作者
好像没有清中断标志位
回复

使用道具 举报

5#
ID:151626 发表于 2019-1-24 19:01 | 只看该作者
楼上说的对
回复

使用道具 举报

6#
ID:449525 发表于 2019-1-25 08:45 | 只看该作者
普中板子,有红外代码,测试就知道了
回复

使用道具 举报

7#
ID:463967 发表于 2019-1-25 14:01 | 只看该作者
代码我测试过了 每按一次按键都要进入3次左右的中断0,中断标志位IE不是响应中断后自动清零的吗。


还有进入中断的时候关闭总中断EA 再执行完之后再开启   之后就不会再进入中断0了  怎么回事
回复

使用道具 举报

8#
ID:509316 发表于 2022-7-18 14:50 | 只看该作者
xuyaqi 发表于 2019-1-24 15:47
可以进中断后,EA=0;禁止中断,中断处理完后开中断,EA=1;

这样试过了 也不行
回复

使用道具 举报

9#
ID:121859 发表于 2022-7-18 15:57 | 只看该作者
你不退出中断就不会重入同一中断的,所以不会出现你说的情况,一般红外解码都是进入外部中断后知道解码完成才退出。
回复

使用道具 举报

10#
ID:25310 发表于 2022-7-18 16:56 | 只看该作者
进了中断建立标志位就退出来,用普通程序去判断。
回复

使用道具 举报

11#
ID:101869 发表于 2022-7-18 20:15 来自手机 | 只看该作者
中断最好不要用死等
回复

使用道具 举报

12#
ID:382454 发表于 2022-7-19 17:19 | 只看该作者
一次只能干一次,干完这次再来下一次。不过一天可以干很多次。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表