void ir(void) interrupt 0
{
// uchar i;
Tc=TH0*256+TL0;//
TH0=0;//
TL0=0;//定时中断重新置零
if(Tc>14000&&Tc<30000)//0=3090 ,1=6220 re=31037 33m//0=1123,1=2263,re=12076 12m/
{a=0;b=0;it=0;} //找到启始码
else if((Tc>2000)&&(Tc<2500)) {Im[it/8]=Im[it/8]>>1|0x80;it++;} //
else if((Tc>900)&&(Tc<1400)) { Im[it/8]=Im[it/8]>>1&0X7F;it++;}//
else if((Tc>11000)&&(Tc<=13000)&&(time>(sttime*4/5))){time=sttime;a++;if(a>=6){a=6;b++;if(b>=3){b=0;if(Im[2]==0x46||Im[2]==0x47) it=32; }} } //a是调整识别长按和短按的时间,b是数字叠加的时间,time是识别错误的红外码重复码 主程序自减 stime固定数
if(it>31){it=0;for(i=0;i<=3;i++){irc[i]=Im[i];}if((irc[0]==0x80)&&(irc[1]==0xe7))irok=1;}
}
{
// uchar i;
Tc=TH0*256+TL0;//
TH0=0;//
TL0=0;//定时中断重新置零
if(Tc>14000&&Tc<30000)//0=3090 ,1=6220 re=31037 33m//0=1123,1=2263,re=12076 12m/
{a=0;b=0;it=0;} //找到启始码
else if((Tc>2000)&&(Tc<2500)) {Im[it/8]=Im[it/8]>>1|0x80;it++;} //
else if((Tc>900)&&(Tc<1400)) { Im[it/8]=Im[it/8]>>1&0X7F;it++;}//
else if((Tc>11000)&&(Tc<=13000)&&(time>(sttime*4/5))){time=sttime;a++;if(a>=6){a=6;b++;if(b>=3){b=0;if(Im[2]==0x46||Im[2]==0x47) it=32; }} } //a是调整识别长按和短按的时间,b是数字叠加的时间,time是识别错误的红外码重复码 主程序自减 stime固定数
if(it>31){it=0;for(i=0;i<=3;i++){irc[i]=Im[i];}if((irc[0]==0x80)&&(irc[1]==0xe7))irok=1;}
}