您好,欢迎来到花图问答。
搜索
您的当前位置:首页用C编写的RS232串口通信程序

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

来源:花图问答
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;kS0BUF=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;kbuff[k]=0x00; //缓冲区清零 }

count=0; //计数清零 }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuowenda.com 版权所有 湘ICP备2023022495号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务