


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机通信协议处理包括上位机端和下位机端等自定义数据通信协议这里所说的数据协议是建立在物理层之上的通信数据包格式我们通常所用到的RS232、RS485通信中的数据往往以数据包的形式进行传送的,我们把这样的一个数据包称作为一帧数据。类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成部分:帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾。信系统。令还是数据。数据长度用于指示有效数据的个数。分进行相关的运算得到。最简单的做法可是对数据段作累加和,复杂的也可以对数据进行CRC上位机和下位机中的数据发送有不同。串口51系列单片机,比较倾向于采用直接发送的方式,采用中断发送的方式比较占用RAM51系列单片机中发送单个字节的函数。voidSendByte(unsignedcharch){SBUF=ch;while(TI==0);TI=0;}上位机中关于串口通信的方式也有多种,这种方式不是指数据有没有缓冲的问题,而是操作串口的方式不同,因为PCwindowsAPI直接进行串口数据的windowslinuxAPIwindows环境下利用串口类编程的方式。CSerialportvoidWriteToPort(char*string,intlen);可以开启串口的冲刷机制。下位机中的数据接收和协议解析进入设置状态,采用查询的方式来解析其余的协议。断中进行。数据包的格式如下:0x55,0xAA,0x7E,0x12,0xF0,0x02,0x23,0x45,SUM,XOR,0x0D0x55,0xAA,0x7E0x0D0x120x23,0x45或校验和,到数据的最后一位结束。存放起来用于主程序处理。代码如下:if(state_machine==0) //{if(rcvdat==0x55) //state_machine=1;elsestate_machine=0; //}elseif(state_machine==1){if(rcvdat==0xAA) //state_machine=2;elsestate_machine=0; //}elseif(state_machine==2){if(rcvdat==0x7E) //state_machine=3;else}
state_machine=0; //elseif(state_machine==3){sumchkm=rcvdat; //xorchkm=rcvdat;if(rcvdat==m_SrcAdr) //state_machine=4;elsestate_machine=0;}elseif(state_machine==4){sumchkm+=xorchkm^=if(rcvdat==m_DstAdr) //state_machine=5;elsestate_machine=0;}elseif(state_machine==5){lencnt=0; //接收数计数器rcvcount=rcvdat; //接收数据长sumchkm+=rcvdat;xorchkm^=state_machine=}elseif(state_machine==6||state_machine==7){m_ucData[lencnt++]=rcvdat; //sumchkm+=rcvdat;xorchkm^=rcvdat;if(lencnt==rcvcount) //state_machine=8;elsestate_machine=7;}elseif(state_machine==8){if(sumchkm==rcvdat) //state_machine=9;elsestate_machine=0;}elseif(state_machine==9){if(xorchkm==rcvdat) //state_machine=10;elsestate_machine=0;}elseif(state_machine==10){if(0x0D==rcvdat) //{retval=0xaa; //}state_machine=0; //}state_machine已经接收完毕,并且通过了校验,关键数据也保存到了缓冲去中。主程序即可通过retval的标志位来进行协议的解析处理。况也可由上位机进行命令的补发,不过这种情况笔者还没有碰到。对于主程序中进行协议处理的过程与此类似据,此数据即参与到主循环中的协议处理过程中,代码与上面所述完全一样。上位机中的数据接收和命令处理上位机中数据接收的过程与下位机可以做到完全一致API操作或者调用windows送一个消息。笔者常用的CSerialPortCSerialPort打开串口后CSerialPort向父类发送的消息号如下:#defineWM_COMM_RXCHARWM_USER+7//Acharacterwasreceivedandplacedininputbuffer.因此需要手动添加此消息的响应函数:afx_msgLONGOnCommunication(WPARAMch,LPARAMport);ON_MESSAGE(WM_COMM_RXCHAR,OnCommunication)响应函数的具体代码如下:LONGCWellInfoView::OnCommunication(WPARAMch,LPARAMport){intretval=0;rcvdat=(BYTE)ch;if(state_machine==0) //{if(rcvdat==0x55) //state_machine=1;elsestate_machine=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 马村镇楚营小学落实国家课程标准实施方案
- 2025年茶艺师考试学习方法试题及答案
- 二零二五年度建材生意绿色建材推广合作协议
- 二零二五年度农村房产转让与生态农业合作合同
- 二零二五年度个人债权转让协议书(关于企业债权转让)
- 2025年度风景区经营权全面承包协议实施细则
- 2025年度钢结构厂房建设安全协议书
- 2025年度环保设施建设补贴协议书
- 软件开发管理基础知识试题及答案2025
- 二零二五年度大型水利工程付款协议合同书
- 天然气置换氮气作业记录表
- 顶管中继间施工技术
- 现代商业空间展示设计ppt
- 高家堡副井井筒壁座施工安全技术措施
- 混凝土倒挂施工接缝防水质量控制(QC成果 PPT 附照片)
- 危险化学品生产企业班组建设指导手册
- 世界贸易组织(WTO课件(25页PPT)
- 电石渣制浆系统工艺规程
- FMEA第五版表格(实例)
- 技术服务合同,英文版
- 国标-》桉树无性系组培快繁技术规程
评论
0/150
提交评论