|
发表于 2019-10-13 23:13:00
|
显示全部楼层
一点也不高,效果非常好.
这个是解码程序.你参考一下.每50uS中断扫一次IO.
IoState =IR_RXD;
if(IoState){
if(TimeH<250)TimeH++;
}
else{
if(TimeL<250)TimeL++;
}
if((!IoState)&&(UpState)){ //下降沿
if(Task==0){ //收同步头
if((TimeL<=(228+50))&&(TimeL>=(228-50))){
if((TimeH<=(113+30))&&(TimeH>=(113-30))){
BitCount=0;
ByteCount=0;
Task++;
}
else if((TimeH<=(56+20))&&(TimeH>=(56-20))){
if(IrTime !=0){
IrTime=30;
if(IrCode !=0xFF)IrOkFlag=1;
}
}
}
}
else if(Task==1){ //收数据
if((TimeL<=(14+5))&&(TimeL>=(14-5))){
if((TimeH<=(14+5))&&(TimeH>=(14-5))) RxData[ByteCount] &= ~(1<<BitCount);
else if((TimeH<=(41+10))&&(TimeH>=(41-10))) RxData[ByteCount] |= (1<<BitCount);
else Task=0;
BitCount++;
if(BitCount>=8){
BitCount=0;
ByteCount++;
if(ByteCount>=4){
ByteCount=0;
if((((RxData[0]==0x00) && (RxData[1]==0xBF)) || (SET_IR==0)) && ((RxData[2]^RxData[3]) ==0xFF)){
IrCode=RxData[2];
IrLockCode=IrCode;
IrOkFlag=1;
IrTime=30;
}
Task=0;
}
}
}
else{
Task=0;
}
}
else{
Task=0;
}
TimeH=0;
TimeL=0;
}
UpState=IoState; |
|