logo资料库

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

第1页 / 共2页
第2页 / 共2页
资料共2页,全文预览结束
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; buff[count-4]=0; for(k=2;k<(count-4);k++) { //计算校验和 //重填祯头 0 //校验和清零 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
分享到:
收藏