通用单片机通讯协议(HEX)

合集下载

C8051F读取hex文件

C8051F读取hex文件

如何从单片机中读出hex文件注意:本教程只在单片机程序未加密的情况下验证有效,其他未知!以C8051F020为例:1.下载C8051F编程器(可百度自行搜索)。

通过搜索网络上有几个版本,比如新华龙电子的V6.00版本,以及鸿翼电子的V1.1版本与V2.1版本,我用的时候用的“鸿翼电子C8051F编程器V1.1”,因为新华龙电子的V6.00版本总是出现找不到设备的错误,鸿翼电子V2.1版本读出操作失败,各编程器界面如下图所示。

图1 新华龙电子C8051F编程器V6.00版本界面图2鸿翼电子C8051F编程器V1.1界面图3鸿翼电子C8051F编程器V2.1界面具体的操作步骤如下:1.将仿真器与目标板以及计算机进行连接。

打开下载的软件,选择编程接口形式,我用的JTAG口,所以选择JTAG,然后点击“连接目标芯片”图4 选择JTAG接口2.连接成功后,会出现目标单片机的型号,如图所示图5 出现芯片型号3.连接成功后点击“读出”,等待片刻会跳出窗口,选择保存位置以及名字后,就完成了Hex文件的读取。

(1)出现正在读出…界面图6 正在读出界面(2)出现保存窗口图7 读出程序文件界面(3)此处我保存的名字设置为myhex,保存位置为桌面图8 程序保存界面(4)保存成功后,出现“读出程序已保存至myhex.hex”图9 程序保存成功界面4.至此完成hex文件的读取。

如果想直接将hex文件烧写到单片机内,连接成功后,选择“打开编辑文件”,选择你要烧写的文件,然后选则“写入”即可。

希望对你有用!为了验证读出的程序有效,将单片机程序擦除后,将读出的hex文件烧写入其中,经验证有效。

桑葚2015.10.26。

通用单片机通讯协议(ASCII)

通用单片机通讯协议(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码

单片机通讯协议有哪些

单片机通讯协议有哪些

单片机通讯协议有哪些单片机通讯协议是指在单片机系统中,不同设备之间进行通讯时所遵循的规定和约定。

在实际的单片机应用中,通讯协议起着非常重要的作用,它决定了不同设备之间的数据交换方式和通讯流程。

下面我们将介绍一些常见的单片机通讯协议。

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)是一种用户数据报协议,它是一种无连接的通讯协议,适用于实时性要求较高的通讯。

单片机烧录用的hex文件,文件格式解析(转载)

单片机烧录用的hex文件,文件格式解析(转载)

单⽚机烧录⽤的hex⽂件,⽂件格式解析(转载)含有单⽚机的电⼦产品在量产的时候会⽤到.hex⽂件或者.bin。

hex是⼗六进制的,包含地址信息和数据信息,⽽bin⽂件是⼆进制的,只有数据⽽不包含地址。

任何⽂件都有⼀定的格式规范,hex⽂件同样具有完整的格式规范。

今天和⼤家分享⼀下,hex是如何解析的。

⼀、hex⽂件解析hex⽂件可以通过UltraEdit、Notepad++、记事本等⼯具打开,⽤Notepad++打开之后会看到如下数据内容。

使⽤Notepad++打开后会不同含义的数据其颜⾊不同。

每⾏数据都会有⼀个冒号开始,后⾯的数据由:数据长度、地址、标识符、有效数据、校验数据等构成。

以上图的第⼀⾏为例,进⾏解析:第1个字节10,表⽰该⾏具有0x10个数据,即16个字节的数据;第2、3个字节C000,表⽰该⾏的起始地址为0xC000;第4个字节00,表⽰该⾏记录的是数据;第5-20个字节,表⽰的是有效数据;第21个字节73,表⽰前⾯数据的校验数据,校验⽅法:0x100-前⾯字节累加和;其中,第4个字节具有5种类型:00-05,含义如下:字段含义00表⽰后⾯记录的是数据01表⽰⽂件结束02表⽰扩展段地址03表⽰开始段地址04表⽰扩展线性地址05表⽰开始线性地址单⽚机的hex⽂件以00居多,都⽤来表⽰数据。

hex⽂件的结束部分如下图所⽰。

最后⼀⾏的01表⽰⽂件结束了,最后的FF表⽰校验数据,由0x100-0x01=0xFF得来。

⼆、扩展地址细⼼的同学可能发现了,上⾯的地址都是两个字节,范围从0x000-0xFFFF,如果地址是0x17FFFF该怎么办呢?这就要⽤到扩展字段了,举例如下:第⼀⾏中,第⼀个字节为0x02,表⽰只有两个字节的数据,⽽扩展段的标识符为0x04表⽰后⾯的数据0x0800为扩展线性地址,基地址的计算⽅法为:(0x0800<<16)=0x08000000,在0x04标识段出现之前,下⾯的数据都是这个基地址。

Onenet通讯协议(扩展版) (2)

Onenet通讯协议(扩展版) (2)

一,Onenet通讯TCP透传通讯协议方式介绍1,工作流程工作流程如下:(1)连接Onetnet (2)维持报文(3)心跳报文(4)其他相关通讯报文注意事项:(1)设备与后台通讯,两个通讯报文的时间间隔必须大于5s,否则可能出现我们的服务器会接受不到的情况。

2,连接Onenet协议连接的IP地址:183.230.40.40 端口:1811单片机第一条连接报文如下格式*PID#AuthCode#ParserName*鉴权信息(AuthCode)不能全部是数字,系统在每个输入的健全信息的前面默认增加了一个字母o,例如你输入的鉴权信息是1112122.而你实际要连接设备的鉴权信息应该是o1112122.(大于12个字符的鉴权信息才会自动增加o,小于12的不增加任何字符)测试服务器用命令1,正式服务器用命令2命令1:*113883#o1112555555555122#protocal*命令2:*119818#o1112555555555122#protocal*连接成功Onenet不做回复,如果连接失败,则Onenet直接中断TCP连接PID是onenet虚拟产品的ID—----固定值AuthCode是GPRS模块的15位的IMEI码(可以任意长度),通过后台网站输入ParserName通讯协议解析脚本名称—---固定值每个新的连接报文发送成功后,上一个已经连接的设备会被中断,所以如果想和Onenet 虚拟设备通讯,必须先发送连接报文。

3,心跳报文以及其他通讯报文只有连接报文通过了认证,才能发送心跳报文和其他通讯报文。

4,报文的通信格式说明报文通讯采用ASCII码的方式进行传输,并且采用特殊符号界定报文的长短5,操作码说明操作码的目的就是防止服务器和设备的数据不一致造成的,一般单片机开机校验操作码,如果发现操作码不一致,则需要从服务器导入所有参数。

操作一般是在设备或者服务器执行参数写操作的时候才更改,参数执行读操作不更改操作码6,设备通讯报文约束7,关键字FF模板:针对于配方参数比较少的情况,主要针对于售货机,设备型号是FFXXEE模板:主要针对于咖啡机等配方参数多的情况,设备型号是EEXX二,报文结构1,板卡主动上传服务器报文结构表1 板卡请求报文(板卡主动上传报文)注1:CRC校验是针对帧起始符与CRCL之间的字符流,不是字节流进行的校验。

单片机hex和bin文件的区别

单片机hex和bin文件的区别

单片机hex和bin文件的区别
ex文件是可以烧写到单片机中,被单片机执行的一种文件格式,生成Hex文件的方式由很多种,可以通过不同的编译器将C程序或者汇编程序编译生成hex。

 Hex文件如果用特殊的程序来查看(一般记事本就可以实现)。

打开后可发现,真个文件以行为单位,每行以冒号开头,内容全部为16进制码。

Hex文件可以按照如下的方式进行拆分来分析其中的内容:
 例如:
 :020*********FA , 我把它看做0x02 0x00 0x00 0x04 0x00 0x00 0xFA
 第一个0x02 为数据长度。

 紧跟着后面的0x00 0x00 为地址。

 再后面的0x04为数据类型,类型共分以下几类:
 ‘00’ Data Record
 ‘01’ End of File Record。

mcu hex命名规则

mcu hex命名规则

mcu hex命名规则摘要:1.mcu hex 命名规则简介2.mcu hex 文件结构3.mcu hex 文件中的数据存储4.mcu hex 文件与烧写工具的配合5.mcu hex 文件的应用领域正文:1.mcu hex 命名规则简介MCU(Microcontroller Unit,微控制器单元)HEX(Hexadecimal,十六进制)是一种用于描述微控制器程序的文件格式。

它包含了微控制器程序的指令和数据,以及相关的配置信息。

HEX 文件以十六进制数表示数据,可以被大多数微控制器理解和执行。

mcu hex 命名规则主要体现在文件名的命名上,通常包含芯片型号、程序版本号等信息。

2.mcu hex 文件结构HEX 文件由一系列记录组成,每个记录包含一个或多个数据块。

数据块可以是程序代码、数据、符号表等。

每个数据块包含一个起始地址、数据长度和数据。

数据以十六进制表示,每行可以包含多个数据块。

同时,HEX 文件还包含一个文件头和一个文件尾,用于描述文件的总体信息。

3.mcu hex 文件中的数据存储在HEX 文件中,数据存储分为程序代码和数据区。

程序代码区包含微控制器的指令,用于实现特定的功能。

数据区包含程序运行所需的数据,如常量、变量等。

此外,HEX 文件中还可以包含符号表,用于存储程序中的符号信息,如函数名、变量名等。

4.mcu hex 文件与烧写工具的配合烧写工具负责将HEX 文件中的数据写入到微控制器的存储器中。

烧写工具在烧写之前需要对HEX 文件进行解析,识别出程序代码和数据区,并将它们写入到微控制器的相应存储区域。

烧写工具的选择需要根据具体的微控制器型号和编程器类型进行。

5.mcu hex 文件的应用领域MCU HEX 文件广泛应用于嵌入式系统开发。

无论是使用汇编语言、C 语言还是其他编程语言编写的程序,都可以通过烧写工具将其转换成HEX 文件,以便进行程序的下载和调试。

HEX 文件在PCB 设计、单片机开发、物联网等领域都有广泛的应用。

单片机常用输出格式--Hex-80(Hex 386)

单片机常用输出格式--Hex-80(Hex 386)

单片机常用输出格式--Hex-80(Hex 386)单片机常用输出格式--Hex-80(Hex 386)我前面曾经介绍了Intel 32 bit Hex,但并不是所有的.hex 文件都属于这种格式。

Keil 输出的hex 文件则是另外一个类似的格式Hex-80。

与前者类似,纪录的格式为::LLAAAARRDDDDDDDDCCLL: Length field-长度段:数据段(D)的字节数AAAA: Address field-地址段:数据段第一个字节的地址RR: Record type- 纪录类型,00 代表数据,01 代表纪录结束DD..: Data field-数据段CC: CheckSum field-校验和:计算方法是将本条记录冒号开始的所有对字母所表示的十六进制数字都加起来然后模除256 得到的余数最后求出余数的补码即是本效验字节cc.例子::011B50002272LL = 0x01AAAA =0x1B50RR=0x00DD=0x22CHECK SUM = ~((0x01+0x1B+0x50+0x22)&0xFF)+1 = 0x72 与Intel 32 不同,由于Hex-80 用于64K 地址范围以内的系统,所以没有基址设定的指令。

如果在Keil-51 中,用跨BANK 的方式超过了64K,编译器会产生多个HXX 文件来标识BANK。

如:test.h00test.h01test.h02 分别在每个bank 的视角来产生64K 代码空间。

对于Common Bank 由于其在每个Bank 的视角中都存在,所以在几个文件中都有同样的存在,这点要求编程人员注意。

还有,貌似Keil 产生的Hex-80 文件地址并不连续~天晓得Keil 为什么不规整一下。

tips:感谢大家的阅读,本文由我司收集整编。

仅供参阅!。

单片机,认识HEX文件

单片机,认识HEX文件

认识HEX文件作者:林申茂看过几篇常用指令的用法后,我们换换口味,介绍一下Intel 原厂所公布的HEX文件标准格式,相信经过本文的介绍,一定可以让您对8051的操作有更进一步的认识。

以下是一个程序经编译器编译后所得到的HEX文件内容:Example.hex行号原始码1 : 10 0000 00 020003787FE4F6D8FD75812B02004A02 D62 :10001000008FE493A3F8E493A34003F68001F208713 :10002000DFF48029E493A3F85407240CC8C333C4354 :10003000540F4420C8834004F456800146F6DFE4A05 :10004000800B01020408102040809000C2E47E01716 :100050009360BCA3FF543F30E509541FFEE493A3137 :1000600060010ECF54C025E060A840B8E493A3FAF78 :10007000E493A3F8E493A3C8C582C8CAC583CAF0B19 :10008000A3C8C582C8CAC583CADFE9DEE780BEE43210 :10009000F52AF52BE52B25E02408F8E6F52808E6F711 :1000A000F529F590E528F5B07F707E171200E6057A12 :1000B0002BE52B7002052AC39410E52A940040D44613 :1000C00080CD20200800010002000400080010007C14 :1000D000200040008001000200040008001000200115 :1000E000004000800000D3EF9400EE94004007EF4216 :0700F0001F70F31E80F022D717 :00000001FF面对这一大串的十六进制码,有没有头昏眼花的感觉呢?别急别急,经过本文的介绍,你一定会爱上这个会让你头昏眼花的机器码的!首先我们先介绍HEX文件的编码格式,举范例程序中第一行说明:: 10000000020003787FE4F6D8FD75812B02004A02D612 3 4 5 6为了方便解说,笔者将原始码以空格区分成六个部分,在实际转换的原始内容应该没有空格也没有行号的。

【转】常用PLC通讯协议

【转】常用PLC通讯协议

【转】常⽤PLC通讯协议三菱FX系列PLC通讯测试发送帧(Hex):起始(STX)02命令(CMD)30⾸地址(ADDRESS)30 30 41 30字节数(BYTES)30 31终⽌(ETX)03校验和(SUM)36 35SUM = CMD + ADDRESS + BYTES +ETX校验和计算:30+30+30+41+30+30+31+03=165 累加和超过两位取低两位65发→◇02 30 30 30 41 30 30 31 03 36 35 □从Y0开始读取⼀个BYTE Y7-Y0收←◆02 33 46 03 37 43接收帧(Hex):起始(STX)02数值(DATA)33 46终⽌(ETX)03校验和(SUM)37 43接收帧解析:“33”查ASCII表⽰⼗六进制“3”即“0011”此时继电器Y5、Y4开“46”查ASCII表⽰⼗六进制“F”即“1111”此时继电器Y3、Y2、Y1、Y0开,如下表所⽰:Y7Y6Y5Y4Y3Y2Y1Y0 00 111111向D123开始的两个存储器中写⼊1234,ABCD[17:18:38.339]发→◇02 31 31 30 46 36 30 34 33 34 31 32 43 44 41 42 03 34 39 □[17:18:38.370]收←◆06ACK (06H) 接收正确NAK (15H) 接收错误[17:18:38.339]发→◇02 31 31 30 46 36 30 34 33 34 31 32 43 44 41 42 03 34 39 □[17:18:38.370]收←◆06[17:19:32.687]发→◇02 30 31 30 46 36 30 34 33 34 03 37 34 □[17:19:32.725]收←◆02 33 34 31 32 43 44 41 42 03 44 37 此时读取的数据即写⼊的数据1234,ABCD附表:命令命令码⽬标设备读出软设备状态值0X,Y,M,S,T,C,D向PLC软设备写⼊值1X,Y,M,S,T,C,D 置位7X,Y,M,S,T,C复位8X,Y,M,S,T,C欧姆龙CP1E、CP1H系列PLC通讯测试发送帧:⽬的:读取输出端当前状态[16:13:37.509]发→◇40 30 30 46 41 30 30 30 30 30 30 30 30 30 30 31 30 31 42 30 30 30 36 35 30 30 30 30 30 31 30 37 2A 0D □起始40@PLC地址(默认为00)30 300 0头编码46 41 F A等待时间300*10msICF30 300 0DA230 300 0SA230 300 0SID30 300 0命令码30 31 30 310 1 0 1(读)功能码42 30 B 0存储器编号30 30 36 350 0 6 5存储器位30 300 0读取长度30 30 30 310 0 0 1FCS校验30 370 7结束2A 0D* CRHostLink通讯协议的数据,由4部分组成。

通用单片机通讯协议(HEX)

通用单片机通讯协议(HEX)

一、通讯参数:
通讯参数包括数据位,停止位,波特率、校验方式。

数据位、停止位、波特率由单片机决定。

组态王中的设定和单片机一致即可。

校验方式参照“数据传输格式”中相关部分。

二、数据传输格式:
格式1、组态王发送地址请求格式:(此时检验位为1)
格式2、单片机应答地址格式:(此时检验位为0)
格式3、组态王读数据请求格式:(此时检验位为0)
格式4、单片机应答读数据格式(正确):(此时检验位为0)
格式5、单片机应答读数据格式(错误):(此时检验位为0)
格式6、组态王写数据请求格式:(此时检验位为0)
格式7、单片机应答写数据格式(正确):(此时检验位为0)
三、时序:
读数据:
写数据:
四、协议说明:
数据传输:所有数据均为16进制数
Sta::设备地址1字节
R:读标志1字节(0x52)
W:写标志1字节(0x57)
DataType;需要交换的数据类型,1字节。

1,字节;2,字,3,浮点型。

DataNum:要读取的数据的数量,1字节。

DataAddr;为数据偏移地址2字节,低字节在前,高字节在后Data:实际传输的数据,低字节在前,高字节在后
DataLong: 单片机返回Data的字节数,2字节,低字节在前,高字节在后
CRC:为从第一个字节至CRC前的所有字节的异或值,1字节ErrorCode:
以上协议若有不妥之处,可协商改动。

下载hex文件到单片机失败的解决方案

下载hex文件到单片机失败的解决方案

下载hex文件到单片机失败的解决方案
1. 第一次写hex 文件按照下载程序到单片机的步骤成功下载。

把程序内容深化了一些之后竟发觉hex 文件不能下载到单片机内,出现以下的错误提示:Chinese:正在尝试与MCU/单片机握手连接... 打开串口失败!
Chinese:串口已被其它程序打开或该串口不存在
查看其它的资料,出现这个问题的原因较多,包括:
检查USB 是否连接良好检查的方式为打开启动单片机的开关,看是否有灯亮的显示。

检查串口是否连接良好检查方式就只有用重新连接,重新拧螺丝的方式了,然后重试
STC_ISP 软件本身的不稳定解决方法是重新打开STC_ISP 软件,按照步骤重新下载
驱动程序没有安装好解决方法是重新安装一次驱动程序
还有的就是重新启动电脑的办法(这个不到最后不建议呀)这次我解决此问
题的方法是重新安装了一次驱动程序:
1)在软件盘中找到驱动安装程序SETUP.EXE
2)双击SETUP.EXE,点击驱动安装按钮进行安装
此驱动程序会自动安装,过了一会就会提示安装成功。

注意:据讲师所说的内容,若您用的是64 位系统,则在驱动程序安装完毕以后不会有以上驱动安装成功的提示。

单片机的通信协议

单片机的通信协议

单片机的通信协议一、概述单片机的通信协议是指单片机之间进行数据传输时所遵循的规则和标准。

通信协议的设计和实现是保证单片机之间可靠通信的关键。

二、常见通信协议1.串口通信协议串口通信协议是单片机之间最常见的通信方式。

串口通信协议包括硬件部分和软件部分两个方面。

硬件部分主要指串口接口电路,而软件部分主要指数据传输格式和控制流程。

2.I2C总线协议I2C总线协议是一种基于同步串行传输方式的短距离数据传输标准。

I2C总线协议可以实现多个器件在同一个总线上进行数据交换,具有简单、灵活、可扩展等优点。

3.SPI总线协议SPI总线协议是一种基于同步串行传输方式的短距离数据传输标准。

SPI总线协议可以实现多个器件在同一个总线上进行数据交换,具有高速、简单等优点。

三、设计通信协议的原则1.可靠性原则设计通信协议时必须考虑到数据传输过程中可能出现的各种异常情况,如数据丢失、数据错误等,要通过各种手段保证通信的可靠性。

2.实用性原则设计通信协议时必须考虑到实际应用场景,尽可能地简化通信协议的设计和实现,提高通信效率和可靠性。

3.兼容性原则设计通信协议时必须考虑到不同厂家、不同型号之间的兼容性问题,尽可能地遵循标准化的通信协议。

四、单片机通信协议的实现1.串口通信协议的实现串口通信协议的实现需要涉及到硬件和软件两个方面。

硬件方面需要设计串口接口电路,而软件方面需要编写相应的程序来控制串口接口电路进行数据传输。

2.I2C总线协议的实现I2C总线协议的实现需要涉及到硬件和软件两个方面。

硬件方面需要设计I2C接口电路,而软件方面需要编写相应的程序来控制I2C接口电路进行数据传输。

3.SPI总线协议的实现SPI总线协议的实现需要涉及到硬件和软件两个方面。

硬件方面需要设计SPI接口电路,而软件方面需要编写相应的程序来控制SPI接口电路进行数据传输。

五、总结单片机的通信协议是单片机之间进行数据传输的关键。

设计和实现通信协议需要考虑到可靠性、实用性和兼容性等多个方面,同时需要涉及到硬件和软件两个方面。

[电子工程] 单片机C语言之串口通信协议(代码分享)

[电子工程]  单片机C语言之串口通信协议(代码分享)

现实生活中,我们总是要与人打交道,互通有无。

单片机也一样,需要跟各种设备交互。

例如汽车的显示仪表需要知道汽车的转速及电动机的运行参数,那么显示仪表就需要从汽车的底层控制器取得数据。

而这个数据的获得过程就是一个通信过程。

类似的例子还有控制器通常是单片机或者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),则视为发送方将要发送数据,迅速启动自己的定时器,从而保证了收发双方定时器同步定时。

(6)、停止信号。

发送方发送完最后一个有效位时,必须再将Tx保持1位的时间,即为停止位。

单片机通讯协议(非常经典)

单片机通讯协议(非常经典)
单片机通信协议 现在大部分的仪器设备都要求能过通过上位机软件来操作,这样方便调试,利于操作。其 中就涉及到通信的过程。在实际制作的几个设备中,笔者总结出了通信程序的通用写法, 包括上位机端和下位机端等。 1.自定义数据通信协议
这里所说的数据协议是建立在物理层之上的通信数据包格式。所谓通信的物理层就是指我 们通常所用到的RS232、RS485、红外、光纤、无线等等通信方式。在这个层面上,底层软 件提供两个基本的操作函数:发送一个字节数据、接收一个字节数据。所有的数据协议全 部建立在这两个操作方法之上。 通信中的数据往往以数据包的形式进行传送的,我们把这样的一个数据包称作为一帧数据 。类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成部 分:帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾。
以下给出具体的实例。在这个系统中,串口的命令非常简单。所有的协议全部在串口中断 中进行。数据包的格式如下:
0x55, 0xAA, 0x7E, 0x12, 0xF0, 0x02, 0x23, 0x45, SUM, XOR, 0x0D
其中0x55,
0xAA,
0x7E为数据帧的帧头,0x0D为帧尾,0x12为设备的目的地址,0xF0为源地址,0x02为数据
} else if(state_machine == 10) {
if(0x0D == rcvdat) // 判断是否接收到帧尾结束符 {
retval = 0xaa; // 置标志,表示一个数据包接收到 } state_machine = 0; // 复位状态机 }
此过程中,使用了一个变量state_machine作为协议状态机的转换状态,用于确定当前字节 处于一帧数据中的那个部位,同时在接收过程中自动对接收数据进行校验和处理,在数据 包接收完的同时也进行了校验的比较。因此当帧尾结束符接收到的时候,则表示一帧数据 已经接收完毕,并且通过了校验,关键数据也保存到了缓冲去中。主程序即可通过retval的 标志位来进行协议的解析处理。

13.56MHZ--多功能射频卡读写器协议--HEX

13.56MHZ--多功能射频卡读写器协议--HEX

1.串口UART通讯协议●命令帧格式包头机号命令数据个数数据异或校验包尾STX ID CMD/STAUS LEN DATA BCC ETX 值0x02 0x03长度1字节1字节1字节1字节LEN字节1字节1字节说明包开始标志机号0x00—0xff, 可寻址0—255,在此模块中,却省为0x01发送时为命令,返回时为正确错误状态。

为数据区长度数据区从包头到数据的异或校验包结束标志●命令与数据对照表命令类型功能发送返回命令数据个数数据状态数据个数数据系统命令联机0x00 0x00 0x00 0x00 复位0x01 0x00 0x00 0x00更改波特率0x02 0x01 B波特率波特率号2400 B=0x004800 B=0x019600 B=0x02(出厂默认)14400 B=0x0319200 B=0x0428800 B=0x0557600 B= 0x060x00 0x00控制蜂鸣器0x03 0x04 ABCDA=0x00 蜂鸣器关闭=0x01 蜂鸣器开启=0x02 使蜂鸣器响BCD*10 msBCD: 在A=2的时候表示时间值如果时间为123,则B=0x01C=0x02D=0x030x00 0x00更改机号0x05 0x01 I10进制机号正确=0错误=其他值0x00进入连续读卡模式0x06 0x01 0x00:停止连续读卡0x01:连续读mifare卡序列号0x02:连续读15693序列号正确=0错误=其他值0x00配置芯片可读卡片类型0x07 0x01 TT=0 14443 TYPE AT=1 14443 TYPE BT=2 14443 TYPE CT=3 15693ISO14443 TYPE AMF0 S50、S70、U10卡操作命令呼叫卡0x10 0x00 0x00 0x02 NN0x4400 = ultra_light0x0400 =Mifare_One(S50)0x0200 =Mifare_One(S70)0x4403 =Mifare_DESFire0x0800 = Mifare_Pro0x0403 = Mifare_ProX0x0033 = SHC1105休眠模块0x11 0x00 0x00 0x00读序列号0x12 0x00 0x00 0x04或0x07 NNNN 或NNNNNNN读数据0x13 0x08 BAPPPPPPB: 绝对块号S50:0x00-0x3fS70:0x00-0xffA:=0-PICC_AUTHENT1A=1-PICC_AUTHENT1B=2-NO_AUTHENPPPPPP: 6子节密匙如果PPPPPP=”******“则密码将从EEPROM中进行读取0x00 0x0f DDDDDDDDDDDDDDDD16字节数据写数据0x14 0x18 BAPPPPPPDDDDDDDDDDDDDDDDB: 绝对块号S50:0x00-0x3fS70:0x00-0xffA:=0-PICC_AUTHENT1A=1-PICC_AUTHENT1B=2-NO_AUTHENPPPPPP: 6子节密匙DDDDDDDDDDDDDDDD:16字节数据如果PPPPPP=”******“则密码将从EEPROM中进行读取0x00 0x00修改密匙A 0x15 0x0e BAPPPPPPMMMMMMB: 绝对块号S50:0x00-0x3fS70:0x00-0xffA:=0-PICC_AUTHENT1A=1-PICC_AUTHENT1B=2-NO_AUTHENPPPPPP: 6子节原密匙MMMMMM: 6子节新密匙如果PPPPPP=”******“则密码将从EEPROM中进行读取0x00 0x000x00 0x04 DDDD 读钱包0x16 0x08 BAPPPPPPB: 绝对块号S50:0x00-0x3fS70:0x00-0xffA:=0-PICC_AUTHENT1A=1-PICC_AUTHENT1B=2-NO_AUTHENPPPPPP: 6子节密匙如果PPPPPP=”******“则密码将从EEPROM中进行读取0x00 0x00写钱包0x17 0x0c BAPPPPPPDDDDB: 绝对块号S50:0x00-0x3fS70:0x00-0xffA:=0-PICC_AUTHENT1A=1-PICC_AUTHENT1B=2-NO_AUTHENPPPPPP: 6子节密匙DDDD: 4子节写钱包值(低字节—高字节)如果PPPPPP=”******“则密码将从EEPROM中进行读取加钱包0x18 0x0c BAPPPPPPDDDD0x00 0x00B: 绝对块号S50:0x00-0x3fS70:0x00-0xffA:=0-PICC_AUTHENT1A=1-PICC_AUTHENT1B=2-NO_AUTHENPPPPPP: 6子节密匙DDDD: 4子节加钱包值(低字节—高字节)如果PPPPPP=”******“则密码将从EEPROM中进行读取减钱包0x19 0x0c BAPPPPPPDDDDB: 绝对块号S50:0x00-0x3fS70:0x00-0xffA:=0-PICC_AUTHENT1A=1-PICC_AUTHENT1B=2-NO_AUTHENPPPPPP: 6子节密匙DDDD: 4子节减钱包值(低字节—高字节)如果PPPPPP=”******“则密码将从EEPROM中进行读取0x00 0x00批量读数据0x1A 0x09 BAPPPPPPNB: 开始绝对块编号S50:0x00-0x3fS70:0x00-0xffA:=0-PICC_AUTHENT1A=1-PICC_AUTHENT1B=2-NO_AUTHENPPPPPP: 6子节密匙注:前提条件为各扇区密码一致N: 读取的块个数0x01—0x0c如果PPPPPP=”******“则密码将从EEPROM中进行读取0x00 ? 16*N16*N字节数据休眠卡0x1B 0x00 0x00 0x00 呼叫IDLE卡0x1C 0x00 0x00 0x00 下发EEPROM密码0X28 0x08 SAPPPPPPS: 区号S50:0x00-0x0fA:=0-PICC_AUTHENT1A=1-PICC_AUTHENT1B=2-NO_AUTHENPPPPPP: 6子节密匙0x00 0x00下发EEPROM数据0X29 0x11 BDDDDDDDDDDDDDDDDB: EEPROM块号0x00-0x1fD..D:EEPROM数据0x00 0x00读取EEPROM数据0X2A 0x01 BB: EEPROM块号0x00-0x1f0x00 0x10desfire 复位命令0x20 0x01 0x41 0x00 N N个数据ProCom_CMD 0x21 N N个数据0x00 N N个数据ProPPS_CMD 0x22 N N个数据0x00 N N个数据ISO14443 TYPE BAT88SF020呼叫卡0x30 0x01 AA:=0-REQB=1-WUPB0x00 0x0c NNNNNNNNNNNN12字节序列号密码验证0x33 0x08 PPPPPPPPP…P:8字节密码0x00 0x00读取数据块0x34 0x01 BPPPPPPPPB:1字节数据块号0x00 0x08 DDDDDDDD8字节数据写数据块0x35 0x09 BDDDDDDDDB:1字节数据块号D…D:8字节数据0x00 0x00锁0x36 0x04 DDDDD…D:4字节加锁数据0x00 0x00 计数0x37 0x06 DDDDDDD…D:6字节签名0x00 0x00ATTRIB0x38 0x04 DDDD 0x00 0x00ISO15693 ICODE SLI TAG it 读取单张卡序列号0x50 0x00 0x00 0x09 DSSSSSSSSD:1字节DSFIDS…S:8字节序列号读取多张卡序列号0x51 0x01 N读取卡片的个数0x00 0x09*N DSSSSSSSS…DSSSSSSSSD:1字节DSFIDS…S:8字节序列号获取系统信息0x52 0x09 FSSSSSSSSF:标志Bit4:=1 只有处于SELECT状态的卡执行该命令Bit5: =1只有UID符合的卡执行该命令0x00 0x0e FSSSSSSSSDAPPPF:S…S: 8字节序列号D:1字节DSFIDA:1字节AFIPpp:写DSFID 0x53 0x0A FSSSSSSSSDF:标志Bit4:=1 只有处于SELECT状态的卡执行该命令Bit5: =1只有UID符合的卡执行该命令BIT6:=1 TAGit=0 ICODE SLIS…S: 8字节序列号D:1字节DSFID0x00 0x00锁DSFID 0x54 0x09 FSSSSSSSSF:标志Bit4:=1 只有处于SELECT状态的卡执行该命令Bit5: =1只有UID符合的卡执行该命令BIT6:=1 TAGit=0 ICODE SLIS…S: 8字节序列号0x00 0x00写AFI 0x55 0x0A FSSSSSSSSAF:标志Bit4:=1 只有处于SELECT状态的卡执行该命令Bit5: =1只有UID符合的卡执行该命令BIT6:=1 TAGit=0 ICODE SLIS…S: 8字节序列号A:1字节AFI0x00 0x00锁AFI 0x56 0x09 FSSSSSSSSF:标志Bit4:=1 只有处于SELECT状态的卡执行该命令Bit5: =1只有UID符合的卡执行该命令BIT6:=1 TAGit=0 ICODE SLIS…S: 8字节序列号0x00 0x00读数据块0x57 0x0B FSSSSSSSSBXF:标志=0x22 ICODE SLITAGitEM4034=0x03 EM4035S…S: 8字节序列号B:1字节数据块号X:0x01 0x00 0x04 DDDD4字节数据写数据块0x58 0x0E FSSSSSSSSBDDDD0x00 0x00F:标志=0x22 ICODE SLI=0x62 TAGit=0x02 EM4034=0x03 EM4035S…S: 8字节序列号B:1字节数据块号DDDD:4字节数据0x00 0x00锁数据块0x59 0x0A FSSSSSSSSBF:标志Bit4:=1 只有处于SELECT状态的卡执行该命令Bit5: =1只有UID符合的卡执行该命令BIT6:=1 TAGit=0 ICODE SLIS…S: 8字节序列号B:1字节数据块号2.卡片读写操作注意1、密码控制字千万不要搞错2、VB demo程序的SECOTOR从0--15,BLOCK从0--63 为标准的MIFARE S50卡片。

单片机通信协议规范及选用原则详解

单片机通信协议规范及选用原则详解

单片机通信协议规范及选用原则详解在现代电子设备中,单片机的应用越来越广泛。

而单片机之间的通信协议则成为了设备间进行数据交换的关键。

本文将详细探讨单片机通信协议规范以及选用的原则,帮助读者更好地理解和选择适合自己项目的通信协议。

首先,我们需要明确什么是单片机通信协议。

单片机通信协议是一种规定了数据传输格式和通信流程的标准,不同的协议具有不同的操作特征,通过这些协议,单片机可以在数据交互的过程中实现信息的传输、交换和控制。

通信协议的选择对于整个系统的性能和稳定性非常重要。

接下来,我们将介绍一些常见的单片机通信协议,以及它们的特点和适用场景。

1. UART(通用异步收发传输)协议:UART是一种异步串行通信协议,它使用简单、成本低廉,并且能够在较长距离上进行可靠的通信。

UART协议的特点是发送和接收数据之间没有固定的时间间隔,而是通过起始位、数据位、校验位和停止位来传输数据。

这种协议适用于简单的点对点通信和中等速度的通信需求。

2. SPI(串行外设接口)协议:SPI协议是一种同步串行通信协议,它可以实现高速的数据传输,常用于外设和单片机之间的通信。

SPI协议使用四根线传输数据:时钟线、数据线、主从选择线和片选线。

SPI协议具有快速的数据传输速度和灵活的数据帧格式,适用于对速度要求较高的场景,如存储卡、传感器和显示器等。

3. I2C(串行双向通信总线)协议:I2C协议是一种串行双向通信协议,它可以实现多个设备之间的通信,并且占用的引脚比较少。

I2C协议使用两根线传输数据:时钟线和数据线。

I2C协议具有简单的硬件电路、可靠的错误检测和纠正机制,适用于多个设备之间的通信和控制,如传感器阵列和扩展模块等。

4. CAN(控制器局域网)协议:CAN协议是一种用于实时控制和数据传输的通信协议,特别适用于汽车、工业控制和航空等领域。

CAN协议使用差分信号进行数据传输,具有高可靠性、抗干扰性强和较长的通信距离等特点。

CAN协议还支持多主机通信、广播和多帧数据传输等功能。

单片机与组态王基于ASCII型通讯程序设计

单片机与组态王基于ASCII型通讯程序设计

目前在工业控制现场的仪表较多,传统的数显仪表不能满足实际的需要,需要添加相应的A /D 或D /A 模块转换数据,上位机需要通过配套的下位机数据采集模块获取现场仪表数据,如PLC ,再通过相应通信协议来与下位机通讯进行数据交换,此法成本较高。

本文论述了通过单片机采集现场仪表数据,通过与组态软件提供的通用ASCII 型协议通讯。

实践表明:采用该方式通讯可靠、设计简单、代码可移植性高,实用性较强。

1组态王与单片机通讯协议概述单片机多用来采集现场的信息,如何实现单片机与组态软件进行数据交换?早期主要有DDE 方式、板卡方式等,最新版本组态王提供的单片机通用通讯协议支持HEX 型和ASCII 型,可通过串口直接与单片机通讯。

通讯方式为RS232、RS422、RS485,通讯波特率可达19200bps 。

蔚俊兰、赵学军等人介绍了采用HEX 型通讯协议来实现单片机与组态王通讯。

本文主要详细介绍ASCII 型通用通讯协议实现组态王与单片机通讯,该型具有设计简单,通俗易懂特点,具体参数可以查阅相关技术文档。

2组态王设备配置在实际开发过程中,组态王对ASCII 型通讯协议完全是封装好的。

在程序设计过程中可以采用相应串口监视软件来分析组态王向单片机发送的数据,便于程序设计。

为了实现单片机与组态王的通讯,在组态王中设置的通讯参数如波特率,数据位,停止位,奇偶校验必须与单片机编程中的通讯参数一致。

本文中采用通讯波特率9600bps ,8位数据位,1位停止位,无奇偶验证。

组态王中设置设备地址格式为:##.#。

前面两个字符是设备地址(0~255),此地址为单片机的地址;后面的一个字符是用户设定是否打包,“0”为不打包、“1”为打包。

体参数设定方法可以查阅相关技术文档。

3单片机通讯源程序设计本文的通讯程序采用C 语言设计,通过Keil 开发软件设计了单片机与组态王基于ASCII 码通用通讯程序。

3.1数据定义数据定义主要用于对单片机相关参数进行相应设定,如单片机地址,单片机与组态王通讯命令格式的字头、字尾。

单片机烧录文件HEX文件格式说明

单片机烧录文件HEX文件格式说明

HEX文件格式说明在我讲解《微型计算机控制技术》的时候,一个学生问我关于HEX的内容解释时,我的解释不够清晰,感觉不太,我下课后立刻上网查找收集资料,并且整理如下,同时发给学生一份。

整理如下:概念描述HEX文件格式是一种能够烧写到单片机中,被单片机执行的文件格式。

可以使用不同的编辑器将C 或汇编源文件编译成HEX文件,如IAR,KEIL等。

Hex文件是遵循Hex文件格式的ASCII文本文件。

在Hex文件的每一行中都包含了一个hex记录。

这些记录是由一些代表机器语言代码和常量的16进制数据组成。

Hex文件常用来传输要存储在ROM、EPROM或者Flash中的程序和数据。

大部分的EPROM编程器都能使用Hex文件。

格式介绍Hex由任意数量的十六进制记录组成。

每个记录包含6个域,它们按下列格式排列。

| MARK | RECLEN | OFFSET | RECTYP | DA TA | CHKSUM |,实际表示如下例1::04010C00303230005D用以下表1解释上述格式:1Byte(8 bit)用表 1 HEX格式组成| MARK |——(1Byte)Start Code(冒号):每个HEX记录都由冒号开头;| RECLEN |——(1Byte)Byte count(本行数据长度):是数据长度域,它代表记录中数据的字节量,如例1中的04表示本条记录中有4个字节的数据;| OFFSET |——(2 Byte)Address(本行数据的起始地址):是地址域,它代表记录当中数据的起始地址;如例1中的010C表示本条记录中第一个数据30的地址为010C。

| RECTYP |-----> (1 Byte)Record type(数据类型):是代表HEX记录类型的域,它可能是以下数据当中的一个:例子中的00表示该行为数据记录。

表 2 数据类型对照表| DATA |——(n Byte)Data(数据):是数据域,一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域中指定的数字相符;最多0xFF个。

111MODBUS-RTU-HEX通讯协议06 (1)

111MODBUS-RTU-HEX通讯协议06 (1)

00冷热量表MODBUS-RTU通讯协议冷热量表使用了MODBUS-RTU通讯协议,MODBUS协议定义了校验码、数据序列等, MODBUS 协议在一根通讯线上使用主从应答式连接(半双工)。

MODBUS协议只允许在主机(PC,PLC等)和终端设备之间通讯,而不允许独立的终端设备之间的数据交换,这样各终端设备不会在它们初始化时占据通讯线路,而仅限于响应到达本机的查询信号。

MODBUS-RTU格式无起始字符和结尾字符,但需要加等待时间,等待时间不少于3.5个字符发送时间。

(1)传输方式信息传输为异步方式,并以字节为单位,在主机和从机之间传递的通讯信息是11位字格式,包含1个起始位、8个数据位(最小的有效位先发送)、一个偶校验位、1个停止位。

通讯波特率为2400。

9600,8,1,无校验,地址改02(2)数据帧格式地址码功能码数据区CRC校验码1字节1字节n字节2字节地址码:地址码在帧的开始部分,由一个字节(8位二进制码)组成,十进制为0~255,在热量表中只使用1~247,其它地址保留。

这些位标明了用户指定的终端设备的地址,该设备将接收来自与之相连的主机数据。

每个终端设备的地址必须是唯一的,仅仅被寻址到的终端会响应包含了该地址的查询。

功能码:功能码告诉了被寻址到的终端执行何种功能。

下表列出了该系列仪表用到的功能码,以及它们的意义和功能。

数据区:数据区包含了终端执行特定功能所需要的数据或者终端响应查询时采集到的数据。

这些数据的内容可能是数值、参考地址或者设置值。

例如:功能码告诉终端读取寄存器,数据区则需要指明从哪个寄存器开始及读取多少个数据。

通信应用格式详解(1)功能码03H:读寄存器此功能允许用户获得设备采集与记录的数据及系统参数。

主机一次请求的数据个数没有限制,但不能超出定义的地址范围。

(2)功能码06H:写寄存器功能码06H允许用户改变寄存器的内容,该仪表中地址可用此功能号写入。

热量表支持两条指令1、写热量表地址将地址为1的热表改成地址为13H热表指令具体代码如下:2、读热量表数据:读地址为01H热量表多个寄存器数据具体代码如下:以下从机返回的寄存器数据皆为hex类型数据2014-9-20。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、通讯参数:
通讯参数包括数据位,停止位,波特率、校验方式。

数据位、停止位、波特率由单片机决定。

组态王中的设定和单片机一致即可。

校验方式参照“数据传输格式”中相关部分。

二、数据传输格式:
格式1、组态王发送地址请求格式:(此时检验位为1)
格式2、单片机应答地址格式:(此时检验位为0)
格式3、组态王读数据请求格式:(此时检验位为0)
格式4、单片机应答读数据格式(正确):(此时检验位为0)
格式5、单片机应答读数据格式(错误):(此时检验位为0)
格式6、组态王写数据请求格式:(此时检验位为0)
格式7、单片机应答写数据格式(正确):(此时检验位为0)
三、时序:
读数据:
写数据:
四、协议说明:
数据传输:所有数据均为16进制数
Sta::设备地址1字节
R:读标志1字节(0x52)
W:写标志1字节(0x57)
DataType;需要交换的数据类型,1字节。

1,字节;2,字,3,浮点型。

DataNum:要读取的数据的数量,1字节。

DataAddr;为数据偏移地址2字节,低字节在前,高字节在后Data:实际传输的数据,低字节在前,高字节在后
DataLong: 单片机返回Data的字节数,2字节,低字节在前,高字节在后
CRC:为从第一个字节至CRC前的所有字节的异或值,1字节ErrorCode:
以上协议若有不妥之处,可协商改动。

相关文档
最新文档