写1838红外解码程序时,遇到问题。经调试,有以下结论:
1.用外部中断0检测按键,结果通过两个数码管动态扫描显示。主函数始终在display(),即动态扫描。
2.外部中断不触发时,程序运行正常。
3.外部中断触发后,程序能从中断开始一直运行到中断最后一行。但是最后一行运行完后,程序停留在这里,不返回主函数。(中断函数开始EX0=0;末尾出有EX0=1)。
4.一次外部中断结束后,再按下一个键,能够再次进入中断,现象同3。
所以现在想问问各位,什么情况下会导致单片机有这种好像一直停留在中断函数函数尾,不返回主函数的现象?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
void wbzdf() interrupt 0 //外部中断函数
{
uchar count,m,n;
EX0=0;
IE0=0;
while(!hwir); //9秒的低位引导码
while(hwir); //4.5秒的高位引导码
for(m=0;m<4;m++)
{
for(n=0;n<8;n++)
{
while(!hwir); //等低电平结束
while(hwir) //计算高电平时间
{
delay(1);
count++;
}
ir[m]=ir[m]>>1;
if(count>5) //若超过1.12ms,赋1
{
ir[m]=ir[m]|0x80;
}
count=0;
}
}
ir[4]=ir[2]&0x0f; //为ir[4]和ir[5]赋值
ir[5]=ir[2]>>4; //9秒的低位引导码
display(0x01,0x04);
// P1=ir[4];
delay(2000L);
P1=~P1;
EX0=1;
}
本来的中断函数经过调试以后被我改成这样了,就是想知道程序执行的过程。原来的程序和这个的结果是一样的,都是返回不了主函数。求教。
你的意思是程序可能会在这里一直等待,跳不出去吗?如上面所说,中断函数能执行到最后。
一周热门 更多>