单片机通讯协议(非常经典)
现在大部分的仪器设备都要求能过通过上位机软件来操作,这样方便调试,利于操作。其 中就涉及到通信的过程。在实际制作的几个设备中,笔者总结出了通信程序的通用写法, 包括上位机端和下位机端等。 1.自定义数据通信协议
这里所说的数据协议是建立在物理层之上的通信数据包格式。所谓通信的物理层就是指我 们通常所用到的RS232、RS485、红外、光纤、无线等等通信方式。在这个层面上,底层软 件提供两个基本的操作函数:发送一个字节数据、接收一个字节数据。所有的数据协议全 部建立在这两个操作方法之上。 通信中的数据往往以数据包的形式进行传送的,我们把这样的一个数据包称作为一帧数 据 。类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成 部分:帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾。
物理通信层中提供了两个基本的操作函数,发送一个字节数据则为数据发送的基础。数据
包的发送即把数据包中的左右字节按照顺序一个一个的发送数据而已。当然发送的方法也 有不同。
在单片机系统中,比较常用的方法是直接调用串口发送单个字节数据的函数。这种方法的 缺点是需要处理器在发送过程中全程参与,优点是所要发送的数据能够立即的出现在通信 线路上,能够立即被接收端接收到。另外一种方法是采用中断发送的方式,所有需要发送 的数据被送入一个缓冲区,利用发送中断将缓冲区中的数据发送出去。这种方法的优点是 占用处理器资源小,但是可能出现需要发送的数据不能立即被发送的情况,不过这种时延 相当的小。对于51系列单片机,比较倾向于采用直接发送的方式,采用中断发送的方式比 较占用RAM资源,而且对比直接发送来说也没有太多的优点。以下是51系列单片机中发送 单个字节的函数。 void SendByte(unsigned char ch) { SBUF = ch; while(TI == 0); TI = 0; }
协议解析的目的,首先判断数据包的完整性,正确性,然后提取数据类型,数据等数据, 存放起来用于主程序处理。代码如下: if(state_machine == 0) { // 协议解析状态机
if(rcvdat == 0x55) // 接收到帧头第一个数据 state_machine = 1; else state_machine = 0; // 状态机复位 } else if(state_machine == 1) { if(rcvdat == 0xAA) // 接收到帧头第二个数据 state_machine = 2; else state_machine = 0; // 状态机复位 } else if(state_machine == 2) { if(rcvdat == 0x7E) // 接收到帧头第三个数据 state_machine = 3; else state_machine = 0; } // 状态机复位
串口初始化成功后,调用此函数即可向串口发送数据。为了避免串口缓冲所带来的延时, 可以开启串口的冲刷机制。 3.下位机中的数据接收和协议解析
下位机接收数据也有两种方式,一、等待接收,处理器一直查询串口状态,来判断是否接 收到数据。二、中断接收。两种方法的优缺点在此前的一篇关于串口通信的文章中详细讨 论过。得出的结论是采用中断接收的方法比较好。
数据包的解析过程可以设置到不同的位置。如果协议比较简单,整个系统只是处理一些简 单的命令,那么可以直接把数据包的解析过程放入到中断处理函数中,当收到正确的数据 包的时候,置位相应的标志,在主程序中再对命令进行处理。如果协议稍微复杂,比较好 的方式是将接收的数据存放于缓冲区中,主程序读取数据后进行解析。也有两种方式交叉 使用的,比如一对多的系统中,首先在接收中断中解析“连接”命令,连接命令接收到后 主程序进入设置状态,采用查询的方式来解析其余的协议。
帧头和帧尾用于数据包完整性的判别,通常选择一定长度的固定字节组成,要求是在整个 数据链中判别数据包的误码率越低越好。减小固定字节数据的匹配机会,也就是说使帧头 和帧尾的特征字节在整个数据链中能够匹配的机会最小。通常有两种做法,一、减小特征 字节的匹配几率。二、增加特征字节的长度。通常选取第一种方法的情况是整个数据链路 中的数据不具有随即性,数据可预测,可以通过人为选择帧头和帧尾的特征字来避开,从 而减小特征字节的匹配几率。使用第二种方法的情况更加通用,适合于数据随即的场合。 通过增加特征字节的长度减小匹配几率,虽然不能够完全的避免匹配的情况,但可以使匹 配几率大大减小,如果碰到匹配的情况也可以由校验码来进行检测,因此这种情况在绝大 多说情况下比较可靠。
上位机中关于串口通信的方式也有多种,这种方式不是指数据有没有缓冲的问题,而是操 作串口的方式不同,因为PC上数据发送基本上都会被缓冲后再发送。对于编程来说操作串 口有三种方式,一、使用windows系统中自带的串口通信控件,这种方式使用起来比较简 单,需要注意的是接收时的阻塞处理和线程机制。二、使用系统的API直接进行串口数据 的读取,在windows和linux系统中,设备被虚拟为文件,只需要利用系统提供的API函数即 可进行串口数据的发送和读取。三、使用串口类进行串口操作。在此只介绍windows环境 下利用串口类编程的方式。 CSerialPort是比较好用的串口类。它提供如下的串口操作方法: void WriteToPort(char* string, int len);
以下给出具体的实例。在这个系统中,串口的命令非常简单。所有的协议全部在串口中断 中进行。数据包的格式如下: 0x55, 0xAA, 0x7E, 0x12, 0xF0, 0x02, 0x23, 0x45, SUM, XOR, 0x0D 其中0x55, 0xAA, 0x7E为数据帧的帧头,0x0D为帧尾,0x12为设备的目的地址,0xF0为源地址,0x02为数据 长度,后面接着两个数据0x23, 0x45,从目的地址开始结算累加、异或校验和,到数据的最后一位结束。
地址信息主要用于多机通信中,通过地址信息的不同来识别不同的通信终端。在一对多的 通信系统中,可以只包含目的地址信息。同时包含源地址和目的地址则适用于多对多的通 信系统。
数据类型、数据长度和数据块是主要的数据部分。数据类型可以标识后面紧接着的是命令 还是数据。数据长度用于指示有效数据的个数。
校验码则用来检验数据的完整性和正确性。通常对数据类型、数据长度和数据块三个部分 进行相关的运算得到。最简单的做法可是对数据段作累加和,复杂的也可以对数据进行CR C运算等等,可以根据பைடு நூலகம்算速度、容错度等要求来选取。 2.上位机和下位机中的数据发送
单片机常用通信协议
单片机常用通信协议单片机常用通信协议有UART、I2C、SPI、CAN等。
1. UART(Universal Asynchronous Receiver / Transmitter,通用异步收发器):UART是一种非同步的通信协议,由收发器两端的时钟不一致所产生,使用UART进行数据传输时,在发送端需要以固定的波特率将数据字节流发出,接收端需要根据这个波特率解读出发送端发送的数据。
2. I2C(Inter-Integrated Circuit,现代总线):I2C是一种非常古老的半双工的现代总线,其特点是使用两根总线(SDA,SCL)来传输数据,可以连接多个设备,也可以支持设备之间的通信。
在这个总线上,有一个主设备和多个从设备,主设备控制整个网络的通信,从设备只能接受主设备下发的指令并进行响应。
3. SPI(Serial Peripheral Interface,串行外围接口):SPI是一种全双工的,同步的通信协议,它需要4根信号线:MOSI(Master Out Slave In,主机输出从机输入)、MISO(Master In Slave Out,主机输入从机输出)、SCK(Serial Clock,时钟信号)和CS(Chip Select,片选信号),在这个总线上,总线上有一个主机和多个从机,主机控制数据的传输,从机只能接受主机发来的指令,并作出相应的响应。
4. CAN(Controller Area Network,控制器区域网络):CAN是一种广泛应用的多点总线,它可以连接多个设备,使这些设备之间可以相互通信,它采用两根线(CANH,CANL)来传输数据,也就是说,多个设备可以通过这两根线来进行数据传输。
CAN总线上没有主从之分,所有节点都可以向网络中发送和接收数据,这个总线可以有效防止因传输的数据位错误而导致的故障。
单片机的通信接口及通信协议概述
单片机的通信接口及通信协议概述随着科技的快速发展,单片机已经成为许多电子产品的核心部分。
而单片机的通信接口及通信协议则扮演着连接与控制外围设备的重要纽带。
本文将对单片机的通信接口及通信协议进行概述,帮助读者了解单片机通信的基本原理与应用。
一、串行通信接口串行通信接口是单片机与外部设备进行数据传输的一种常用方式。
它通过将数据一位一位地顺序传送,使得通信过程更加可靠。
常见的串行通信接口有UART、SPI和I2C。
1. UART(Universal Asynchronous Receiver Transmitter,通用异步收发器):UART是一种最基本的串行通信接口,实现简单,广泛应用于单片机的串口通信。
UART通过将数据以异步的方式进行传输,即发送端和接收端的时钟不同步,可以实现双向通信。
2. SPI(Serial Peripheral Interface,串行外围接口):SPI是一种同步的串行通信接口,适用于单片机与外部设备之间的高速数据传输。
SPI通信主要通过四根线进行,分别是时钟线、数据输入线、数据输出线和片选线。
SPI可以支持单主单从、单主多从和多主多从的通信方式。
3. I2C(Inter-Integrated Circuit,集成电路互连):I2C是一种双线制的串行通信接口,适用于单片机与多个外部设备之间进行数据传输。
I2C接口通常有两根线,即串行数据线(SDA)和串行时钟线(SCL)。
I2C采用主从模式,其中主机由单片机担任,从机可以是各种外围设备。
二、并行通信接口并行通信接口是一种同时传输多个位的通信方式,可以实现更高的数据传输速率。
常见的并行通信接口有GPIO(General PurposeInput/Output,通用输入输出)、外部总线接口等。
1. GPIO:GPIO是单片机通用的输入输出引脚,可以用来与外部设备进行并行通信。
通过对GPIO引脚的电平控制,单片机可以进行数据的输入和输出。
通用单片机通讯协议(ASCII)
1、在单片机中定义从地址0开始的数据类型为BYTE型的变量:
则在组态王中定义相应的变量的寄存器为X0、X1、X2、X3、X4。。。。。。。。,数据类型为BYTE,每个变量占一个字节
2、在单片机中定义从地址100开始的数据类型为UINT型的变量:
则在组态王中定义相应的变量的寄存器为X100、X102、X104、X106、X108。。。。。。。。,数据类型UINT,每个变量占两个字节
bit3bit2 =1x,数据类型为浮点数。
数据地址:2字节4个ASCII码,0x0000~0xffff
数据字节数:1字节2个ASCII码,1—100,实际读写的数据的字节数。
数据…:为实际的数据转换为ASCII码,个数为字节数乘2。
异或:异或从设备地址到异或字节前,异或值转换成2个ASCII码
CR:0x0d。
46
30
30
30
46
30
34
31
30
46
46
46
46
30
30
字头
设备地址15
标志
写操作
浮点型
打包
数据地址15
数据字节数4
数据65535
30
30
0d
异或
若正确:
40
30
46
23
23
37
36
0d
字头
设备地址15
##
异或
若不正确:
40
30
46
2a
2a
37
36
0d
字头
设备地址15
**
异或
5.浮点数格式:
4字节浮点数=第一字节高4位ASCII码+第一字节低4位ASCII码
32单片机通信协议
32单片机通信协议32单片机通信协议本协议由以下双方共同制定并遵守:甲方:地址:法定代表人:联系电话:电子邮件:乙方:地址:法定代表人:联系电话:电子邮件:一、基本信息1. 本协议的目的是规定甲乙双方在32单片机通信中的权利和义务,以确保通信的有效性和安全性。
2. 本协议具有法律效力,双方应遵守中国相关法律法规。
二、各方身份、权利、义务、履行方式、期限、违约责任1.甲方身份:甲方是32单片机通信的使用者。
2.甲方权利:在使用32单片机通信的过程中,甲方有权要求乙方保证通信的顺利进行,并提供必要的技术支持和帮助。
3.甲方义务:甲方应按照32单片机通信的要求进行使用,并承担由于自身原因引起的通信故障和其他后果的责任。
4.乙方身份:乙方是32单片机通信的提供者。
5.乙方权利:乙方有权要求甲方按照本协议规定进行使用,并有权采取措施保障通信的安全、稳定和有效。
6.乙方义务:乙方应提供可靠、准确的技术支持和服务,保障32单片机通信的正常运行,并承担由于自身原因引起的通信故障和其他后果的责任。
7.履行方式:甲乙双方应通过书面或电子邮件等方式确认通信细节和相关事项。
8.期限:本协议自甲乙双方签署之日起生效,有效期为协议期限。
9.违约责任:如甲乙双方任何一方违反本协议的规定,未能履行相关义务,给对方造成损失的,应承担相应的法律责任。
三、冲突解决在履行本协议过程中,如发生任何争议,应通过友好协商解决。
如不能协商解决的,应向当地法院提起诉讼。
四、附则1.本协议可以由双方共同协商修改,修改内容应经过双方书面确认生效。
2.本协议与中国相关法律法规不一致的,依照中国法律法规的规定执行。
3.本协议未尽事宜,由双方协商处理。
单片机通讯协议有哪些
单片机通讯协议有哪些单片机通讯协议是指在单片机系统中,不同设备之间进行通讯时所遵循的规定和约定。
在实际的单片机应用中,通讯协议起着非常重要的作用,它决定了不同设备之间的数据交换方式和通讯流程。
下面我们将介绍一些常见的单片机通讯协议。
1. 串行通讯协议。
串行通讯协议是一种通过串行线路进行数据传输的通讯方式,常见的串行通讯协议包括UART、SPI和I2C。
UART(Universal Asynchronous Receiver/Transmitter)是一种异步串行通讯协议,它通过一根传输线路进行数据的串行传输,适用于中短距离通讯。
SPI(Serial Peripheral Interface)是一种同步串行通讯协议,它使用四根线路进行通讯,包括时钟线、数据线、主从选择线和从机输出线,适用于高速通讯和短距离通讯。
I2C(Inter-Integrated Circuit)是一种双向二线制串行总线,适用于多个设备之间的通讯,可以实现多主机和多从机的通讯。
2. 并行通讯协议。
并行通讯协议是一种通过并行线路进行数据传输的通讯方式,常见的并行通讯协议包括总线协议和并行接口协议。
总线协议是一种多设备共享同一总线进行通讯的协议,常见的总线协议包括ISA、PCI、USB等,适用于多设备之间的通讯和数据交换。
并行接口协议是一种通过并行接口进行数据传输的协议,常见的并行接口协议包括Centronics接口、IEEE-488接口等,适用于打印机、仪器设备等外部设备的通讯。
3. 网络通讯协议。
网络通讯协议是一种通过网络进行数据传输的通讯方式,常见的网络通讯协议包括TCP/IP、UDP、HTTP等。
TCP/IP是一种传输控制协议/因特网协议,它是互联网的核心协议,提供可靠的、面向连接的通讯服务,适用于大规模网络通讯。
UDP(User Datagram Protocol)是一种用户数据报协议,它是一种无连接的通讯协议,适用于实时性要求较高的通讯。
51单片机通讯协议书
51单片机通讯协议书甲方(以下简称甲方):地址:联系电话:乙方(以下简称乙方):地址:联系电话:鉴于甲方需开发一款基于51单片机的通讯设备,乙方具备相应的技术能力和经验,双方经友好协商,就51单片机通讯协议的制定与实施达成如下协议:第一条协议目的本协议旨在明确甲方与乙方在51单片机通讯协议开发过程中的权利、义务和责任,确保通讯协议的顺利制定和实施。
第二条协议范围1. 本协议涵盖51单片机通讯协议的制定、测试、优化及最终交付。
2. 乙方应根据甲方的技术要求和标准,开发符合甲方需求的通讯协议。
第三条技术要求1. 乙方应保证所开发的通讯协议满足甲方提出的技术参数和性能指标。
2. 通讯协议应支持至少两种以上的通讯方式,包括但不限于串行通讯、并行通讯等。
3. 乙方应确保通讯协议具有良好的稳定性和兼容性。
第四条交付成果1. 乙方应向甲方提供完整的通讯协议文档,包括但不限于协议说明、接口定义、数据格式等。
2. 乙方应提供通讯协议的源代码,并确保代码的可读性和可维护性。
3. 乙方应提供通讯协议的测试报告,包括测试环境、测试方法和测试结果。
第五条知识产权1. 乙方开发的通讯协议及其源代码的知识产权归甲方所有。
2. 乙方应保证所开发的通讯协议不侵犯任何第三方的知识产权。
第六条保密条款1. 乙方应对在协议开发过程中知悉的甲方商业秘密和技术秘密负有保密义务。
2. 未经甲方书面同意,乙方不得向任何第三方披露、提供或允许第三方使用甲方的商业秘密和技术秘密。
第七条违约责任1. 如乙方未能按照本协议约定的时间和要求完成通讯协议的开发,甲方有权要求乙方承担违约责任。
2. 如乙方开发的通讯协议侵犯了第三方的知识产权,乙方应负责解决相关纠纷,并赔偿甲方因此遭受的一切损失。
第八条协议变更和终止1. 本协议的任何变更或补充均需双方协商一致,并以书面形式确认。
2. 如一方严重违反本协议,另一方有权书面通知对方终止本协议。
第九条争议解决本协议在履行过程中如发生争议,双方应首先通过友好协商解决;协商不成时,任何一方均可向甲方所在地人民法院提起诉讼。
单片机级的内部通讯协议
单片机级的内部通讯协议
甲方(主控单元):
名称:__________
联系电话:__________
乙方(从属单元):
名称:__________
联系电话:__________
鉴于甲乙双方需要建立稳定的内部通讯机制,确保数据传输的可靠性和高效性,双方经协商,达成以下协议:
一、通讯方式
1. 通讯接口:__________(如UART、SPI、I2C)
2. 数据格式:__________(如8位数据,1位停止位)
二、通讯速率
1. 波特率:____bps
三、通讯协议
1. 请求-响应模式
2. 数据包结构:起始符+ 数据长度+ 数据+ 校验码+ 结束符
四、数据传输
1. 主控单元发起请求
2. 从属单元响应并发送数据
3. 主控单元确认接收
五、错误处理
1. 校验失败,重新发送数据
2. 超时未响应,主控单元重试
六、甲方责任
1. 发起通讯请求
2. 处理接收到的数据
3. 发送确认信息
七、乙方责任
1. 监听通讯请求
2. 响应并发送数据
3. 处理校验和重传
八、其他事项
1. 合同一式两份,甲乙双方各持一份
2. 未尽事宜,协商解决;协商不成,提交甲方所在地法院
九、生效条件
本协议自双方签字盖章之日起生效
甲方(签字):_______________ 日期:____年__月__日乙方(签字):_______________ 日期:____年__月__日。
单片机通讯协议
CSerialPort向父类发送的消息号如下:
#define WM_COMM_RXCHAR WM_USER+7 // A character was received and placed in the input buffer.
因此需要手动添加此消息的响应函数:
else
state_machine = 0; // 状态机复位
}
else if(state_machine == 1)
{
if(rcvdat == 0xAA) // 接收到帧头第二个数据
state_machine = 2;
else
state_machine = 5;
else
state_machine = 0;
}
else if(state_machine == 5)
{
lencnt = 0; // 接收数据计数器
rcvcount = rcvdat; // 接收数据长度
state_machine = 0; // 状态机复位
}
else if(state_machine == 2)
{
if(rcvdat == 0x7E) // 接收到帧头第三个数据
state_machine = 3;
else
state_machine = 0; // 状态机复位
通信中的数据往往以数据包的形式进行传送的,我们把这样的一个数据包称作为一帧数据。类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成部分:帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾。
帧头和帧尾用于数据包完整性的判别,通常选择一定长度的固定字节组成,要求是在整个数据链中判别数据包的误码率越低越好。减小固定字节数据的匹配机会,也就是说使帧头和帧尾的特征字节在整个数据链中能够匹配的机会最小。通常有两种做法,一、减小特征字节的匹配几率。二、增加特征字节的长度。通常选取第一种方法的情况是整个数据链路中的数据不具有随即性,数据可预测,可以通过人为选择帧头和帧尾的特征字来避开,从而减小特征字节的匹配几率。使用第二种方法的情况更加通用,适合于数据随即的场合。通过增加特征字节的长度减小匹配几率,虽然不能够完全的避免匹配的情况,但可以使匹配几率大大减小,如果碰到匹配的情况也可以由校验码来进行检测,因此这种情况在绝大多说情况下比较可靠。
单片机串口通讯协议-(双篇)
单片机串口通讯协议合同编号:_______甲方(委托方):__________乙方(受托方):__________根据《中华人民共和国合同法》及相关法律法规的规定,甲乙双方在平等、自愿、公平、诚实信用的原则基础上,就甲方委托乙方开展单片机串口通讯协议开发项目事宜,经友好协商,达成以下协议:一、项目名称:单片机串口通讯协议开发项目二、项目内容:甲方委托乙方开发一套适用于单片机的串口通讯协议,以满足甲方在产品开发过程中的需求。
三、项目周期:本协议签订之日起至____年__月__日止。
四、项目费用及支付方式:1. 项目费用共计人民币(大写):____元整(小写):¥_____元。
2. 甲方应在本协议签订后__个工作日内,向乙方支付合同总金额的__%作为预付款,即人民币(大写):____元整(小写):¥_____元。
3. 剩余款项人民币(大写):____元整(小写):¥_____元,待项目验收合格后一次性支付。
五、项目验收:1. 乙方应在项目周期内完成协议约定的开发任务,并将开发成果提交甲方验收。
2. 甲方应在收到乙方提交的开发成果后__个工作日内进行验收,并将验收结果通知乙方。
3. 如验收合格,甲方应按照本协议第四条的约定支付剩余款项;如验收不合格,乙方应根据甲方的意见进行修改,直至验收合格。
六、知识产权:1. 乙方保证其开发的单片机串口通讯协议不侵犯任何第三方的知识产权。
2. 乙方同意将其开发的单片机串口通讯协议的全部知识产权转让给甲方,甲方享有该协议的著作权、专利权、商标权等一切权益。
七、保密条款:1. 双方在签订本协议及履行本协议过程中所获悉的对方的商业秘密、技术秘密、市场信息等保密信息,应予以严格保密,未经对方书面同意,不得向任何第三方披露。
2. 本协议终止后,双方仍需遵守本条款的保密义务。
八、违约责任:1. 任何一方违反本协议的约定,导致协议无法履行或造成对方损失的,应承担违约责任,向对方支付相应的赔偿金。
单片机协议
单片机协议1. 简介单片机协议是指用于单片机与外部设备进行通信和数据交换的一套规约和约定。
在单片机系统中,为了实现与其他硬件或软件模块之间的通信,需要制定一种统一的协议,以确保数据的正确性和可靠性。
本文将介绍常见的单片机协议及其特点,包括I2C、SPI和UART等。
2. I2C协议2.1 概述I2C(Inter-Integrated Circuit)是由飞利浦公司(Philips)开发的串行通信协议,用于在单片机和外部设备之间传输数据。
I2C协议采用同步通信方式,使用两根线路(时钟线和数据线)进行通信。
其中,时钟线由主设备控制,数据线用于双向传输数据。
2.2 特点•主从结构:I2C协议中设备分为主设备(Master)和从设备(Slave)。
主设备负责发起和控制通信过程,从设备则按照主设备的指令进行响应。
•多主设备:I2C协议支持多个主设备同时连接到同一条总线上,并通过仲裁机制解决冲突问题。
这使得多个设备可以共享同一个总线,实现了设备间的灵活交互。
•速率可变:I2C协议支持根据需要动态调整通信速率,最高可以达到400Kbps。
2.3 通信流程I2C通信的基本流程如下:1.主设备发出起始信号(Start),指定通信的目标从设备和读写方向。
2.主设备发送从设备地址,从设备根据接收到的地址进行匹配。
3.从设备响应主设备,确认通信建立成功。
4.主设备发送或接收数据,每一位数据都由从设备确认。
5.主设备发出停止信号(Stop),终止通信。
3. SPI协议3.1 概述SPI(Serial Peripheral Interface)是一种全双工、同步、串行通信协议,常用于单片机与外设之间的快速数据传输。
SPI协议通常由一个主设备(Master)和一个或多个从设备(Slave)组成,其中主设备负责控制通信过程。
3.2 特点•硬件控制:SPI协议通过引脚的硬件连接和信号控制实现通信,具有高速传输和实时性强的特点。
•单主设备:SPI协议中只能有一个主设备,主设备发起通信,并负责时钟的控制和数据的传输。
