www.pudn.com > DDS485.rar > infrarereceive.c
#include#include #include #include void infrarereceive(void) { unsigned char i,InData; bit k,j,DataRch; i=InData=0; k=j=DataRch=0; //InitDelay(1); time0fg=0; TR1=1; //TR0=0; EX1=0; while(!time0fg); //time0fg=0; while(i<8) { InData>>=1; if(HwRxd) { //HwTxd=0; InData|=0x80; j=~j; } i++; time0fg=0; while(!time0fg); } if(HwRxd) { DataRch=1; } else { DataRch=0; } time0fg=0; while(!time0fg); //TR1=0; //TR0=1; if(j==DataRch) { k=1; } else { k=0; } if(SendEndFg)//----------------------------------------------------------上次数据是否发送完毕? { // ComInceptTime=3;//------------------------------------------------如果两秒内没有接收结束自动中断接收并清除已经接收的数据 //k=1; //HwTxd=0; if(k) { //HwTxd=0; if(InfraredBufDptr<50) { if(InfraredBufDptr==0)//--------------------------------------数据缓冲区地址指针是否为零 { if(InData==0x68)//----------------------------------------数据保存到缓冲区---缓冲区的第一个数据是否等于0x68 { //HwTxd=0; InceptBuf[0]=InData; InfraredBufDptr++;//----------------------------------缓冲区地址累加 } else { InfraredBufDptr=0;//----------------------------------缓冲区地址归零 } } else { if(InfraredBufDptr==7)//----------------------------------缓冲区指针是否等于7 { if(InData==0x68)//------------------------------------缓冲区已接收的第8位是否等于0x68 { InceptBuf[7]=InData;//----------------------------数据保存到缓冲区 InfraredBufDptr++;//------------------------------缓冲区地址累加 } else { InfraredBufDptr=0;//------------------------------缓冲区地址归零 } } else { InceptBuf[InfraredBufDptr]=InData;//------------------数据保存到缓冲区 InfraredBufDptr++;//----------------------------------缓冲区地址累加 } } } else { InfraredBufDptr=0;//------------------------------------------缓冲区地址归零 } } if(InceptBuf[InceptBuf[9]+11]==0x16)//----------------------------是否完成一帧数据的接收?结束符是否等于0x16 { SerSendFg=0;//------------------------------------------------非串口状态 InfSendFg=1;//------------------------------------------------红外状态 CmdParseFg=1;//-----------------------------------------------启动命令解析使能位 SerialBufDptr=0; InfraredBufDptr=0;//------------------------------------------缓冲区地址归零 SendEndFg=0;//------------------------------------------------已发送完毕位归零 SendStrFg=1; } EX1=1;//----------------------------------------------------------使能外部中断1 // ES=1; //----------------------------------------------------------使能串口中断 } else { HwRxd=1; } //TR1=0; //TR0=1; } /*void infrarereceive(void) { unsigned char i,InData; bit k,j,DataRch; EX1=0; //ES=0; i=InData=0; DataRch=0; j=k=0; InitDelay(5); while(i<10) { if(i<9) { InData>>=1; if(HwRxd) { InData|=0x80; j=~j; } } else { if(HwRxd) { DataRch=1; } else { DataRch=0; } } InitDelay(55);//--->11.0592M i++; } if(j==DataRch) { k=1; } else { k=0; } if(SendEndFg)//----------------------------------------------------------上次数据是否发送完毕? { // ComInceptTime=3;//------------------------------------------------如果两秒内没有接收结束自动中断接收并清除已经接收的数据 if(k) { if(InfraredBufDptr<50) { if(InfraredBufDptr==0)//--------------------------------------数据缓冲区地址指针是否为零 { if(InData==0x68)//----------------------------------------数据保存到缓冲区---缓冲区的第一个数据是否等于0x68 { InceptBuf[0]=InData; InfraredBufDptr++;//----------------------------------缓冲区地址累加 } else { InfraredBufDptr=0;//----------------------------------缓冲区地址归零 } } else { if(InfraredBufDptr==7)//----------------------------------缓冲区指针是否等于7 { if(InData==0x68)//------------------------------------缓冲区已接收的第8位是否等于0x68 { InceptBuf[7]=InData;//----------------------------数据保存到缓冲区 InfraredBufDptr++;//------------------------------缓冲区地址累加 } else { InfraredBufDptr=0;//------------------------------缓冲区地址归零 } } else { InceptBuf[InfraredBufDptr]=InData;//------------------数据保存到缓冲区 InfraredBufDptr++;//----------------------------------缓冲区地址累加 } } } else { InfraredBufDptr=0;//------------------------------------------缓冲区地址归零 } } if(InceptBuf[InceptBuf[9]+11]==0x16)//----------------------------是否完成一帧数据的接收?结束符是否等于0x16 { SerSendFg=0;//------------------------------------------------非串口状态 InfSendFg=1;//------------------------------------------------红外状态 CmdParseFg=1;//-----------------------------------------------启动命令解析使能位 SerialBufDptr=0; InfraredBufDptr=0;//------------------------------------------缓冲区地址归零 SendEndFg=0;//------------------------------------------------已发送完毕位归零 SendStrFg=1; } EX1=1;//----------------------------------------------------------使能外部中断1 //ES=1;//----------------------------------------------------------使能串口中断 } else { HwRxd=1; } }*/