📄 revfunc.c
字号:
/*
void revFunction(void)
{
// unsigned char checksum=0;
unsigned char revChar;
unsigned char Num=0;
unsigned char PacketLength[2];
unsigned char Cont=0;
unsigned char test[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} ;
bit RevAddress=0;
bit RevHead=0;
bit RevPacketID=0;
bit RevPacketLength=0;
bit RevPacketData=0;
//revChar=SBUF;
unsigned char cont=0;
while(!revSuccess)
{
if(RI==1)
{
revChar=SBUF;
RI=0;
Num++;
//revChar=SBUF;
if(revChar!=0xEF) cont++;
test[Num-1]=revChar;
/*
if((Num==1) && (revChar==0x0EF))
RevHead=1;
if(Num==2 && revChar==0x01)
Cont++; //检测包头:0xFF01
if(Num==3 && revChar==0xFF)
Cont++;
if(Num==4 && revChar==0xFF)
Cont++; //检测模块地址: 0xF1F2F3F4
if(Num==5 && revChar==0xFF)
Cont++;
if(Num==6 && revChar==0xFF)
if(Cont==4)
{
Cont=0;
RevAddress=1; // 收到有效地址
}
if(Num==7 && RevAddress==1) // 收到有效地址
{
PacketID=revChar; // 检测包标识
checksum+=revChar;
RevPacketID=1;
}
if(Num==8 && RevPacketID==1) //PacketLength[1]放LENGTH的低字节
//PacketLength[0]放LENGTH的高字节
{
PacketLength[Num-8]=revChar; //检测包长度的高字节
checksum+=revChar;
}
if(Num==9 && RevPacketID==1)
{
PacketLength[Num-8]=revChar; //检测包长度的低字节
checksum+=revChar;
RevPacketLength=1;
}
if((Num>9) && (RevPacketLength==1)) //接收应答包的确认码和参数
{
if(Num-9<=PacketLength[1]-2)
{
MessageLength=PacketLength[1]-3; //包长度减去2字节的效验位和1字节的确认码
if(PacketLength[1]<=3) //应答包内容不带参数
{
PacketData=revChar ; //获取包的确认码
checksum+=revChar;
PacketValue =0 ; //不带参数的包做标记
RevPacketData=1;
}
if(PacketLength[1]>3 && Num<PacketLength[1]+9-2) //应答包内容(确认码)带参数
{
*(PacketMessage+Num-10)=revChar; //获取包的内容的参数
checksum+=revChar;
PacketValue =1; //带参数的包做标记
RevPacketData=1;
}
}
}
if((Num>8+PacketLength[1])&& (Num<=PacketLength[1]+8+2)&& RevPacketData==1)//校验
{
if(checksum==revChar) //进行效验
revSuccess=1; //效验成功
else
revSuccess=0; //效验失败
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -