📄 infrarereceive.c
字号:
#include <REG932.H>
#include <define.h>
#include <Stdio.h>
#include <Intrins.h>
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;
}
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -