用C编写的RS232串口通信程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

{

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

{

buff[k]=0x00; //缓冲区清零

}

count=0; //计数清零

}

相关文档
最新文档