19.3 Hex文件

发布者:快乐行者最新更新时间:2024-07-30 来源: cnblogs关键字:Hex文件  十六进制  EPROM 手机看文章 扫描二维码
随时随地手机看文章

那么什么是Hex文件呢?Intel Hex文件是由一行行符合Intel Hex文件格式的文本所构成的ASCII文本文件。在Intel Hex文件中,每一行包含一个Hex记录。这些记录由对应机器语言码和常量数据的十六进制编码数字组成。Intel Hex文件通常用于传输将被存于ROM或者EPROM中的程序和数据,如图19.3-1。大多数EPROM编程器或模拟器使用Intel Hex文件。

19.3.1 Hex的结构

Intel Hex由任意数量的十六进制记录组成。每个记录包含5个域,它们按以下格式排列: 

  :llaaaatt[dd...]cc 

  每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样: 

1)   “:”: 每个Intel Hex记录都由冒号开头。

2)   “ll”:数据长度域,它代表记录当中数据字节(dd...)的数量。

3)   “aaaa ”:地址域,它代表记录当中数据的起始地址。

4)   “tt” :代表Hex记录类型的域,它可能是以下数据当中的一个:

                00 – 数据记录 

                01 – 文件结束记录 

                02 – 扩展段地址记录 

                04 – 扩展线性地址记录 

5) “dd” :数据域,它代表一个字节的数据.一个记录可以有许多数据字节。记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符。

6) “cc” :校验和域,它表示这个记录的校验和。校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足。

 

19.3.2 Hex的数据记录

Intel Hex文件由任意数量以回车换行符结束的数据记录组成,数据记录(从GPIO实验的GPIO.hex提取出来,可以用NotePad++打开Hex文件)如图19.3-2。

图19.3-2 GPIO.hex记录

 

   从图19.3-2可以观察到GPIO.hex第一行数据记录“020000040000FA”,

  其中

  02是这个记录当中数据字节的数量。

  0000 是数据将被下载到存储器当中的地址。

  00 是记录类型(数据记录)。

  00040000是数据。

FA 是这个记录的校验和。

 

检验值计算方法如下:

0x01+~(0x02+0x00+0x00+0x04+0x00+0x00+0x00)=0xFA

 

更方便的计算方式可以使用“单片机多功能调试助手”进行计算,在【数据校验】中填入“020000040000”,点击计算,在“Intex Hex 校验和”文本框得出计算结果,如图19.3-3。

图19.3-3 快捷计算Intel Hex校验和

关键字:Hex文件  十六进制  EPROM 引用地址:19.3 Hex文件

上一篇:19.4功耗控制
下一篇:LIB的生成与使用

推荐阅读最新更新时间:2026-03-11 09:09

51单片机(汇编语言)实现十进制转十六进制
任务描述 DEC0 DEC1 DEC2 存放 十进制 数 eg:03 35 96 HEX0 HEX1存放十六进制数 eg:83 3C 任务原理 本质是BCD码转二进制 所谓的十进制 如“15”,对应的是 0x15H 这一个十六进制数,而0x15的十进制数为21,二进制为0001 0101(就是1 “和” 5) 所以,我们要做的是 把每一位十进制的BCD码提出来,附上相应的权重,结果本质为普通的二进制,表现为十六进制(这听起来很绕口)但是在keil里跑一下会更好理解(后面会结合代码分析) 方案Ⅰ 思路 循环— (HEX*10)+TMP 1.从高位开始 提取“十进制”的每一位数(半个byte存一位) 2.带进位的循环
[单片机]
51单片机(汇编语言)实现十进制转<font color='red'>十六进制</font>
51单片机实验——十六进制计数器
1.实验题目: 用P0.0- P0.03设计一个在0-15之间自动计数的十六进制计数器,每个数持0.2s。 代码采用SWITCH语句,利用for循环实现16进制的计数器设计。 四个IO口相连接的LED灯按照0000-1111的二进制变化顺序进行计数。 2.KEIL代码 #include reg51.h #include intrins.h sbit P00=P0^0; sbit P01=P0^1; sbit P02=P0^2; sbit P03=P0^3; void Delay200ms();//声明延时函数 void main() { int i=0; while(1) { for(i=0;i 1
[单片机]
51单片机实验——<font color='red'>十六进制</font>计数器
基于51单片机设计N字节十六进制除法
1、思路 借用十进制除法竖式计算的思路,作十六进制的除法竖式计算。 将除数3字节与被除数高3字节对齐,除完后保存当前字节的商和余数,将被除数往低顺延一个字节,再执行新一轮的除法。被除数有6字节,除数有3字节,故除法需执行4轮。这是最外层的循环。 每一轮的除法可转换为多次减法,需要注意的是,对被除数来说减法需要一直执行到最高字节,以保证借位执行无误。这是中间层的循环。 每一轮的减法由单个字节的减法循环组成,减的过程中考虑借位。由于除数只有3个字节,执行完此3次减法后,除数再往上的字节内容为00H,减法就变成了XXH-CY-00H,即纯粹的借位。 为了判断中间层循环什么时候结束,需要额外写一个子程序来比较减数与被减数的
[单片机]
基于51单片机设计N字节<font color='red'>十六进制</font>除法
STM32串口发送十六进制的数组
通过串口发送十六进制的数组的方法有很多种,这里我介绍一种最简单也最使用的一种方法。 我这里使用的板子是STM32F103RCT6,使用串口2,usart2.c的代码如下: #include delay.h #include usart2.h #include stdarg.h #include stdio.h #include string.h #include timer.h //串口接受缓存区 u8 USART2_RX_BUF ; //接受数据缓冲,最大为USART2_MAX_RECV_LEN个字节 u8 USART2_TX_BUF ; //发送数据缓冲,最大为USART2
[单片机]
STM32单片机生成的hex文件与bin文件区别与应用
STM32、51等单片机程序经过编译后,生成的hex文件、bin文件,它们都是单片机烧写文件,本文介绍它们的区别与应用。 Hex文件 Keil5中生成hex文件的配置 如上图,分别点击“魔术棒”-“Output选项卡”,勾选“Create HEX File”选项,确认即可。 STM32CubeIDE中生成hex文件的配置 如上图,先用鼠标点击选中项目名,之后点击菜单栏“File”-“Properties”。 如上图红框处,依次点击“C/C++ Build”-“MCU Post build outputs”,勾选“Convert to Intel Hex file”,应用并关闭窗口。 hex烧写 用ISP方式烧写程序,首
[单片机]
STM32单片机生成的<font color='red'>hex文件</font>与bin文件区别与应用
第14节:二进制与十六进制
从业十年,教你单片机入门 第14讲: C51编译器并不支持二进制的书写格式,即使添加某个头文件后能支持二进制的书写格式,二进制的书写还是有个弊端,就是数字太多太长了,写起来非常费劲不方便,怎么办?解决办法就是用十六进制。十六进制是二进制的缩写,之所以称它为二进制的缩写,是因为它们的转换关系非常简单直观,不需要借助计算器即可相互转换。 何谓十六进制?欲搞清楚这个问题,还得先从十进制说起。所谓十进制,就是用一位字符可以表示从0到9这十个数字。所谓二进制,就是用一位字符可以表示从0到1这二个数字。所谓十六进制,当然也就是用一位字符可以表示从0到15这十六个数字。但是马上就会面临一个问题,十六进制的10到15这6个数其实是有两位字符组成的
[单片机]
第15节:十进制与十六进制
从业十年,教你单片机入门 第15讲: 十六进制是二进制的缩写形式,而C语言程序里只用了十进制和十六进制这两种书写格式。它们各有什么应用特点?十六进制方便人理解机器,通常应用在配置寄存器,底层通讯驱动,底层IO口驱动,以及数据的移位,转换和合并等场合。而十进制则方便人理解值的大小,在应用层经常用。总之,进制只是数据的表现形式而已。 十进制与十六进制如何相互转换?其实很多教科书上有介绍它们之间如何通过手工计算进行转换的方法。但是实际应用中,我从来没有用过这种手工计算方法,我用的方法是最简单直接的,就是借助电脑自带的计算器进行转换即可。现在把这种方法介绍给大家。 第一步:点击电脑左下角 开始 菜单,在下拉菜单中把鼠标移动到 所有程序
[单片机]
介绍“十六进制数字符串至数值转换”函数
该节点 位于函数/字符串/ 字符串/数值转换 下,功能是把输入的字符串(ASCII)通过十六进制数字再转换成数值(10进制)。 有几点需要注意: 1:虽然该函数的输入端子 string 的值可以是十六进制数、字符串(ASCII)或其他进制数,但是 string 的值流入该函数中时,先转换成字符串(ASCII)。例如,当 string (Hex display)值为62,因此,流入函数时,该值转为b(ASCII),但是,如果 string 流入该函数前就是字符串(ASCII),比如直接流入a,则上述的转换过程就可以避免。 2:在函数中,字符串(ASCII)被当成十六进制处理,最后输出的数值就是这个十六进制数对应的十进制数。例如字
[测试测量]
介绍“<font color='red'>十六进制</font>数字符串至数值转换”函数
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved