本帖最后由 ningling_21 于 2010-3-22 13:40 编辑
/****************************************************************************************** *函数名称 : void ir_decode(void) mcu=89s52,12Mhz *函数功能描述: 外中断0服务函数-红外解码 *入口参数 : 无 *返回信息 : dcode[0],dcode[1],dcode[2],dcode[3]; ******************************************************************************************/
void ir_decode(void)interrupt 0
{
uchar j,temp,i=0;
EA=0;
//----------------------检测引导码9MS 低电平
for(i=0;i<11;i++)
{ dlay_880us();
if(r_ed)
{
led2=~led2; //解码出错,LED亮
led1=~led1;
return; }
}
while(!r_ed); //----------------------检测引导码4.5MS 高电平
dlay_4d5ms(); //4.5ms
dlay(118); //241us
while(r_ed);
///////////////////////////////////////
for(j=0;j<4;j++) //接收红外数据共4个字节
{
for(i=0;i<8;i++) //每个字节8位
{
while(!r_ed);
dlay_880us(); //延时880US,后判断红外检测引脚状态
if(r_ed) //为1,这个位是1,为0这个位是0
{
temp|=0x80;
dlay_nms(1);//1000us
}
else //为0
{
temp&=0x7f;
}
temp>>=1;
}
dcode[j]=temp;
} //----------------------判断接收到的数据是否正确
if((((dcode[0]|dcode[1])==0XFF))||((dcode[2]|dcode[3])==0XFF))
{
ir_flag=1;
led1=1; //解码正确 ir_flag=1,led熄灭
led2=1;
EA=1;
}
else
{
led1=0;
led2=0;
ir_flag=0; //解码出错时 ir_flag=0;
EA=1;
}
} |