转Keil生成的Hex文件详解
HEX文件格式分析
HEX文件格式分析一个HEX文件通常由多个记录(record)组成,每个记录有不同的用途和格式。
下面是HEX文件的格式详解:1. 记录类型(Record Type):每个记录都有一个记录类型字段,用来指定该记录的类型。
常见的记录类型有:a. 数据记录(Data record):用来存储机器指令的二进制数据。
b. 扩展线性地址记录(Extended Linear Address record):用来指定下一条数据记录加载的地址。
c. 起始线性地址记录(Start Linear Address record):用来指定程序的起始地址。
2. 记录长度(Record Length):记录长度字段指定了该记录的数据字段的长度(以字节为单位)。
3. 起始地址(Start Address):起始地址字段指定了该记录对应的数据在内存中的起始地址。
4. 数据字段(Data Field):数据字段包含了该记录对应的机器指令的二进制数据。
每个数据字段的长度由记录长度字段指定。
5. 校验和(Checksum):校验和字段用来验证该记录的数据的完整性。
它是将记录类型、记录长度、起始地址和数据字段中的数据累加,并对256取模后的结果的补码。
```:LLAAAARRDDDDDDDD...DDCC```其中,符号“:”表示记录起始标志;LL表示记录长度;AAAA表示起始地址;RR表示记录类型;DD表示数据字段;CC表示校验和。
1.解析HEX文件:读取HEX文件的每个记录,根据记录类型字段和数据字段进行解析。
2.加载机器指令:将HEX文件中的机器指令加载到指定的内存地址中。
3.执行程序:将内存中的指令送入处理器执行。
HEX文件格式可以方便地将机器语言程序存储在文本文件中,以便于传输和共享。
它在嵌入式系统开发和固件升级等领域得到广泛应用。
通过对HEX文件进行解析和加载,我们可以将机器语言程序加载到目标设备上,并实现特定的功能。
总结: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标识段出现之前,下⾯的数据都是这个基地址。
【转】hex和bin文件格式的区别
【转】hex和bin⽂件格式的区别 Intel HEX⽂件是记录⽂本⾏的ASCII⽂本⽂件,在Intel HEX⽂件中,每⼀⾏是⼀个HEX记录,由⼗六进制数组成的机器码或者数据常量。
Intel HEX⽂件经常被⽤于将程序或数据传输存储到ROM、EPROM,⼤多数编程器和模拟器使⽤Intel HEX⽂件。
很多编译器的⽀持⽣成HEX格式的烧录⽂件,尤其是Keil c。
但是编程器能够下载的往往是BIN格式,因此HEX转BIN是每个编程器都必须⽀持的功能。
HEX格式⽂件以⾏为单位,每⾏由“:”(0x3a)开始,以回车键结束(0x0d,0x0a)。
⾏内的数据都是由两个字符表⽰⼀个16进制字节,⽐如”01”就表⽰数0x01;”0a”,就表⽰0x0a。
对于16位的地址,则⾼位在前低位在后,⽐如地址0x010a,在HEX格式⽂件中就表⽰为字符串”010a”。
下⾯为HEX⽂件中的⼀⾏: :10000000FF0462FF051EFF0A93FF0572FF0A93FFBC “:”表⽰⼀⾏的开始。
“:”后的第1,2个字符“10”表⽰本⾏包含的数据的长度,这⾥就是0x10即16个。
第3,4,5,6个字符“0000”表⽰数据存储的起始地址,这⾥表⽰从0x0000地址开始存储16个数据,其中⾼位地址在前,低位地址在后。
第7,8个字符“00”表⽰数据的类型。
该类型总共有以下⼏种: 00 ----数据记录 01 ----⽂件结束记录 02 ----扩展段地址记录 04 ----扩展线性地址记录 这⾥就是0x00即为普通数据记录。
⾃后的32个字符就是本⾏包含的数据,每两个字符表⽰⼀个字节数据,总共有16个字节数据跟⾏⾸的记录的长度相⼀致。
最后两个字符表⽰校验码。
每个HEX格式的最后⼀⾏都是固定为::00000001FF 以上的信息其实就⾜够进⾏HEX转BIN格式的程序的编写。
⾸先我们只处理数据类型为0x00及0x01的情况。
MDK生成BIN和HEX
3.0.Keil MDK-ARM uVision V4.53下生成BIN
3.1.Keil MDK-ARM缺省安装后,目标软件编译结果只有axf
3.2.鼠标右键点选MDK-ARM的Project栏里"Target 1"
A."–"不对,是"-"
B.是两个,不是一个
--------------------------------------------------
4.0.参考资料
4.1.如何用MDK(keil)生成.bin文件
作者:kanger/baokang506@
2.2.鼠标右键点选MDK-ARM的Project栏里"Target 1"
2.3.点选"Target 1"的"Options for Target..."
2.4.设置_Options for Target... 设置界面 Output栏
2.5.选择_Create Exectable:.\XXXXX
FromELF: creating hex file...
User command #1: fromelf.exe --bin --output
XXXXX.bin XXXXX.axf
"XXXXX.axf" - 0 Error(s), 0 Waring(s)
**************************************************
==================================================
单片机常用输出格式--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:感谢大家的阅读,本文由我司收集整编。
仅供参阅!。
c51hex文件反编译方法
c51hex文件反编译方法
C51是一种用于嵌入式系统开发的微控制器架构,其使用的是Keil C51编译器生成的HEX文件。
要对C51的HEX文件进行反编译,需要使用专门的反汇编工具,比如IDA Pro、Ghidra等。
这些工具
可以将HEX文件转换为汇编代码,但需要注意的是,由于HEX文件
是经过编译的机器码,反编译后的汇编代码可能不会完全还原原始
的C源代码。
另外,需要注意的是反编译HEX文件可能涉及到版权和法律问题,因为对于商业软件而言,其源代码通常是受到保护的。
在进行
反编译之前,务必确保你有合法的权限进行这样的操作。
总的来说,对于C51的HEX文件进行反编译是一项复杂的任务,需要使用专业的工具和合法的权限。
希望我的回答能够帮到你。
keil工程文件解析
keil工程文件解析
Keil工程文件是用于管理和配置工程项目的文件集合,主要在嵌入式系统开发中使用。
一个Keil工程通常包含多个文件,这些文件可以分为两类:工
程文件和源码编译文件。
工程文件主要包括.uvprojx、.uvoptx、.uvguix及.crf、.dep等。
具体来说:
1. .uvprojx文件:这是我们平时双击打开的工程文件,它记录了整个工程的结构,如芯片类型、工程包含了哪些源文件等内容。
2. .uvoptx文件:这个文件记录了工程的配置选项,如下载器的类型、变量跟踪配置、断点位置以及当前已打开的文件等等。
3. .uvguix文件:这个文件记录了Keil工程的GUI布局,如代码编辑区窗
口的大小、编译输出提示窗口的位置等等。
此外,一个Keil工程中还包括编译后的程序文件,如hex和bin文件等。
hex文件是一种使用十六进制符号表示的代码记录,记录了代码应该存储到FLASH的哪个地址和二进制代码数据。
bin文件则是可执行文件,记录了程序的二进制代码。
这些文件都有其特定的用途和重要性,共同构成了一个完整的Keil工程。
HEX文件格式
Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量。
Intel HEX文件经常被用于将程序或数据传输存储到ROM、EPROM,大多数编程器和模拟器使用Int el HEX文件。
很多编译器的支持生成HEX格式的烧录文件,尤其是Keil c。
但是编程器能够下载的往往是BIN格式,因此HEX转BIN是每个编程器都必须支持的功能。
HEX格式文件以行为单位,每行由“:”(0x3a)开始,以回车键结束(0x0d, 0x0a)。
行内的数据都是由两个字符表示一个16进制字节,比如”01”就表示数0 x01;”0a”,就表示0x0a。
对于16位的地址,则高位在前低位在后,比如地址0x010a,在HEX格式文件中就表示为字符串”010a”。
下面为HEX文件中的一行::10000000FF0462FF051EFF0A93FF0572FF0A93FFBC“:”表示一行的开始。
“:”后的第1,2个字符“10”表示本行包含的数据的长度,这里就是0x10即16个。
第3,4,5,6个字符“0000”表示数据存储的起始地址,这里表示从0x0000地址开始存储16个数据,其中高位地址在前,低位地址在后。
第7,8个字符“00”表示数据的类型。
该类型总共有以下几种:00 ----数据记录01 ----文件结束记录02 ----扩展段地址记录04 ----扩展线性地址记录这里就是0x00即为普通数据记录。
自后的32个字符就是本行包含的数据,每两个字符表示一个字节数据,总共有16个字节数据跟行首的记录的长度相一致。
最后两个字符表示校验码。
每个HEX格式的最后一行都是固定为::00000001FF以上的信息其实就足够进行HEX转BIN格式的程序的编写。
首先我们只处理数据类型为0x00及0x01的情况。
0x02表示对应的存储地址超过了64K,由于我的编程器只针对64K以下的单片机,因此在次不处理,0x04也是如此。
KEIL怎样生成HEX文件和相关设置
KEIL怎样生成HEX文件和相关设置学习51单片机的朋友面对着全英文的KEIL肯定会有这样的疑问“KEIL如何生成HEX文件?”,“生成的HEX文件在哪里?”下面就简单介绍一下生成HEX 的方法工具/原料∙keil uv2 uv3∙winXP新建项目1. 1先打开KEIL软件,点击“project”菜单2. 2点击“new project”新建一个项目。
如果不新建项目是没法生成HEX文件的3. 3在接下来的对话框中,选一个目录,然后为这个项目起一个名字。
名字可以随便起,这里以“测试项目”为例4. 4接下来出现一个对话框,要为项目选一个CPU。
点击左侧的树状目录滚动条,点开“ATMEL”选中“AT89C51”,单击确定5. 5这个对话框问是否把启动文件加进项目,选“是”6. 6要生成HEX文件还要设置一下。
单击下图中的设置图标7.7切换到“output”选项卡,勾选下图中“create HEX file”。
如果要改变HEX 文件的保存位置,可以点左上角的“select flolder for objects”选一个新的文件夹完成设置后选确定END添加源文件并生成HEX文件1. 1接下来添加源文件,源文件可以是用C语言或者是汇编语言,现在以C语言为例。
在下图的图标点右键2. 2在弹出的菜单中点击“add files to group source group 1”3. 3选中要加入的C文件,C文件可以是从别处复制过来,也可以自己写4. 4点“add”后可以看到C文件出现在左侧的目录中。
这时要点击“close”关闭对话框5. 5源程序添加进来后可以点击图中编译图标生成HEX文件6. 6然后在底下的状态框中可以看到结果,出现下图表示HEX文件已经生成了7.7打开文件夹可以看到,HEX文件已经生成了END注意事项第1步:打开Keil uVision2/3第2步:新建工程project->new project将弹出creat new project框,写入工程名称,例如test。
hex文件
hex文件解析Keil开发环境编程时对源程序进行编译链接后都可以成一个可执行文件即hex文件,但是有不完全是一个可执行文件。
然后可以通过烧录工具烧写到对应的单片机的flash中,当然也还有其他方法可以进行烧录。
大家在编程时是否对生成的hex文件有这样的疑问:1、当hex文件的大小大于单片机的flash时烧录工具还是可以把hex文件烧写到flash中呢;2、单片机运行的是二进制指令和数据,那么hex文件的内容是否都是二进制数呢;3、烧录工具是根据什么把程序指令和数据烧写到flash固定的位置呢。
我们就带着这三个疑问深入学习hex文件,想深入理解hex文件必须从内容入手。
查看hex 文件的很简单,用文本随便打开一个文件都可以看到hex文件的内容。
例如::020*********F2:1000000080040020690100087101000873010008E4:1000100000000000000000000000000000000000E0:100020000000000000000000000000007501000852:1000300000000000000000007701000879010008BE``````````````````````````````:1005E0002001000800000000006CDC020*********:1005F00000000000010203040607080900000000D3:04000005080000C12E:00000001FF上面就是一个hex文件内容首尾的一部分数据,从内容中很明显可以看出这不是二进制数据。
Hex文件是用ASCII来表示二进制的数值,十六进制数组成的指令或者数据,每一行就是一个hex记录。
由于单片机执行的只能是二进制指令和数据,而hex文件是十六进制数,所以烧录器的工作必然有一个进制转换机制。
具体机制怎么实现暂时可以不管,知道是烧录器处理的就行了。
用keil生成hex文件
用keil生成hex文件
1、建立mcs51源文件,选择new project建立管理项目
2、选择被仿真的51器件
3、建立源文件
输入汇编语言源程序
4、点击如图图标,对源程序进行编译、链接
在下面的图形中,会显示是否有语法错误,如有着调入源程序改正,如没有则可进行下一步,生成扩展名为“hex”的二进制文件。
5、生成“hex”文件
1)鼠标指向项目文件夹
2)压下鼠标右件,选择如图中的选项,进入
3)在下图中选择,“output”
将Creat HEX File打勾建立“hex”文件,在Name of Executable 给可执行文件取名,在Select Folder for Objects 选择存放路径,然后确定。
4)点击图标再次进行汇编,汇编后即可得到扩展名为“hex”的可执行二进制文件。
Keil生成的Hex文件详解
Keil HEX文件是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。
在Intel HEX文件中,每一行包含一个HEX记录。
这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。
Intel HEX文件通常用于传输将被存于ROM或者EPROM中的程序和数据。
大多数EPROM编程器或模拟器使用Intel HEX文件。
记录格式Intel HEX由任意数量的十六进制记录组成。
每个记录包含5个域,它们按以下格式排列::llaaaatt[dd...]cc每一组字母对应一个不同的域,每一个字母对应一个十六进制编码的数字。
每一个域由至少两个十六进制编码数字组成,它们构成一个字节,就像以下描述的那样:: 每个Intel HEX记录都由冒号开头.ll 是数据长度域,它代表记录当中数据字节(dd)的数量.aaaa 是地址域,它代表记录当中数据的起始地址.tt 是代表HEX记录类型的域,它可能是以下数据当中的一个:00 –数据记录01 –文件结束记录02 –扩展段地址记录04 –扩展线性地址记录dd 是数据域,它代表一个字节的数据.一个记录可以有许多数据字节.记录当中数据字节的数量必须和数据长度域(ll)中指定的数字相符.cc 是校验和域,它表示这个记录的校验和.校验和的计算是通过将记录当中所有十六进制编码数字对的值相加,以256为模进行以下补足.数据记录Intel HEX文件由任意数量以回车换行符结束的数据记录组成.数据记录外观如下::10 2462 00 464C5549442050524F46494C4500464C 33其中:10 是这个记录当中数据字节的数量.2462 是数据将被下载到存储器当中的地址.00 是记录类型(数据记录)464C…464C是数据.33 是这个记录的校验和.扩展线性地址记录(HEX386)扩展线性地址记录也叫作32位地址记录或HEX386记录.这些记录包含数据地址的高16位.扩展线性地址记录总是有两个数据字节,外观如下::02000004FFFFFC其中:02 是这个记录当中数据字节的数量.0000 是地址域,对于扩展线性地址记录,这个域总是0000.04 是记录类型04(扩展线性地址记录)FFFF 是地址的高16位.FC 是这个记录的校验和,计算方法如下:01h + NOT(02h + 00h + 00h + 04h + FFh + FFh).当一个扩展线性地址记录被读取,存储于数据域的扩展线性地址被保存,它被应用于从Intel HEX文件读取来的随后的记录.线性地址保持有效,直到它被另外一个扩展地址记录所改变. 通过把记录当中的地址域与被移位的来自扩展线性地址记录的地址数据相加获得数据记录的绝对存储器地址.以下的例子演示了这个过程..来自数据记录地址域的地址2462扩展线性地址记录的数据域+ FFFF------------绝对存储器地址FFFF2462扩展段地址记录(HEX86)扩展段地址记录也叫HEX86记录,它包括4-19位数据地址段.扩展段地址记录总是有两个数据字节,外观如下::020*********EA其中:02 是记录当中数据字节的数量.0000 是地址域.对于扩展段地址记录,这个域总是0000.02 是记录类型02(扩展段地址记录)1200 是地址段.EA 是这个记录的校验和,计算方法如下:01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).当一个扩展段地址记录被读取,存储于数据域的扩展段地址被保存,它被应用于从Intel HEX 文件读取来的随后的记录.段地址保持有效,直到它被另外一个扩展地址记录所改变.通过把记录当中的地址域与被移位的来自扩展段地址记录的地址数据相加获得数据记录的绝对存储器地址.以下的例子演示了这个过程..来自数据记录地址域的地址2462扩展段地址记录数据域+ 1200---------绝对存储器地址00014462文件结束(EOF)记录Intel HEX文件必须以文件结束(EOF)记录结束.这个记录的记录类型域的值必须是01.EOF记录外观总是如下::00000001FF其中:00 是记录当中数据字节的数量.0000 是数据被下载到存储器当中的地址.在文件结束记录当中地址是没有意义被忽略的.0000h是典型的地址.01 是记录类型01(文件结束记录)FF 是这个记录的校验和,计算方法如下:01h + NOT(00h + 00h + 00h + 01h).:02 0000 04 0800 F2:10 0000 00 7806002051040008690200086B020008 0D注意:地址是大开端,0800+0000 = 0x0800000078060020是MSP初始值,其实为0x20000678,是小开端。
单片机C语言第三课生成HEX文件和最小化系统
第三课生成HEX文件和最小化系统在开始C语言地主要内容时,我们先来看看如何用KEIL uVISION2来编译生成用于烧写芯片地HEX文件.HEX 文件格式是Intel公司提出地按地址排列地数据信息,数据宽度为字节,所有数据使用16进制数字表示, 常用来保存单片机或其他处理器地目标程序代码.它保存物理程序存储区中地目标代码映象.一般地编程器都支持这种格式.我们先来打开第一课做地第一项目,打开它地所在目录,找到test.Uv2地文件就可以打开先前地项目了.然后右击图3-1中地1项目文件夹,弹出项目功能菜单,选Options for Target'Target1',弹出项目选项设置窗口,同样先选中项目文件夹图标,这时在Project菜单中也有一样地菜单可选.打开项目选项窗口,转到Output选项页图3-2所示,图中1是选择编译输出地路径,2是设置编译输出生成地文件名,3则是决定是否要创建HEX文件,选中它就可以输出HEX文件到指定地路径中.选好了?好,我们再将它重新编译一次,很快在编译信息窗口中就显示HEX文件创建到指定地路径中了,如图3-3.这样我们就可用自己地编程器所附带地软件去读取并烧到芯片了,再用实验板看结果,至于编程器或仿真器品种繁多具体方法就看它地说明书了,这里也不做讨论.(技巧:一、在图3-1中地1里地项目文件树形目录中,先选中对象,再单击它就可对它进行重命名操作,双击文件图标便可打开文件.二、在Project下拉菜单地最下方有最近编辑过地项目路径保存,这里可以快速打开最近在编辑地项目.)图3-1项目功能菜单图3-2 项目选项窗口图3-3 编译信息窗口或许您已把编译好地文件烧到了芯片上,如果您购买或自制了带串口输出元件地学习实验板,那您就可以把串口和PC机串口相联用串口调试软件或Windows地超级终端,将其波特率设为1200,就可以看到不停输出地"Hello World!"字样.也许您还没有实验板,那这里先说说AT89C51地最小化系统,再以一实例程序验证最小化系统是否在运行,这个最小化系统也易于自制用于实验.图3-4便是AT89C51地最小化系统,不过为了让我们可以看出它是在运行地,我加了一个电阻和一个LED,用以显示它地状态,晶振可以根据自己地情况使用,一般实验板上是用11.0592MHz或12MHz,使用前者地好外是可以产生标准地串口波特率,后者则一个机器周期为1微秒,便于做精确定时.在自己做实验里,注意地是VCC是+5V地,不能高于此值,否则将损坏单片机,太低则不能正常工作.在31脚要接高电平,这样我们才能执行片内地程序,如接低电平则使用片外地程序存储器.下面,我们建一个新地项目名为OneLED来验证最小化系统是否可以工作(所有地例程都可在我地主页下面下载到,网址: 或 ).程序如下:#include <AT89X51.h> //预处理命令void main(void) //主函数名{//这是第一种注释方式unsigned int a; //定义变量a为int类型do{//do while组成循环for (a=0; a<50000; a++); //这是一个循环P1_0 =0; //设P1.0口为低电平,点亮LEDfor (a=0; a<50000; a++); //这是一个循环P1_0 = 1; //设P1.0口为高电平,熄灭LED}while(1);}图3-4 AT89C51最小化系统这里先讲讲KEIL C编译器所支持地注释语句.一种是以"//"符号开始地语句,符号之后地语句都被视为注释,直到有回车换行.另一种是在""符号之内地为注释.注释不会被C编译器所编译.一个C应用程序中应有一个main主函数,main函数可以调用别地功能函数,但其它功能函数不允许调用main函数.不论main函数放在程序中地那个位置,总是先被执行.用上面学到地知识编译写好地OneLED程序,并把它烧到刚做好地最小化系统中.上电,刚开始时LED是不亮地(因为上电复位后所有地IO口都置1引脚为高电平),然后延时一段时间(for (a=0; a<50000; a++)这句在运行),LED亮,再延时,LED熄灭,然后交替亮、灭.第一个真正地小应用就做完,呵呵,先不要管它是否实用哦.如果没有这样地效果那么您就要认真检查一下电路或编译烧写地步骤了.版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有This article includes some parts, including text, pictures, and design. Copyright is personal ownership.用户可将本文地内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律地规定,不得侵犯本网站及相关权利人地合法权利.除此以外,将本文任何内容或服务用于其他用途时,须征得本人及相关权利人地书面许可,并支付报酬.Users may use the contents or services of this article for personal study, research or appreciation, and othernon-commercial or non-profit purposes, but at the same time, they shall abide by the provisions of copyright law and other relevant laws, and shall not infringe upon the legitimate rights of this website and its relevant obligees. In addition, when any content or service of this article is used for other purposes, written permission and remuneration shall be obtained from the person concerned and the relevant obligee.转载或引用本文内容必须是以新闻性或资料性公共免费信息为使用目地地合理、善意引用,不得对本文内容原意进行曲解、修改,并自负版权等法律责任.Reproduction or quotation of the content of this article must be reasonable and good-faith citation for the use of news or informative public free information. It shall not misinterpret or modify the original intention of the content of this article, and shall bear legal liability such as copyright.。
hex文件格式详解
学习的路上,越努力越渺小。
——单片机初学者在学习单片机的路上,我用过KEIL、CodeWarrior、CCS等编译器,但最近因一个小项目,采用的PIC18F25K80芯片,使用MPLAB的PICC18编译器,在烧写代码的时候,突然意识到自己一直在使用.Hex文件,但从未对该文件去研究、理解过,从而有此下文:Hex文件通常由编译器在项目编译链接后生成,用于传输被存储于ROM或者EEPROM 的程序或数据,可在项目工程目录下查找到。
用记事本或者Notepad++打开hex文件,hex 文件由一行行“:数字”组成,每行以冒号开头,内容全部为16进制数字。
Hex文件每行都是一个十六进制的记录,该记录由5各部分组成:数据长度(1个字节)、数据起始地址(2个字节,高位在前,低位在后)、记录类型(1个字节)、数据(n个字节)、校验码(1个字节)。
打开Hex文件,如下::020*********F2:101800002039002055190008A1270008A327000847:1018100000000000000000000000000000000000C8…:10C000001A67296887689968A768B20529A401009A:10C01000204214021440420A0313DA0342140313A9:08C020000B03420A0327DB03B6:04000005080018BD1A:00000001FF以:101800002039002055190008A1270008A327000847为例:“0x100x180x000x000x200x030x900x020x550x190x000x080xA10x270x000x080xA3 0x270x000x080x47”“:”表示记录开始;“回车换行”表示记录结束;“0x10”表示数据长度是16,即本条记录数据是16个字节;“0x180x00”表示数据起始地址,即本条记录的数据起始地址为0x1800;“0x00”表示数据类型,数据类型有:0x00、0x01、0x02、0x03、0x04、0x05。
第6节:把.c源代码编译成.hex机器码的操作流程
第六节:把.c源代码编译成.hex机器码的操作流程。
第一步:打开一个现成的工程。
双击桌面”keil uVision4”的图标启动keil软件,如果发现此软件默认打开了一个之前已经存在的工程,请点击上面”Project”选项,在弹出的下拉菜单中选择“Close Project”先关闭当前工程。
然后,继续点击上面”Project”选项,在弹出的下拉菜单中选择“Open Project...”,在弹出的文件对话框中,在D盘找到上一节已经建立的工程文件夹stc89c52rc,单击选中“stc89c52rc.uvproj”这个文件名,点击“打开”,就可以打开一个现有的工程了。
第二步:设置编译环境让它允许产生.hex格式的机器码文件。
鼠标右键点击选中左边”Porject”选项框里面的”Target 1”选项,在右键下拉菜单中选择“Options for Target‘Target 1’...”选项,弹出一个编译环境设置对话框,左键单击上面子菜单切换到“Output”窗口下,把“Create Hex File”勾选上。
点击“OK”退出。
有1个地方需要解释:(1)这个选项很重要,必须把“Create Hex File”选项勾上,否则后续的操作不能在工程文件夹的目录里生成.Hex的机器码文件。
对于一个工程模板,只需要设置一次就可以保存起来的,下次开电脑重新打开此工程模板时不需要再设置,这些被设置的参数都是能掉电保存起来的。
第三步:启动编译。
在确保stc89c52rc.c源文件里面有C语言源代码的情况下,点击上面”Project”选项,在弹出的下拉菜单中点击“Rebuild all target files”编译命令,编译器开始编译工作。
第四步:在”Build Output”窗口下观察编译结果。
可以在最下方的”Build Output”窗口下观察到编译的过程提示。
如果没有发现”Build Output”窗口,请把鼠标的光标移动到最下方的滑动条下边,当它呈现移动光标的形状时,按住左键往上拖动就可以看到“Build Output”窗口了。
单片机烧录文件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个。
如何用KeilC51将ASM文件编译成Hex文件
按如下步骤进行:1)点击菜单project,选择new project:2)然后选择你要保存的路径,输入工程文件的名字,比如保存到keil目录里,工程文件的名字为test. 如下图所示,然后点击保存3)这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keil c51 几乎支持所有的51核的单片机,如果你设计的是华邦的W77E58,可以选择winbond->W77E58,但是有一些版本,比如6.02,对它不能仿真,但是可以选择dallas的ds80c320来代替设计W77E58,两者的内核是一样的,只是w77e58带flash rom,而ds80c320没有flash rom,如果你的软件在仿真W77e58的时候有问题,那么就选用ds80c320 .我这里还是以大家用的比较多的Atmel 的89c52来说明,如图所示,选择89c52之后,右边一栏是对这个单片机的基本的说明,然后点击确定.4)这时要新建一个源程序文件,建立一个汇编或c文件,如果你已经有源程序文件,可以忽略这一步.点击菜单File->New:5)输入一个简单的程序,如下:5)选择菜单File_>SAVE:6)选择你要保存的路径,在文件名里输入文件名,注意一定要输入扩展名,如果是c程序文件,扩展名为.c,如果是汇编文件,扩展名为.a51,如果是ini文件,扩展名为.ini,其他文件类型,比如注解说明文件,可以保存为.txt的扩展名.那么我们这里是要存储一个c源程序文件,所以输入.c扩展名,保存为test.c 的名字,(也可以保存为其他名字,比如learn.c等),点击保存.7)点击Target 1前面的+号,展开里面的内容source Group1:8)用右键点击Sourece Group 1(注意用鼠标的右键,而不是左键),将弹出一个菜单,选择AddFiles to Guoup"Source Group 1".9)选择刚才的文件test.c,文件类型选择C Source file(*.c).因为我们的是c程序文件,所以选择该类型,如果是汇编文件,就选择asm source file.如果是目标文件,选择Object file,如果是库文件,选择Library file.最后点击Add. 点击add之后,窗口不会消失,(如果要添加多个文件,可以不断添加),添加完毕此时再点击Close关闭该窗口.10)这时在source group 1 里就有test.c文件,如图:11)用鼠标右键(注意用右键)点击左边的Target 1,会出现一个菜单,选择Options for Target "Target 1",会出现一个选项,如下图,选中“Create Hex File",红色箭头所示!12)在test.c上点击鼠标右键,在出现的下拉菜单中选择“build target”,看状态栏,若是:"test" - 0 Error(s), 0 Warning(s).”,恭喜你成功了,看看你的文件夹吧,是否多了个test.hex。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
转Keil生成的Hex文件详解
Keil Uv2 生成Hex文件详细过程
2009-12-31 15:38:44| 分类:51单片机|
步骤:
1.打开Keil Uv2开发环境
2.现在开始新建项目,Project->New Project,确定项目保存路径,并给新建项目命名,之后点选“保存”。
3.之后选定CPU,这以之后学习用到的A T89S51单片机为例,选择Atmel->89C51;
4.项目建好后,这样的空项目是无用的,接下来需要给项目添加文件,选中“Source
Group1”,右键,在弹出对话框里选中“Add Files to Group ‘Source Group1’”,如图:
5.这时已经可以在新增文件上进行编程,很多奇思异想都可以实现拉,条件是编出来的程序,机器能识别,不然。
嘿嘿。
程序编写出来了,直接编译的执行程序,51单片机是不认的,就像对一个只会中国话的中国老太太说英语,这就产生了语言障碍,所以还得翻译成“.hex”格式文件,那么这里别忘了设置Target和Output两个属性,如图:
这时再按“F7”开始编译,如果程序没写错,就能看到
“Build target ‘Target 1’
Compiling
……
– 0 Error(s) ,0 Warning(s).”
那么恭喜,你已经生成了可以在单片机上跑的程序了!。