设计单片机通讯协议论文(非常经典)
单片机多机通信实现 毕业论文.

单片机多机通信实现1、设计要求三片单片机利用串行口进行串行通信:串行通信的波特率为9600bit/s。
串行口工作方式为方式1的单工串行通信。
2、设计方案一个主机和两个从机,主机通过按键选择要通信的从机,按键确认后通过矩阵键盘输入要传输的信息,从机接收主机发送的信息并发回长度校验码给主机,主机确认校验信息是否正确,若正确,主机液晶显示“send:信息”和从机数,从机液晶显示所接收的信息;若错误则主机从发信息,重复前面的步骤。
3、硬件电路设计3.1 单片机最小系统的设计本系统共用三块单片机,每块单片机均选用AT89S52,最小系统也都一样。
由于三块单片机的主要任务是通信,为了得到准确的波特率,采用振荡频率为11.0592MHz的晶振,再接两个30pF的瓷片电容即可构成单片机的时钟电路。
单片机最小系统电路如下:图3-1 单片机最小系统电路复位电路也可以换成看门狗电路实现,可使单片机可靠的复位。
为了简化电路设计,本系统采用简单方法,可使单片机上电复位,此外可以通过按键手动复位。
单片机上电即可复位,R1与C3的充电时间大于两倍的机器周期,使RST引脚有足够长的时间保存高电平,使单片机可靠的复位。
正常工作时,按下按键SW1就可以使单片机复位。
3.2 矩阵键盘电路设计图3-2 矩阵键盘电路P1口接4×4的矩阵键盘,共16个按键,分别为0~C及“开始通信”,“选择从机”和“输入信息”键。
P1.0~P1.3接矩阵键盘的行,P1.4~P1.7接矩阵键盘的列。
3.3 液晶显示电路设计液晶显示电路如下图:图3-3 液晶LCD1602显示电路P0口上拉10K×8的排阻,自己画的排阻符号如下:图3-4 排阻符号排阻具有九个引脚,一个公共端,另外八个脚分别接到需要接上拉电阻的单片机的P0口。
排阻相当于8个大小均为10K的电阻,在电路中主要其电平转化作用,通过的电流很小,每只电阻的功耗也很小。
如接5V电源,每只电阻的电流约为0.5mA,很小,但是由于P0口是接液晶,不用接排阻也能实现,本着节约的原则在本设计中没有接排阻。
单片机实现RS485的通信毕业论文

本科毕业论文题目:单片机实现RS485的通信学生姓名:学号:院(系):专业:入学时间:年月导师姓名:职称/学位:副教授/博士导师所在单位:完成时间:年月单片机实现RS485的通信摘要在工业控制自动化领域,智能装置之间的通信占有重要的地位,RS485这种串行通信方式在工控自动化领域应用非常广泛,这种远距离通信可以采集远程信息和远程数据,实现远程控制和远程调节。
本文首先介绍了RS485通信标准,然后在此基础上设计了通信协议,并且提出了具体的通信实现方案。
系统使用STC89C52RC为主控芯片,以MAX485芯片实现RS485收发功能,并且加上键盘输入和LCD显示功能,最终完成主站和子站的一套小型远程控制方案。
关键词:RS485;工控自动化;总线;协议A Kind of Implementation Method of RS485 Communication WithMCUAbstractIn the field of industrial control automation,communication between smart devices is very important. The serial communication interface RS485 is widely applied in the field of industrial control automation.Remote command and remote data can be transported by a established connection.So we can realize remote control and remote monitoring by communication. This article first introduces the RS485 communication standard, and then introduces the design of communication protocol,finally puts forward a specific implementation scheme of communication. This system uses STC89C52RC as main control chip,MAX485 as RS485 transceiver, and combined with keyboard input module and LCD module.This system is a small remote control solution between main and sub stations.Keywords: RS485; industrial control automation; bus; protocol目录1. 绪论 (1)1.1. RS485简介 (1)1.2. 单片机的选型 (1)1.3. 通信协议简介 (2)1.4. 研究内容和意义 (2)2. 通信协议设计 (2)2.1. Modbus协议 (2)2.1.1. Modbus介绍 (2)2.1.2. Modbus帧格式 (3)2.2. 基于Modbus的协议设计 (4)2.2.1. 传输规则设计 (4)2.2.2. 设置单点命令 (5)2.2.3. 设置数据命令 (6)2.2.4. 召唤状态信息 (6)2.2.5. 召唤数据信息 (7)3. 系统设计 (7)3.1. 系统功能 (7)3.2. 系统硬件设计 (8)3.2.1. RS485收发模块 (8)3.2.2. LCD液晶模块 (9)3.2.3. 键盘输入模块 (10)3.2.4. 子站的LED灯模块 (11)3.2.5. 实际电路图 (11)3.3. 系统软件设计 (12)3.3.1. 主站程序设计 (12)3.3.2. 子站程序设计 (15)3.4. 编译和调试 (17)4. 论文总结 (19)主要参考文献 (19)附录A 主站协议实现........................................................................ 错误!未定义书签。
单片机毕业论文范文精选3篇(全文)

单片机毕业论文范文精选3篇(全文)第一章绪论1. 1 课题的提出及意义单片机作息时间操纵实现了对时间操纵的智能化,摆脱了传统由人来操纵时间的长短的不便,实现代学校必不可少的设备。
1. 2 设计的任务及要求1.作息时间能操纵电铃2.作息时间能启动和关闭放音机单片机作息时间操纵的功能如下:? 使用4位七段显示器来显示现在的时间。
? 显示格式为“时分”? 由led闪动来作秒计数表示? 具有4个按键来作功能设置,可以设置现在的时间及显示定时设置时间? 一旦时间到则发出一阵声响,同时继电器启动,可以操纵放音机开启和关闭。
第二章总体方案设计2. 1 芯片比较2.1.1 单片机选型当今单片机厂商琳琅满目,产品性能各异。
常用的单片机有很多种:intel8051系列、motorola和m68hc系列、atmel的at89系列、台湾winbond(华邦)w78系列、荷兰pilips的pcf80c51系列、microchip公司的pic系列、zilog的z86系列、atmel的at90s系列、韩国三星公司的ks57c系列4位单片机、台湾义隆的em-78系列等。
我们最终选用了atmel公司的at89c52单片机。
at89c52是美国atmel公司生产的低电压,高性能cmos8位单片机,片内含8kbytes的可反复擦写的只读程序存储器(perom)和256bytes的随机存取数据存储器(ram),器件采纳atmel公司的高密度、非易失性存储技术生产,与标准mcs-51指令系统及8052产品引脚兼容,片内置通用8位ZY处理器(cpu)和flash存储单元,功能强大at89c52单片机适用于许多较为复杂操纵应用场合。
2.1.2显示器接口芯片的选择led显示器接口芯片的选择常用的显示器接口芯片有cd4511,cd4513,mc14499,8279,max7219,74hc164等,它们的功能有:1.cpu接受来自键盘的输入数据,并作预处理;2.数据显示的治理和数据显示器的操纵。
单片机多机通信协议的设计探讨

单片机多机通信协议的设计探讨随着物联网的发展和智能设备的普及,单片机在各种应用场景中得到了广泛的应用。
在许多场合中,我们需要多个单片机之间进行通信,以实现数据传输、协调控制等功能。
为了实现高效可靠的通信,需要设计一种适合多机通信的协议。
本文将探讨单片机多机通信协议的设计问题,讨论如何实现单片机之间的有效通信。
一、通信需求分析在多机通信场景中,通常存在以下几种通信需求:1. 数据传输:单片机之间需要传输各种类型的数据,如传感器采集的数据、控制指令等。
2. 同步控制:多个单片机需要协同工作,实现某种复杂的控制功能,需要进行实时的通信和同步控制。
3. 状态反馈:多个单片机需要相互监控和反馈状态,以实现整体系统的安全可靠运行。
针对以上需求,我们需要设计一种通信协议,能够满足数据传输的高效可靠性,实现多机之间的同步控制和状态反馈。
二、常见通信方式分析1. 串行通信:如UART、SPI、I2C等串行通信方式,可以实现简单的点对点通信,但在多机通信中存在一定的局限性。
2. 并行通信:如并行口通信,可以同时传输多个数据位,但需要较多的引脚和复杂的线路设计。
3. 网络通信:如以太网、Wi-Fi等网络通信方式,可以实现复杂的多机通信,但需要较高的成本和复杂的配置。
综合考虑以上通信方式的优缺点,我们需要设计一种既简单实用又高效可靠的通信协议,以满足单片机多机通信的需求。
三、多机通信协议设计思路在设计单片机多机通信协议时,需要考虑以下几个关键问题:1. 数据帧格式:定义通信数据的帧格式,包括起始标识、数据长度、数据内容、校验和等信息。
2. 数据传输方式:确定数据传输的方式,如广播、点对点、多播等不同的传输方式。
3. 状态同步机制:设计状态同步的机制,确保多个单片机之间的状态能够同步更新。
4. 错误处理机制:考虑通信中可能出现的错误情况,设计相应的错误处理机制。
在实际的单片机多机通信中,可以采用以下方案设计通信协议:2. 数据传输方式:采用广播的方式进行数据传输,即一个单片机发送的数据可以被其他单片机接收,实现多机之间的数据共享。
51单片机网络通信及ARP协议论文

51单片机网络通信及ARP协议论文51单片机网络通信及ARP协议论文本文主要以SST89E564RD型51单片机和RTL8019AS 网络接口芯片为例,研究了如何将51单片机与网络接口芯片进行硬件的电路连接,并通过将ARP协议进行简化和重新定义,实现了将51单片机接入TCP/IP进行网络通信,对该领域的研究具有一定的借鉴意义。
1 51单片机与网络控制器的连接RTL8019AS 网络接口芯片是台湾 Realtek 公司的代表性产品之一,该芯片基于ISA 总线结构,性能稳定且价格低廉,在工业企业领域有非常广泛的应用[ 1 ]。
1.1 RTL8019AS接口芯片的主要特性RTL8019AS芯片主要优点有:一是支持热插拔(即插即用)的动态检测;二是完全兼容当前主流的NE2000 模式并可在8 位与16 位两种模式下工作;三是有跳线与非跳线两种模式可供选择;四是支持全双工通信模式,双工通信时信道的传输速率可达到10Mbps;五是内置数据预取功能;六是内置 16K 字节的闪存;七是支持 8/16两种前端总线工作模式,内置8 个中断申请线,同时有16 个I/O地址可供选择。
1.2 51单片机与RTL8019AS连接实现网络通信的电路设计1.2.1 RTL8019AS 与 93C46 接口电路93C46接口电路内部存储容量为1Kbits,是四线串行接口EEPROM。
RTL 8019 AS芯片在上电或者初始化复位时,首先要从该芯片中读取预设的配置信息才能完成初始化。
93C46 内部存储器的前三个地址空间用于存放RTL8019AS芯片的上电初始化信息;后5个地址空间用于记录本机地址;0AH-11H 的地址空间分配给制造商存储产品的信息;12H~7FH 的地址空间用于记录即插即用信息。
RTL 8019 AS 的EECS引脚连接93C46的CS引脚,EESK引脚连接SK引脚,EEDI引脚连接DI,EEDO引脚连接DO引脚,即由EECS 提供片选信号,EESK 提供时钟信号,EEDI 与 EEDO 定义为串行数据I/O通道。
基于单片机的MODBUS通讯器设计【毕业作品】

基于单片机的MODBUS通讯器设计目录摘要 (I)ABSTRACT (II)第1章绪论 (1)1.1概述 (1)1.2目的与意义 (2)1.3发展现状和前景展望 (3)1.4研究的主要内容和步骤 (4)1.4.1 主要内容 (4)1.4.2 设计的步骤 (4)第2章系统设计方案 (5)设计方案选择 (5)2.2芯片选择 (6)2.3软件方案设计 (6)第3章硬件电路设计 (8)3.1主机CPU模块 (8)3.2电源模块 (9)3.3液晶显示模块 (9)3.4存储模块 (11)3.5程序调试下载模块 (11)3.6串口通讯模块 (12)3.7从机主控模块 (13)3.8LED灯显示模块 (14)3.9温度检测模块 (14)第4章软件设计 (15)串口通信模块 (15)数据帧处理模块 (16)参数保存模块 (17)液晶显示模块 (19)第5章系统调试 (21)硬件调试 (21)5.1.1 主机电路板调试 (21)5.1.2 从机电路板调试 (22)软件件调试 (23)调试平台 (23)调试问题 (23)调试结果 (25)参考文献 (26)致谢 (27)附录2 从机硬件原理图 (30)附录4 从机PCB实物图 (32)附录5 主机通讯程序代码 (33)附录6 从机通讯程序代码 (36)基于单片机的MODBUS通讯器的设计摘要:随着现场总线在工业应用中的越来越广泛,越来越普及,Modbus作为其中的一种简单协议也受到不少的欢迎。
本论文根据Modbus协议中RTU模式实现读寄存器、写单个寄存器、写多个寄存器等多个功能。
本系统从机以STC12C5A60S2为基本平台,利用RS232串口实现与上位机通讯,用单片机的内部RAM寄存器模拟协议中的寄存器,根据寄存器的值调节单片机PWM输出,改变LED灯的亮度,单片机读取实时温度。
本系统上位机以STM32F103RBT6为平台,通过4.3寸TFT触摸屏实现查询从机、设置从机参数等功能,实时显示从机的通讯状态、寄存器的值、温度测量值。
单片机多机通信协议的设计

单片机多机通信协议的设计单片机技术与信息技术的有机结合,促进了通信技术的发展,在通信领域得到了广泛的应用,并经过不断的升级和创新,形成了单片机多机通信系统。
借助单片机技术的优势,开拓全新的发展方向。
文章围绕单片机多机通信进行分析,结合单片机技术的应用,从通信协议的设计着手,进一步的改进和完善单片机多机通信系统,使网络通讯与数据传输等相关功能更加稳定。
标签:单片机;多机通信协议;设计前言单片机技术在网络通讯领域得以广泛应用。
单片机多机通信的发展,单片机技术与计算机网络技术相结合,其功能得到有效的丰富和拓展,更加高效、迅速进行数据信息的采集、传输和处理。
单片机多机通信协议的设计,使单片机多机通信系统的功能更加完善,以更好的应用于多个行业领域当中,对社会信息化建设有着积极的意义。
1 单片机多机通信系统的分析与设计1.1 通信方式和模式单片机多机通信系统的构建,实现了单片机由单向网络向多项网络的转变,促进了单片机技术与计算机网络技术的有机融合。
单片机的通信方式也得到了有效的拓展,产生了多种通信方式和模式,并根据功能的不同予以区分,通过通信方式的选择以及通信模式的确定,充分发挥单片机和计算机网络技术的优势,科学合理的进行单片机多机通信系统设计,使系统功能更加完善。
根据通信速率要求的不同而选择合适的通信方式。
并行通信和串行通信是最主要的两种通信方式,二者之间存在着十分明显的区别。
并行通信一般是对单片机多机通信速率要求较高而选择的通信方式。
在多个并行信道当中进行成组数据的传输,以达到高速通信的效果。
但是该种通信方式具有一定的局限性,尤其是通信距离方面。
为了达到高速通信的目的,需要在数据信号的发送端和接收端之间增加多条线路,显然不适用于远程通信。
因此在进行远程通信时,选择串行通信方式。
串行通信方式相对比较简单,在单条一位宽的传输线之上,按照相应的顺序进行传输。
数据信号的发送端和接收端之间只有一条信道,信息传输速率虽然不如并行通信,但是适用于远程传输,在很大程度上弥补了并行传输的不足。
本科论文--基于单片机的网络通讯协议研究及应用【基于单片机的TCPIP技术研究及应用】

四川理工学院毕业设计(论文)基于单片机的TCP/IP技术研究及应用学生:学号:专业:电子信息工程班级:指导教师:四川理工学院自动化与电子信息学院I摘要今天,嵌入式Internet的应用己经深入到日常生活的各个方面。
研究嵌入式TCP/IP协议在内部资源有限微处理器上的实现,具有重要的现实意义和经济价值。
论文首先介绍了嵌入式系统的组成及对嵌入式Internet产生。
通过对现有的嵌入Internet及比较了目前几种单片机接入Internet实现方案的前提下,应用了一种基于单片机自身特点的具体的解决方案:嵌入式TCP/IP协议。
通过对TCP/IP 网络协议的深入分析,对TCP/IP协议进行合理的简化,将其嵌入到内部资源有限的微处理器中,实现以电子邮件方式进行远程数据传输。
关键字:嵌入式;Internet;TCP/IP;单片机IIABSTRACTNowadays, the application of embedded Internet has come into all aspects of people's daily life. Research the embedded TCP/IP protocol on microprocessor with limited internal resources run,it has important realistic significance and economic value. occurrence of the embedded Internet and composition of the embedded system are summarized in this thesis. Then researching the status in quo of embedded Internet technology and analyzing and comparing several projects, based on the characteristic of 51 MCU, a solution scheme of the connection of MCU and Internet is showed in this paper .embedded TCP/IP protocols. After analyzing the TCP/IP protocols deeply, the TCP/IP protocols have been reasonably simplified, which can be embedded into microprocessor with limited internal resources. Thus, it can realize the long-distance data transmission by E-mail.Key words: Embedded;Internet;TCP/IP;MCUIII目录摘要 ............................................................. I I ABSTRACT ......................................................... I II 第1章引言 . (1)1.1 论文选题的背景及意义 (1)1.2 本文主要工作 (1)第2章方案的选取 (3)第3章网络协议 (5)3.1 TCP/IP分层模型 (5)3.2 数据封装 (6)3.3 数据帧分用 (7)3.4 协议层简介 (8)3.4.1 网际层协议 (8)3.4.1.1 IP地址分配 (9)3.4.1.2 地址解析协议 (10)3.4.1.3 IP分片/重组 (11)3.4.1.4 ICMP协议 (11)3.4.2 传输控制协议 (12)3.4.2.1 TCP连接和释放 (12)3.4.2.2 用户数据报协议 (13)第4章系统总体设计 (14)4.1 硬件总体功能结构设计 (14)4.2 TCP/IP协议层选择及分析 (15)4.2.1 链路层协议选择及分析 (16)4.2.2 网络层协议选择及分析 (16)4.2.3 传输层协议选择及分析 (16)4.2.4 应用层协议选择 (17)第5章TCP/IP协议栈的实现 (19)5.1 ARP协议的实现 (19)5.1.1 ARP分组格式 (19)5.1.2 ARP协议软件实现 (19)5.2 IP协议及其实现 (22)5.2.1 IP数据报格式 (22)5.2.2 IP软件实现 (22)5.3 ICMP报文协议的实现 (24)5.4 TCP协议的实现 (25)5.4.1 TCP的报文段 (25)5.4.2 TCP协议的实现 (26)5.4.2.1 运输控制块TCB (26)5.4.2.2 处理传入数据模块 (27)5.4.2.3 处理数据输出模块 (28)5.4.2.4 定时管理器 (29)5.5 SMTP协议的实现 (31)5.5.1 客户机与服务器之间的交互 (31)5.5.2 SMTP邮件协议的实现 (32)第6章结束语 (34)致谢 (35)参考文献 (36)附录............................................... 错误!未定义书签。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
如何设计单片机常用通信协议论文目录1.自定义数据通信协议 (3)2.上位机和下位机中的数据发送 (3)3.下位机中的数据接收和协议解析 (4)4.上位机中的数据接收和命令处理 (8)5.总结 (9)单片机通信协议现在大部分的仪器设备都要求能过通过上位机软件来操作,这样方便调试,利于操作。
其中就涉及到通信的过程。
在实际制作的几个设备中,笔者总结出了通信程序的通用写法,包括上位机端和下位机端等。
1.自定义数据通信协议这里所说的数据协议是建立在物理层之上的通信数据包格式。
所谓通信的物理层就是指我们通常所用到的RS232、RS485、红外、光纤、无线等等通信方式。
在这个层面上,底层软件提供两个基本的操作函数:发送一个字节数据、接收一个字节数据。
所有的数据协议全部建立在这两个操作方法之上。
通信中的数据往往以数据包的形式进行传送的,我们把这样的一个数据包称作为一帧数据。
类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成部分:帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾。
帧头和帧尾用于数据包完整性的判别,通常选择一定长度的固定字节组成,要求是在整个数据链中判别数据包的误码率越低越好。
减小固定字节数据的匹配机会,也就是说使帧头和帧尾的特征字节在整个数据链中能够匹配的机会最小。
通常有两种做法,一、减小特征字节的匹配几率。
二、增加特征字节的长度。
通常选取第一种方法的情况是整个数据链路中的数据不具有随即性,数据可预测,可以通过人为选择帧头和帧尾的特征字来避开,从而减小特征字节的匹配几率。
使用第二种方法的情况更加通用,适合于数据随即的场合。
通过增加特征字节的长度减小匹配几率,虽然不能够完全的避免匹配的情况,但可以使匹配几率大大减小,如果碰到匹配的情况也可以由校验码来进行检测,因此这种情况在绝大多说情况下比较可靠。
地址信息主要用于多机通信中,通过地址信息的不同来识别不同的通信终端。
在一对多的通信系统中,可以只包含目的地址信息。
同时包含源地址和目的地址则适用于多对多的通信系统。
数据类型、数据长度和数据块是主要的数据部分。
数据类型可以标识后面紧接着的是命令还是数据。
数据长度用于指示有效数据的个数。
校验码则用来检验数据的完整性和正确性。
通常对数据类型、数据长度和数据块三个部分进行相关的运算得到。
最简单的做法可是对数据段作累加和,复杂的也可以对数据进行CR C运算等等,可以根据运算速度、容错度等要求来选取。
2.上位机和下位机中的数据发送物理通信层中提供了两个基本的操作函数,发送一个字节数据则为数据发送的基础。
数据包的发送即把数据包中的左右字节按照顺序一个一个的发送数据而已。
当然发送的方在单片机系统中,比较常用的方法是直接调用串口发送单个字节数据的函数。
这种方法的缺点是需要处理器在发送过程中全程参与,优点是所要发送的数据能够立即的出现在通信线路上,能够立即被接收端接收到。
另外一种方法是采用中断发送的方式,所有需要发送的数据被送入一个缓冲区,利用发送中断将缓冲区中的数据发送出去。
这种方法的优点是占用处理器资源小,但是可能出现需要发送的数据不能立即被发送的情况,不过这种时延相当的小。
对于51系列单片机,比较倾向于采用直接发送的方式,采用中断发送的方式比较占用RAM资源,而且对比直接发送来说也没有太多的优点。
以下是51系列单片机中发送单个字节的函数。
void SendByte(unsigned char ch){SBUF = ch;while(TI == 0);TI = 0;}上位机中关于串口通信的方式也有多种,这种方式不是指数据有没有缓冲的问题,而是操作串口的方式不同,因为PC上数据发送基本上都会被缓冲后再发送。
对于编程来说操作串口有三种方式,一、使用windows系统中自带的串口通信控件,这种方式使用起来比较简单,需要注意的是接收时的阻塞处理和线程机制。
二、使用系统的API直接进行串口数据的读取,在windows和linux系统中,设备被虚拟为文件,只需要利用系统提供的API函数即可进行串口数据的发送和读取。
三、使用串口类进行串口操作。
在此只介绍windows环境下利用串口类编程的方式。
CSerialPort是比较好用的串口类。
它提供如下的串口操作方法:void 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(rcvdat == 0x55) // 接收到帧头第一个数据state_machine = 1;elsestate_machine = 0; // 状态机复位}else if(state_machine == 1){if(rcvdat == 0xAA) // 接收到帧头第二个数据state_machine = 2;elsestate_machine = 0; // 状态机复位}else if(state_machine == 2){if(rcvdat == 0x7E) // 接收到帧头第三个数据state_machine = 3;elsestate_machine = 0; // 状态机复位}else if(state_machine == 3)sumchkm = rcvdat; // 开始计算累加、异或校验和xorchkm = rcvdat;if(rcvdat == m_SrcAdr) // 判断目的地址是否正确state_machine = 4;elsestate_machine = 0;}else if(state_machine == 4){sumchkm +=rcvdat; xorchkm ^=rcvdat;if(rcvdat == m_DstAdr) // 判断源地址是否正确state_machine =5; elsestate_machine = 0;}else if(state_machine == 5){lencnt = 0; // 接收数据计数器rcvcount = rcvdat; // 接收数据长度sumchkm += rcvdat;xorchkm ^=rcvdat;state_machine = 6;}else if(state _machine == 6 || state _machine == 7) {m_ucData[lencnt++] = rcvdat; // 数据保存sumchkm += rcvdat;xorchkm ^= rcvdat;if(lencnt == rcvcount) // 判断数据是否接收完毕state_machine = 8;elsestate_machine = 7;else if(state_machine == 8){if(sumchkm == rcvdat) // 判断累加和是否相等state_machine = 9;elsestate_machine = 0;}else if(state_machine == 9){if(xorchkm == rcvdat) // 判断异或校验和是否相等state_machine = 10;elsestate_machine = 0;}else if(state_machine == 10){if(0x0D == rcvdat) // 判断是否接收到帧尾结束符{retval = 0xaa; // 置标志,表示一个数据包接收到}state_machine = 0; // 复位状态机}此过程中,使用了一个变量state_machine作为协议状态机的转换状态,用于确定当前字节处于一帧数据中的那个部位,同时在接收过程中自动对接收数据进行校验和处理,在数据包接收完的同时也进行了校验的比较。
因此当帧尾结束符接收到的时候,则表示一帧数据已经接收完毕,并且通过了校验,关键数据也保存到了缓冲去中。
主程序即可通过retval的标志位来进行协议的解析处理。
接收过程中,只要哪一步收到的数据不是预期值,则直接将状态机复位,用于下一帧数据的判断,因此系统出现状态死锁的情况非常少,系统比较稳定,如果出现丢失数据包的情况也可由上位机进行命令的补发,不过这种情况笔者还没有碰到。
对于主程序中进行协议处理的过程与此类似,主程序循环中不断的读取串口缓冲区的数据4.上位机中的数据接收和命令处理上位机中数据接收的过程与下位机可以做到完全一致,不过针对不同的串口操作方法有所不同。
对于阻赛式的串口读函数,例如直接进行API操作或者调用windows的串口通信控件,最好能够开启一个线程专门用于监视串口的数据接收,每接收到一个数据可以向系统发送一个消息。
笔者常用的CSerialPort类中就是这样的处理过程。
CSerialPort打开串口后开启线程监视串口的数据接收,将接收的数据保存到缓冲区,并向父进程发送接收数据的消息,数据将随消息一起发送到父进程。
父进程中开启此消息的处理函数,从中获取串口数据后就可以把以上的代码拷贝过来使用。
CSerialPort向父类发送的消息号如下:#define WM_COMM_RXCHAR WM_USER+7 // A character was received and placed in the input buffer.因此需要手动添加此消息的响应函数:afx_msg LONG OnCommunication(WPARAM ch, LPARAMport); ON_MESSAGE(WM_COMM_RXCHAR,OnCommunication)响应函数的具体代码如下:LONG CWellInfoView::OnCommunication(WPARAM ch, LPARAM port){int retval = 0;rcvdat = (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;......5.总结以上给出的是通信系统运作的基本雏形,虽然简单,但是可行。