标题:
51单片机红外中断INT0多次进入怎么解决
[打印本页]
作者:
15576739794
时间:
2019-1-24 14:46
标题:
51单片机红外中断INT0多次进入怎么解决
部分源代码:
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;
}
作者:
xuyaqi
时间:
2019-1-24 15:47
可以进中断后,EA=0;禁止中断,中断处理完后开中断,EA=1;
作者:
15576739794
时间:
2019-1-24 15:54
应该具体说是按一次红外遥控器的按键 多次进入了这个中断0
作者:
feng168
时间:
2019-1-24 16:14
好像没有清中断标志位
作者:
zgf123456
时间:
2019-1-24 19:01
楼上说的对
作者:
周超然
时间:
2019-1-25 08:45
普中板子,有红外代码,测试就知道了
作者:
15576739794
时间:
2019-1-25 14:01
代码我测试过了 每按一次按键都要进入3次左右的中断0,中断标志位IE不是响应中断后自动清零的吗。
还有进入中断的时候关闭总中断EA 再执行完之后再开启 之后就不会再进入中断0了 怎么回事
作者:
NMT1999
时间:
2022-7-18 14:50
xuyaqi 发表于 2019-1-24 15:47
可以进中断后,EA=0;禁止中断,中断处理完后开中断,EA=1;
这样试过了 也不行
作者:
zhxiufan
时间:
2022-7-18 15:57
你不退出中断就不会重入同一中断的,所以不会出现你说的情况,一般红外解码都是进入外部中断后知道解码完成才退出。
作者:
pcbboy
时间:
2022-7-18 16:56
进了中断建立标志位就退出来,用普通程序去判断。
作者:
非凡科技
时间:
2022-7-18 20:15
中断最好不要用死等
作者:
univers
时间:
2022-7-19 17:19
一次只能干一次,干完这次再来下一次。不过一天可以干很多次。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1