51单片机通信协议
51单片机通信协议

单片机通信协议现在大部分的仪器设备都要求能过通过上位机软件来操作,这样方便调试,利于操作。
其中就涉及到通信的过程。
在实际制作的几个设备中,笔者总结出了通信程序的通用写法,包括上位机端和下位机端等。
1.自定义数据通信协议这里所说的数据协议是建立在物理层之上的通信数据包格式。
所谓通信的物理层就是指我们通常所用到的RS232、RS485、红外、光纤、无线等等通信方式。
在这个层面上,底层软件提供两个基本的操作函数:发送一个字节数据、接收一个字节数据。
所有的数据协议全部建立在这两个操作方法之上。
通信中的数据往往以数据包的形式进行传送的,我们把这样的一个数据包称作为一帧数据。
类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成部分:帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾。
帧头和帧尾用于数据包完整性的判别,通常选择一定长度的固定字节组成,要求是在整个数据链中判别数据包的误码率越低越好。
减小固定字节数据的匹配机会,也就是说使帧头和帧尾的特征字节在整个数据链中能够匹配的机会最小。
通常有两种做法,一、减小特征字节的匹配几率。
二、增加特征字节的长度。
通常选取第一种方法的情况是整个数据链路中的数据不具有随即性,数据可预测,可以通过人为选择帧头和帧尾的特征字来避开,从而减小特征字节的匹配几率。
使用第二种方法的情况更加通用,适合于数据随即的场合。
通过增加特征字节的长度减小匹配几率,虽然不能够完全的避免匹配的情况,但可以使匹配几率大大减小,如果碰到匹配的情况也可以由校验码来进行检测,因此这种情况在绝大多说情况下比较可靠。
地址信息主要用于多机通信中,通过地址信息的不同来识别不同的通信终端。
在一对多的通信系统中,可以只包含目的地址信息。
同时包含源地址和目的地址则适用于多对多的通信系统。
数据类型、数据长度和数据块是主要的数据部分。
数据类型可以标识后面紧接着的是命令还是数据。
数据长度用于指示有效数据的个数。
485通信程序(51单片机)

485通信程序(51单片机)什么是485通信?RS-485是一种串行通信协议,它使用差分信号传输数据。
485通信支持了在两个或以上设备之间传输数据的需求,比如用于电子计算机、通信设备、工业自动化等等。
RS-485已广泛应用于数控机床、自动化设备控制等领域中。
单纯的485通信包含四种通信模式:点对点、总线形、多主机和简介式通信。
其中,点对点通信指的是一对一的通信方式;总线形通信指的是一对多的群通信方式,所有设备都在同一条总线上发送和接收数据;多主机通信指的是多台主机的通信方式,多个设备都可以同时发送数据;简介式通信是一种用于仅需要发送少量数据的情况的通信方式。
下面介绍一下485通信的部分基本知识1.485通信的传输距离远,一般可以达到1200米。
2.485通信具有较强的抗干扰能力。
3.485通信使用差分信号进行传输,信号稳定,传输速率也比较快。
4.485通信可以支持多个设备同时进行通信,但是在同一时间内只有一个设备可发送数据。
5.在采用485通信时,一定要注意通讯端口的设置,如波特率、数据位、停止位等。
程序实现原理该程序使用了51单片机作为主控制器实现了基本的485通信,具体实现如下:1.通信模式的设置在程序开始时,需要设置通信模式。
如果通信模式为点对点通信,则可以直接使用UART通信模块进行通信;如果是多点通信,则需要使用485通信芯片。
2.通讯端口的配置在进行485通讯时,需要进行通讯端口的配置,包括波特率、数据位、停止位等参数的设定。
在485通信模式下,只有一个设备可为主设备,其他设备均为被设备。
在发送数据时,主设备的TXD口要与外部总线的D+口相连,而D-口不连接,从设备的TXD口要与D-口相连,而D+口不连接。
在接收数据时,主设备的RXD口要与D+口相连,而D-口不连接,从设备的RXD口要与D-口相连,而D+口不连接。
3.数据的发送和接收在发送和接收数据时,需要采用特定的方式进行报文的封装和解析。
51单片机串口通信原理

51单片机串口通信原理详解1. 引言串口(Serial Port)是一种常用于计算机与外部设备之间进行数据传输的接口,它是一种逐位传输的方式。
51单片机是一种非常常用的单片机,串口通信是其重要的通信方式之一。
本文将详细解释51单片机串口通信的基本原理,包括串口通信的定义、硬件连接示意图、通信协议、数据传输过程以及数据接收处理等方面的内容。
2. 串口通信定义串口通信是一种通过串行通路进行数据传输的通信方式。
它是一种点对点的通信协议,即通信的两端通过共享数据线进行数据交换。
3. 硬件连接示意图完成串口通信,需要将单片机与外部设备进行连接。
下图是一个常见的串口通信连接示意图:___| |TXD <-|---|---> RXD| |RXD <-|---|---> TXD|___|单片机外部设备通常,单片机的TXD引脚连接到外部设备的RXD引脚,而单片机的RXD引脚连接到外部设备的TXD引脚。
4. 串口通信协议串口通信需要明确一种通信协议,以规定数据的传输格式和相关参数。
在51单片机中,常用的串口通信协议有UART(Universal Asynchronous ReceiverTransmitter)和USART(Universal Synchronous Asynchronous Receiver Transmitter)。
UART是指不使用时钟信号而直接利用起始位、数据位和停止位来传输数据的协议,属于异步通信。
USART是指同步和异步传输都能实现的通信协议。
5. 数据传输过程串口通信的数据传输过程可以分为发送和接收两个部分。
5.1 发送数据发送数据的步骤如下:1.配置串口通信参数,包括波特率、数据位、停止位和校验位等。
2.将要发送的数据存放在发送缓冲区中。
3.设置发送开始标志位。
4.如果发送缓冲区为空,则等待直到缓冲区不为空。
5.将发送缓冲区中的数据通过串口发送出去。
6.等待发送完成。
c51单片机实用通信协议

c51单片机实用通信协议一、基本格式:通信头->巴克码->地址字->长度字->命令字->信息位->校准字1. 通信头:占1~8个字节,表通信开始(0x00、0xff不能用作通信头);2.巴克码:占1字节,一般为0x72,表通信头结束;3.地址字:表终端的地址,占1字节(0x00作为广播地址);4.长度字:占1字节,表示从地址字到信息位之间的字节数;5.命令字:占1字节,指示终端的不同操作;6.信息位:不定长,从0~252字节;7.校验位:两个字节,采用和校验及CRC校验。
二、应答1.如果终端接收正确,则应答ACK;如果终端接收错误,则应答NAK;2.发送方收到ACK,此次通信结束;3.发送方收到NAK,重发刚才的命令字(最多7次);4.如果发送方发完数据后无应答,隔0.5~1S后重发(最多7次)。
三、ACK/NAK的格式通信头->巴克码->地址字->长度字->命令字->0x06、0x06、、0x06(1~8个)(若信息位长时,分包传输,信息位的第一位是包号0x01,最后1包为0xff)============================================================= =============================================================单片机多机并行通讯的一种方法1 简介本文介绍的单片机多机并行通讯系统,使用89C51作为主机,多片89C2051作为从机。
(89C2051为20脚300MIL封装,带有2K FLASH E2PROM的单片机,除了少了两个并口外,具备MCS-51系列单片机所有功能。
因为其体积小,功能强,必将在单片机应用领域内广泛使用)。
这种并行通讯方法适用于在多站点,多层次的检测和控制系统中充当通信控制器的角色;也适合于用作单片机串行口扩充电路。
51单片机双机通信原理(一)

51单片机双机通信原理(一)51单片机双机通信简介•什么是51单片机双机通信•双机通信的作用和应用场景基本原理•单片机串口通信原理–串口通讯协议–数据帧的构成•串口通信的硬件连接–引脚连接方式–串口信号格式设置单向通信实现•主从模式–主机发送数据–从机接收数据•编程实现–主机端程序设计–从机端程序设计双向通信实现•主从模式–主机发送数据–从机接收数据–主机接收数据–从机发送数据•编程实现–主机端程序设计–从机端程序设计通信协议的设计•自定义通信协议–协议的格式–数据的解析与封装高级功能扩展•多机通信实现•数据加密与解密•异常处理与误码纠错总结•51单片机双机通信的基本原理和实现方式•可能遇到的问题及解决方案•双机通信的进一步应用展望简介51单片机双机通信是指使用51系列单片机实现两台或多台单片机之间的数据传输和通信。
双机通信可以实现在多个单片机之间传递数据、完成控制指令的下发、数据的采集和处理等功能。
在各种电子设备和嵌入式系统中,双机通信被广泛应用,可以实现设备之间的互联和协同工作,提高系统的灵活性和智能化水平。
基本原理单片机串口通信原理串口通信是一种将数据通过串行线路进行传输的通信方式。
在51单片机的串口通信中,常用的是UART(通用异步收发传输器)通信协议。
UART通信采用的是异步传输方式,数据按照固定的数据帧格式进行传输。
串口通信的硬件连接在51单片机的串口通信中,需要将主机和从机的UART引脚连接起来。
常用的连接方式是通过一对直线的串行数据线(TXD和RXD)连接主从机,其中TXD是发送数据的引脚,RXD是接收数据的引脚。
为了确保数据的正确传输,还需要进行串口信号格式的设置,包括波特率、数据位数、停止位数和校验位等。
单向通信实现主从模式在单向通信中,主机负责发送数据,从机负责接收数据。
主机通过串口发送数据帧,从机通过串口接收数据帧,并进行相应的处理。
编程实现在主机端程序设计中,需要配置串口通信的参数,并使用串口发送数据的相关函数来发送数据。
485通讯协议程序怎么写(51单片机的485通信程序案例)

485通讯协议程序怎么写(51单片机的485通信程序案例)
RS-485总线接口是一种常用的串口,具有网络连接方便、抗干扰性能好、传输距离远等优点。
RS-485收发器采用平衡发送和差分接收,因此具有抑制共模干扰的能力,加上收发器具有高的灵敏度,能检测到低达200mv的电压,可靠通信的传输距离可达数千米。
使用RS-485总线组网,只需一对双绞线就可实现多系统联网构成分布式系统、设备简单、价格低廉、通信距离长。
51单片机的485通信程序
#ifndef __485_C__ #define __485_C__
#include 《reg51.h》
#include 《string.h》
#define unsigned char uchar
#define unsigned int uint
/* 通信命令*/
#define __ACTIVE_ 0x01 // 主机询问从机是否存在
#define __GETDATA_ 0x02 // 主机发送读设备请求
#define __OK_ 0x03 // 从机应答
#define __STATUS_ 0x04 // 从机发送设备状态信息
#define __MAXSIZE 0x08 // 缓冲区长度
#define __ERRLEN 12 // 任何通信帧长度超过12则表示出错
uchar dbuf[__MAXSIZE]; // 该缓冲区用于保存设备状态信息
uchar dev; // 该字节用于保存本机设备号
sbit M_DE = P1。
51单片机模拟can协议

51单片机模拟can协议51单片机是一种常见的嵌入式微控制器,具有广泛的应用。
CAN (Controller Area Network)协议是一种用于控制器之间通信的串行总线通信协议。
本文将介绍如何使用51单片机模拟CAN协议。
我们需要了解CAN协议的基本原理。
CAN协议是一种多主控制器、多节点的通信协议,用于在汽车、工业自动化等领域中实现控制器之间的高速、可靠通信。
CAN协议采用差分传输方式,通过两根线(CAN_H和CAN_L)进行数据传输。
CAN协议具有高抗干扰性、可靠性强等特点,因此在工业控制领域得到广泛应用。
要使用51单片机模拟CAN协议,我们首先需要了解CAN协议的基本通信过程。
CAN协议的通信过程包括以下几个步骤:帧的发送、帧的接收和错误处理。
在帧的发送过程中,发送节点将数据封装成CAN帧,并通过CAN总线发送给接收节点。
在帧的接收过程中,接收节点接收到CAN帧,并解析出其中的数据。
如果在通信过程中发生错误,CAN协议还提供了错误处理机制,可以及时检测和纠正错误。
在51单片机中模拟CAN协议的过程可以分为以下几个步骤:1. 配置51单片机的串口功能,使其能够模拟CAN总线的发送和接收功能。
可以通过设置串口的波特率、数据位、停止位等参数来实现。
2. 编写发送函数。
在发送函数中,我们需要将数据封装成CAN帧,并通过串口发送给接收节点。
可以使用51单片机的串口发送功能实现这一步骤。
3. 编写接收函数。
在接收函数中,我们需要通过串口接收CAN帧,并解析出其中的数据。
可以使用51单片机的串口接收功能实现。
4. 实现错误处理功能。
在通信过程中,可能会发生错误,如数据传输错误、帧格式错误等。
我们需要在程序中加入错误处理的代码,及时检测和纠正错误。
通过以上步骤,我们就可以在51单片机中模拟CAN协议的基本功能。
当然,要实现更复杂的功能,如多节点通信、数据校验等,还需要进一步深入学习CAN协议的相关知识和相关编程技巧。
51单片机的串口通信协议的6个特征

51单片机的串口通信协议的6个特征现实生活中,我们总是要与人打交道,互通有无。
单片机也一样,需要跟各种设备交互。
例如汽车的显示仪表需要知道汽车的转速及电动机的运行参数,那么显示仪表就需要从汽车的底层控制器取得数据。
而这个数据的获得过程就是一个通信过程。
类似的例子还有控制器通常是单片机或者PLC与变频器的通信。
通信的双方需要遵守一套既定的规则也称为协议,这就好比我们人之间的对话,需要在双方都遵守一套语言语法规则才有可能达成对话。
通信协议又分为硬件层协议和软件层协议。
硬件层协议主要规范了物理上的连线,传输电平信号及传输的秩序等硬件性质的内容。
常用的硬件协议有串口,IIC,SPI,RS485,CAN和USB。
软件层协议则更侧重上层应用的规范,比如modbus协议。
好了,那这里我们就着重介绍51单片机的串口通信协议,以下简称串口。
串口的6个特征如下。
(1)、物理上的连线至少3根,分别是Tx数据发送线,Rx数据接收线,GND共用地线。
(2)、0与1的约定。
RS232电平,约定﹣5V至﹣25V之间的电压信号为1,﹢5V至﹢25V之间的电压信号为0 。
TTL电平,约定5V的电压信号为1,0V电压信号为0 。
CMOS 电平,约定3.3V的电压信号为1,0V电压信号为0 。
其中,CMOS电平一般用于ARM 芯片中。
(3)、发送秩序。
低位先发。
(4)、波特率。
收发双方共同约定的一个数据位(0或1)在数据传输线上维持的时间。
也可理解为每秒可以传输的位数。
常用的波特率有300bit/s, 600bit/s, 2400bit/s, 4800bit/s, 9600bit/s。
(5)、通信的起始信号。
发送方在没有发送数据时,应该将Tx置1 。
当需发送时,先将Tx置0,并且保持1位的时间。
接受方不断地侦测Rx,如果发现Rx常时间变高后,突然被拉低(置为0),则视为发送方将要发送数据,迅速启动自己的定时器,从而保证了收发双方定时器同步定时。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机通信协议现在大部分的仪器设备都要求能过通过上位机软件来操作,这样方便调试,利于操作。
其中就涉及到通信的过程。
在实际制作的几个设备中,笔者总结出了通信程序的通用写法,包括上位机端和下位机端等。
1.自定义数据通信协议这里所说的数据协议是建立在物理层之上的通信数据包格式。
所谓通信的物理层就是指我们通常所用到的RS232、RS485、红外、光纤、无线等等通信方式。
在这个层面上,底层软件提供两个基本的操作函数:发送一个字节数据、接收一个字节数据。
所有的数据协议全部建立在这两个操作方法之上。
通信中的数据往往以数据包的形式进行传送的,我们把这样的一个数据包称作为一帧数据。
类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成部分:帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾。
帧头和帧尾用于数据包完整性的判别,通常选择一定长度的固定字节组成,要求是在整个数据链中判别数据包的误码率越低越好。
减小固定字节数据的匹配机会,也就是说使帧头和帧尾的特征字节在整个数据链中能够匹配的机会最小。
通常有两种做法,一、减小特征字节的匹配几率。
二、增加特征字节的长度。
通常选取第一种方法的情况是整个数据链路中的数据不具有随即性,数据可预测,可以通过人为选择帧头和帧尾的特征字来避开,从而减小特征字节的匹配几率。
使用第二种方法的情况更加通用,适合于数据随即的场合。
通过增加特征字节的长度减小匹配几率,虽然不能够完全的避免匹配的情况,但可以使匹配几率大大减小,如果碰到匹配的情况也可以由校验码来进行检测,因此这种情况在绝大多说情况下比较可靠。
地址信息主要用于多机通信中,通过地址信息的不同来识别不同的通信终端。
在一对多的通信系统中,可以只包含目的地址信息。
同时包含源地址和目的地址则适用于多对多的通信系统。
数据类型、数据长度和数据块是主要的数据部分。
数据类型可以标识后面紧接着的是命令还是数据。
数据长度用于指示有效数据的个数。
校验码则用来检验数据的完整性和正确性。
通常对数据类型、数据长度和数据块三个部分进行相关的运算得到。
最简单的做法可是对数据段作累加和,复杂的也可以对数据进行CRC运算等等,可以根据运算速度、容错度等要求来选取。
2.上位机和下位机中的数据发送物理通信层中提供了两个基本的操作函数,发送一个字节数据则为数据发送的基础。
数据包的发送即把数据包中的左右字节按照顺序一个一个的发送数据而已。
当然发送的方法也有不同。
在单片机系统中,比较常用的方法是直接调用串口发送单个字节数据的函数。
这种方法的缺点是需要处理器在发送过程中全程参与,优点是所要发送的数据能够立即的出现在通信线路上,能够立即被接收端接收到。
另外一种方法是采用中断发送的方式,所有需要发送的数据被送入一个缓冲区,利用发送中断将缓冲区中的数据发送出去。
这种方法的优点是占用处理器资源小,但是可能出现需要发送的数据不能立即被发送的情况,不过这种时延相当的小。
对于51系列单片机,比较倾向于采用直接发送的方式,采用中断发送的方式比较占用RAM资源,而且对比直接发送来说也没有太多的优点。
以下是51系列单片机中发送单个字节的函数。
v oid SendBy te(unsigned char ch){SBUF = ch;while(TI == 0);TI = 0;}上位机中关于串口通信的方式也有多种,这种方式不是指数据有没有缓冲的问题,而是操作串口的方式不同,因为PC上数据发送基本上都会被缓冲后再发送。
对于编程来说操作串口有三种方式,一、使用windows系统中自带的串口通信控件,这种方式使用起来比较简单,需要注意的是接收时的阻塞处理和线程机制。
二、使用系统的API直接进行串口数据的读取,在windows和linux系统中,设备被虚拟为文件,只需要利用系统提供的API函数即可进行串口数据的发送和读取。
三、使用串口类进行串口操作。
在此只介绍windows 环境下利用串口类编程的方式。
CSerialPort是比较好用的串口类。
它提供如下的串口操作方法:v oid WriteToPort(char* string, int len);串口初始化成功后,调用此函数即可向串口发送数据。
为了避免串口缓冲所带来的延时,可以开启串口的冲刷机制。
3.下位机中的数据接收和协议解析下位机接收数据也有两种方式,一、等待接收,处理器一直查询串口状态,来判断是否接收到数据。
二、中断接收。
两种方法的优缺点在此前的一篇关于串口通信的文章中详细讨论过。
得出的结论是采用中断接收的方法比较好。
数据包的解析过程可以设置到不同的位置。
如果协议比较简单,整个系统只是处理一些简单的命令,那么可以直接把数据包的解析过程放入到中断处理函数中,当收到正确的数据包的时候,置位相应的标志,在主程序中再对命令进行处理。
如果协议稍微复杂,比较好的方式是将接收的数据存放于缓冲区中,主程序读取数据后进行解析。
也有两种方式交叉使用的,比如一对多的系统中,首先在接收中断中解析“连接”命令,连接命令接收到后主程序进入设置状态,采用查询的方式来解析其余的协议。
以下给出具体的实例。
在这个系统中,串口的命令非常简单。
所有的协议全部在串口中断中进行。
数据包的格式如下:0x55, 0xAA, 0x7E, 0x12, 0xF0, 0x02, 0x23, 0x45, SUM, XOR, 0x0D其中0x55, 0xAA, 0x7E为数据帧的帧头,0x0D为帧尾,0x12为设备的目的地址,0xF0为源地址,0x02为数据长度,后面接着两个数据0x23, 0x45,从目的地址开始结算累加、异或校验和,到数据的最后一位结束。
协议解析的目的,首先判断数据包的完整性,正确性,然后提取数据类型,数据等数据,存放起来用于主程序处理。
代码如下:if(state_machine == 0) // 协议解析状态机{if(rcv dat == 0x55) // 接收到帧头第一个数据state_machine = 1;elsestate_machine = 0; // 状态机复位}else if(state_machine == 1){if(rcv dat == 0xAA) // 接收到帧头第二个数据state_machine = 2;elsestate_machine = 0; // 状态机复位}else if(state_machine == 2){if(rcv dat == 0x7E) // 接收到帧头第三个数据state_machine = 3;elsestate_machine = 0; // 状态机复位}else if(state_machine == 3){sumchkm = rcv dat; // 开始计算累加、异或校验和xorchkm = rcv dat;if(rcv dat == m_SrcAdr) // 判断目的地址是否正确state_machine = 4;elsestate_machine = 0;}else if(state_machine == 4){sumchkm += rcv dat;xorchkm ^= rcv dat;if(rcv dat == m_DstAdr) // 判断源地址是否正确state_machine = 5;elsestate_machine = 0;}else if(state_machine == 5){lencnt = 0; // 接收数据计数器rcv count = rcv dat; // 接收数据长度sumchkm += rcv dat;xorchkm ^= rcv dat;state_machine = 6;}else if(state _machine == 6 || state _machine == 7){m_ucData[lencnt++] = rcv dat; // 数据保存sumchkm += rcv dat;xorchkm ^= rcv dat;if(lencnt == rcv count) // 判断数据是否接收完毕state_machine = 8;elsestate_machine = 7;else if(state_machine == 8){if(sumchkm == rcv dat) // 判断累加和是否相等state_machine = 9;elsestate_machine = 0;}else if(state_machine == 9){if(xorchkm == rcv dat) // 判断异或校验和是否相等state_machine = 10;elsestate_machine = 0;}else if(state_machine == 10){if(0x0D == rcv dat) // 判断是否接收到帧尾结束符{retv al = 0xaa; // 置标志,表示一个数据包接收到}state_machine = 0; // 复位状态机}此过程中,使用了一个变量state_machine作为协议状态机的转换状态,用于确定当前字节处于一帧数据中的那个部位,同时在接收过程中自动对接收数据进行校验和处理,在数据包接收完的同时也进行了校验的比较。
因此当帧尾结束符接收到的时候,则表示一帧数据已经接收完毕,并且通过了校验,关键数据也保存到了缓冲去中。
主程序即可通过retv al的标志位来进行协议的解析处理。
接收过程中,只要哪一步收到的数据不是预期值,则直接将状态机复位,用于下一帧数据的判断,因此系统出现状态死锁的情况非常少,系统比较稳定,如果出现丢失数据包的情况也可由上位机进行命令的补发,不过这种情况笔者还没有碰到。
对于主程序中进行协议处理的过程与此类似,主程序循环中不断的读取串口缓冲区的数据,此数据即参与到主循环中的协议处理过程中,代码与上面所述完全一样。
4.上位机中的数据接收和命令处理上位机中数据接收的过程与下位机可以做到完全一致,不过针对不同的串口操作方法有所不同。
对于阻赛式的串口读函数,例如直接进行API操作或者调用windows的串口通信控件,最好能够开启一个线程专门用于监视串口的数据接收,每接收到一个数据可以向系统发送一个消息。
笔者常用的CSerialPort类中就是这样的处理过程。
CSerialPort打开串口后开启线程监视串口的数据接收,将接收的数据保存到缓冲区,并向父进程发送接收数据的消息,数据将随消息一起发送到父进程。
父进程中开启此消息的处理函数,从中获取串口数据后就可以把以上的代码拷贝过来使用。
CSerialPort向父类发送的消息号如下:#def ine WM_COMM_R XCHAR WM_USER+7 // A character was receiv ed and placed in the input buff er.因此需要手动添加此消息的响应函数:af x_msg LONG OnCommunication(WPARAM ch, LPARAM port);ON_MESSAGE(WM_COMM_R XCHAR, OnCommunication)响应函数的具体代码如下:LONG CWellInf oView::OnCommunication(WPARAM ch, LPARAM port){int retv al = 0;rcv dat = (BYTE)ch;if(state_machine == 0) // 协议解析状态机{if(rcvdat == 0x55) // 接收到帧头第一个数据state_machine = 1;elsestate_machine = 0; // 状态机复位}else if(state_machine == 1){if(rcvdat == 0xAA) // 接收到帧头第二个数据state_machine = 2;elsestate_machine = 0; // 状态机复位......5.总结以上给出的是通信系统运作的基本雏形,虽然简单,但是可行。