为什么走到P2=0x55;就不走了,小弟的分全在这了,希望各位高手给帮帮忙,在线等急急急急

/*********红外遥控**********/
#include<reg51.h>

void IRdelay(unsigned char x) ;
void delay_025ms(unsigned int i);
sbit IRIN=P3^2;
unsigned char date[4]; //细心

void main()
{
// unsigned char count=0;
IE |= 0x81; //允许总中断中断,使能 INT0 外部中断
TCON |= 0x01; //触发方式为脉冲负边沿触发

TMOD=0X09; //GATE=1
TH0=0;
TL0=0;

while(1)
{
P2=0x00;
delay_025ms(1000);
P2=0xff;
delay_025ms(1000);
while(date[2]!=0x45) ;
P2=0x55;
delay_025ms(1000);
P2=0xff;
delay_025ms(1000); //数码管显示数据
}
}
void INTO() interrupt 0 using 3
{
unsigned int i,j,time;

TR0=1;
EX0=0;
TH0=0;
TL0=0;
while(!IRIN) IRdelay(1) ; //跳过9ms的起始码
while(IRIN) ; //高电平计时时间 定时器计时
time=(unsigned int)TH0*256+TL0; //时间计算 多少个机器周期

if(time<4000||time>5500) //检测是否是有用信号
{
TR0=0;
EX0=1;
// date[2]=0x55;
return ;
}
for(i=0;i<4;i++) // 四组数据
{
for(j=0;j<8;j++) // 每组八位
{
TH0=0;
TL0=0;
while(!IRIN) ;
while(IRIN) ;
time=(unsigned int)TH0*256+TL0;
date[i]=date[i]>>1;
if(time>1000) date[i]=date[i]|0x80;
}
}
if(date[2]!=~date[3]) //数据是正确性验证
{
TR0=0;
EX0=1;
date[2]=0x30;
return ;
}
TR0=0;
// IE0=0; //外部中断标志位清零
EX0=1;

}
void IRdelay(unsigned char x) //x*0.14MS
{
unsigned char i;
while(x--)
{
for (i = 0; i<13; i++) {;}
}
}
void delay_025ms(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
for(j=1000;j>0;j--) ;
}

这程序是干嘛的你都没说还这么长,别人怎么有耐心看下去?你的意思是程序到那就停了还是怎么回事?追问

新手,不懂,见谅啊,红外遥控的程序,按一下遥控上面的电源键(0x45)就能执行下面的程序,现在不知怎么的走到P2=0x55这就停了,不往下面走了

追答

你按下按键了么?接收处理程序呢?这本来如果不按键或者处理错了或者键码错误都会到那里就不动的啊

追问

嗯,我之前输出过那个按键的值,没问题的,按键处理在终端中断里面,我另外写了,在那上面就可以,谢谢你这么耐心,分就给你作为感谢吧,

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-25
你…………坑爹呢……
相似回答