void main()
{
delayms(100);
init(); //初始化系统
delayms(100);
init_wdt(); //初始化看门狗
while(1)
{
while(!RI_0) //是否收到数据
{
clr_wdt();
}
RI_0=0; //清除接收中断标志
buffer=S0BUF;
if(buffer==0x5a) //检测祯头0
start0=1;
if(buffer==0x54) //检测祯头1
start1=1;
if(buffer==0x5a) //检测祯尾0
end0=1;
if(buffer==0xfe) //检测祯尾1
end1=1;
if((start0==1)&(start1==1))
{
buff[i]=buffer; //从祯头1开始存储数据
i++;
}
if((end0==1)&(end1==1)) //是否已经接收祯尾
{
count=i; //数据长度为count个
i=1;
if((buff[2]==0x03)&(count==107)) //是否422指令 {
buff[0]=0x5a; //重填祯头0
buff[count-4]=0; //校验和清零
for(k=2;k<(count-4);k++) //计算校验和
{
buff[count-4]+=buff[k];
}
for(k=0;k<count;k++) //从祯头1开始循环发送
{
S0BUF=buff[k];
while(!TI_0); //等待发送完成
TI_0=0; //清除发送中断标志
}
reset();
}
else if((buff[2]==0x05)&(count==7)) //是否AD测试指令
{
sendad();
reset();
}
else if((buff[2]==0x18)&(count==7)) //是否发送时序信号指令
{
sendpaulse();
reset();
}
else //如果接收错误,则恢复各标志位为初始状态以便下次接收 {
reset();
}
}
}
}
void reset()
{
start0=0; //祯头祯尾标志位清零
start1=0;
end0=0;
end1=0;
for(k=0;k<count;k++)
{
buff[k]=0x00; //缓冲区清零
}
count=0; //计数清零
}。