生成HEX文件

合集下载

生成hex文件

生成hex文件

Keil的使用方法打开keil程序,在Project菜单下选择New Project
选择好保存的路径和当前的文件名之后,点击保存
然后会弹出如下窗口
在这里你需要选择芯片的类型,下面以A T89C51为例,选择好之后点击确定
这时会弹出一个窗口,让你选择是否加载“标准启动文件”,初学者不用加载,选择“否”
下面我们要建立一个C或者Ams文件,以C文件为例,点击File菜单下的New,创建一个新的Text1文档,在里面输入需要写的程序,下面以一段代码为例,
选择File菜单下的Save按钮保存之后,会出现以下对话框
输入文件名(由于默认是的保存类型是All File,而我们要的是C类型的文件,所以要输入后缀为.c的文件名)
点击保存,如果操作正确,程序中的关键字会变成蓝色
点击资源菜单下的“+”号
右键Source Group 1,选择Add File to Group ‘Source Group 1’这个选项
然后选中刚才保存的C类型文件,点击Add
然后点击Close,完成文件的添加。

下一步要进行工程设置,选择Project菜单下的Options for Target ‘Target 1’
会出现如下对话框
录进单片机用的。

如下图,然后点击确定
进行编译之后,就能生成一个hex文件了。

IARAVR怎么生成HEX文件啊

IARAVR怎么生成HEX文件啊

IAR A VR怎么生成HEX文件啊IAR同时输出多个文件的说明,在IAR225E(30天限时版)中通过。

操作步骤:1、在Project->Options->XLINK->Include中观察该Project使用了哪个XCL文件。

2、在该XLC文件中加入以下两行:-Ointel-extended,(CODE)=.hex-Ointel-extended,(XDA TA)=.eep3、在Project->Options->XLINK->Output->Format->Other中选择UBROF6格式输出。

以下为MAP文件的部分内容,生成了与Project名称相同的三个文件:test.dbg:兼容于A VR STUDIO的调试文件(也可以任意指定文件名)test.hex:INTEL HEX格式的程序代码文件test.eep:INTEL HEX格式的EEPROM初始化数据文件。

############################################################################## ### ## IAR Universal Linker V4.53F/WIN ## ## Link time = 20/Jan/2001 14:49:35 ## Target CPU = A90 ## List file = "D:\IAR Systems\user_A vr\Debug\List\test.map" ## Output file 1 = "D:\IAR Systems\user_A vr\Debug\Exe\test.dbg" ## Format: ubrof6 ## UBROF version 6.0.0 ## Output file 2 = "D:\IAR Systems\user_A vr\Debug\Exe\test.hex" ## Format: intel-extended, variant: -y(CODE) ## Output file 3 = "D:\IAR Systems\user_A vr\Debug\Exe\test.eep" ## Format: intel-extended, variant: -y(XDA TA) #注意:1、可以修改IAR Embedded Workbench安装位置中所有cfg?s.xcl cfg?l.xcl cfg?t.xcl文件,这样就不需每次修改了,对Project->Options->XLINK->Output->Format中其余两个选项没有影响。

IAR编译CC2530生成HEX文件

IAR编译CC2530生成HEX文件

IAR编译ZStack-CC2530,生成HEX文件完全配置IAR编译ZStack-CC2530为可下载运行的HEX文件的正确配置:1. 正确配置输出文件格式:菜单选择Project-Options-Linker-Output-Format,选择Other。

右边的Output下拉框 选intel-extended,Format variant 下拉框选None,Module-local下拉框选Include all2.还是在菜单Project-Options-Linker-Output标签中,勾上Override default选项,把编辑框中的文件名的后缀改为hex以上两步都是大多数人熟知的,下面这一步是针对大型程序编译下载所必须的,也是大部分写zstack教程的人所没有提到的。

3. 找到f8w2530.xcl文件,并打开。

(这个文件在"Projects/zstack/Tools/CC2530DB/"目录下,也可以通过IAR编 译环境的左侧Workspace窗口点开Tools文件夹看到)在f8w2530.xcl文件中找到两行被注释掉的语句://-M(CODE)[(_CODEBANK_START+_FIRST_BANK_ADDR)-(_CODEBANK_END+_FIRST_B ANK_ADDR)]*///_NR_OF_BANKS+_FIRST_BANK_ADDR=0x8000把这两行前面的"//"去掉,保存,重新编译,OK!(注: 去掉这两行的"//"后在编译输出成hex格式时没有问题,但在debug模式下编译会提示警告:Warning[w69]: Address translation (-M, -b# or -b@) has no effect on the output format 'debug'. The output file will be generated but noaddress translation will be performed. 不过并不会影响debug调试的使用。

关于hex文件的产生方法

关于hex文件的产生方法

1. 关于hex文件的产生方法:在STVD下如何产生HEX文件,在STVD的Project -> Setting -> Post-Build Commands 栏内添加: chex -fi -o $(OutputPath)$(T argetSName).hex $(OutputPath)$(TargetSName).sm82. 将memory models选择mods或modsl应用注意:使用的是STVD自动生成的stm8_interrupt_vector.c文件时,在使用modsl模式编译时,必须将extern void _stext(); /* startup routine */ 这句改为extern @near void _stext(); /* startup routine */ 需要增加@near 关键字。

程序大于32k后,要把const数据,main还有中断函数等定位到32k(地址64k)以内,不然程序会跑飞,而且编译链接的时候也不会报错。

3. 仿真调试利用STM8小板上的3个LED灯,了解仿真环境。

利用建好的环境,修改main.c文件,修改后的如下#i nclude "STM8S207R.h"void main(void){_asm("sim");PD_DDR |= 0x0D;PD_CR1 |= 0x0D;PD_CR2 = 0x00;_asm("nop");PD_ODR |=0x01;_asm("nop");PD_ODR |=0x04;_asm("nop");PD_ODR |=0x08;_asm("nop");PD_ODR &=~0x0D;_asm("nop");_asm("rim");while(1);}把 STM8S207R.h 文件放在建好的工程目录下,与main.c文件在用一个目录下。

如何在keil中生成hex文件

如何在keil中生成hex文件

在keil中编写完程序后,要将程序通过烧录器烧写到单片机中,这时就需要在keil中产生一个hex格式的文件,只有通过这种格式,烧录器才能将程序烧写到单片机中。

hex文件格式是Intel公司提出的按地址排列的数据信息,数据宽度为字节,所有数据使用16进制数字表示, 常用来保存单片机或其他处理器的目标程序代码。

它保存物理程序存储区中的目标代码映象。

一般的编程器都支持这种格式。

如何才能产生这种格式的文件呢?
在keil中对其进行如下设置,便能产生hex文件:
点击菜单“Option for Tagret '...'” ---> 选择“Output”页--->钩选“Create HEX File”--->重编译
如果程序无误,在Project的当前目录即会产生HEX 文件。

生成HEX文件

生成HEX文件

生成HEX文件的MATLAB程序ROM初始化文件既可以是*.mif也可以是*.hex文件,但是如果工程需要在Modelsim中进行仿真的话,则必须生成*.hex文件对ROM进行初始化。

一般简单且有规律的初始化数据可以用Excel先生成mif文件再在综合软件中转化为hex文件,但如果所需信号要叠加各种各样的噪声时。

Excel则不能胜任,此时我们用MATLAB生成所需初始化数据,在使用下述程序则很容易生成HEX初始化文件。

程序先介绍hex文件的结构,后给出matlab程序,且我做了详细的注释,希望对大家有所帮助。

% __Created by He Yapeng.@School of Electronic Engineering and Photoelectricity Technology at Nanjing University of Science and Technology%--Email:***************.');% Intel 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文件由任意数量以回车换行符结束的数据记录组成.数据记录外观如下:% :10246200464C5549442050524F46494C4500464C33% 其中:% 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).%% Intel HEX文件例子:% 下面是一个完整的Intel HEX文件的例子:% :10001300AC12AD13AE10AF1112002F8E0E8F0F2244% :10000300E50B250DF509E50A350CF5081200132259% :03000000020023D8% :0C002300787FE4F6D8FD7581130200031D% :10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016% :04003F00A42EFE22CB% :00000001FF%%%% 附:英文原文%% QUESTION% What is the Intel HEX file format?% ANSWER% The Intel HEX file is an ASCII text file with lines of text that follow the % Intel HEX file format. Each line in an Intel HEX file contains one HEX record. % These records are made up of hexadecimal numbers that represent machine% language code and/or constant data. Intel HEX files are often used to transfer % the program and data that would be stored in a ROM or EPROM. Most EPROM% programmers or emulators can use Intel HEX files.% Record Format% An Intel HEX file is composed of any number of HEX records. Each record is made % up of five fields that are arranged in the following format:% :llaaaatt[dd...]cc% Each group of letters corresponds to a different field, and each letter% represents a single hexadecimal digit. Each field is composed of at least two % hexadecimal digits-which make up a byte-as described below:% : is the colon that starts every Intel HEX record.% ll is the record-length field that represents the number of data bytes (dd) in % the record.% aaaa is the address field that represents the starting address for subsequent % data in the record.% tt is the field that represents the HEX record type, which may be one of the % following:% 00 - data record% 01 - end-of-file record% 02 - extended segment address record% 04 - extended linear address record% dd is a data field that represents one byte of data. A record may have multiple % data bytes. The number of data bytes in the record must match the number% specified by the ll field.% cc is the checksum field that represents the checksum of the record. The% checksum is calculated by summing the values of all hexadecimal digit pairs in % the record modulo 256 and taking the two's complement.% Data Records% The Intel HEX file is made up of any number of data records that are terminated % with a carriage return and a linefeed. Data records appear as follows:% :10246200464C5549442050524F46494C4500464C33% where:% 10 is the number of data bytes in the record.% 2462 is the address where the data are to be located in memory.% 00 is the record type 00 (a data record).% 464C...464C is the data.% 33 is the checksum of the record.% Extended Linear Address Records (HEX386)% Extended linear address records are also known as 32-bit address records and % HEX386 records. These records contain the upper 16 bits (bits 16-31) of the % data address. The extended linear address record always has two data bytes and % appears as follows:% :02000004FFFFFC% where:% 02 is the number of data bytes in the record.% 0000 is the address field. For the extended linear address record, this field % is always 0000.% 04 is the record type 04 (an extended linear address record).% FFFF is the upper 16 bits of the address.% FC is the checksum of the record and is calculated as% 01h + NOT(02h + 00h + 00h + 04h + FFh + FFh).% When an extended linear address record is read, the extended linear address % stored in the data field is saved and is applied to subsequent records read % from the Intel HEX file. The linear address remains effective until changed by % another extended address record.% The absolute-memory address of a data record is obtained by adding the address % field in the record to the shifted address data from the extended linear% address record. The following example illustrates this process..% Address from the data record's address field 2462% Extended linear address record data field FFFF% --------% Absolute-memory address FFFF2462% Extended Segment Address Records (HEX86)% Extended segment address records-also known as HEX86 records-contain bits 4-19 % of the data address segment. The extended segment address record always has two % data bytes and appears as follows:% :020*********EA% where:% 02 is the number of data bytes in the record.% 0000 is the address field. For the extended segment address record, this field % is always 0000.% 02 is the record type 02 (an extended segment address record).% 1200 is the segment of the address.% EA is the checksum of the record and is calculated as% 01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).% When an extended segment address record is read, the extended segment address % stored in the data field is saved and is applied to subsequent records read % from the Intel HEX file. The segment address remains effective until changed by % another extended address record.% The absolute-memory address of a data record is obtained by adding the address % field in the record to the shifted-address data from the extended segment% address record. The following example illustrates this process.% Address from the data record's address field 2462% Extended segment address record data field 1200% --------% Absolute memory address 00014462% End-of-File (EOF) Records% An Intel HEX file must end with an end-of-file (EOF) record. This record must % have the value 01 in the record type field. An EOF record always appears as % follows:% :00000001FF% where:% 00 is the number of data bytes in the record.% 0000 is the address where the data are to be located in memory. The address in % end-of-file records is meaningless and is ignored. An address of 0000h is% typical.% 01 is the record type 01 (an end-of-file record).% FF is the checksum of the record and is calculated as% 01h + NOT(00h + 00h + 00h + 01h).% Example Intel HEX File% Following is an example of a complete Intel HEX file:% :10001300AC12AD13AE10AF1112002F8E0E8F0F2244% :10000300E50B250DF509E50A350CF5081200132259% :03000000020023D8% :0C002300787FE4F6D8FD7581130200031D% :10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016% :04003F00A42EFE22CB% :00000001FFclear ;clc;data=1:16;%data need to be writen into the mif filefh=fopen('E:Hex1.hex','w');l_data=length(data);for j=1:l_dataadr=dec2hex(j-1,4);%4位十六进制表示的地址data_hex=dec2hex(data(j),4);%4位十六进制表示的数据data_H=floor(data(j)/2^8);%数据十六进制高两位data_L=data(j)-data_H*2^8;%数据十六进制低两位adr_H=floor((j-1)/2^8);%地址十六进制高两位adr_L=(j-1)-adr_H*2^8;%地址十六进制低两位idetify_word=mod(2^8-mod(2+adr_H+adr_L+data_H+data_L,2^8),2^8);%十进制表示的校验位,外围mod函数是以防里面的mod函数结果为0idetify_word_hex=dec2hex(idetify_word,2);%十六进制表示的校验位fprintf(fh,[':02',adr,'00',data_hex,idetify_word_hex,' ']);%产生HEX码(end-1:end)endfprintf(fh,':00000001FF');fclose(fh);。

iar生成hex

iar生成hex

如何输出HEX文件?方法一最好用)在配置文件后面加入以下代码,便可输出HEX文件,A90文件与HEX文件一样,SLISP都能识别.如图Override default 目录下的那个文件中最后面加入以下代码// Output File-Ointel-extended,(XDATA)=.eep //产生eeprom文件-Ointel-extended,(CODE)=.A90 //产生烧写文件-Ointel-extended,(CODE)=.hex //产生烧写文件或者不在配置文件后面加,直接在如下图的地方加入命令方法二)Output 选择zax-i这个方法会出现一点小问题,如果有__eeprom 则会出下面的错误提示,__flash 没事。

Error[e133]: The output format intel-standard cannot handle multiple address spaces. Use format variants (-y -O) to specify which address space is wanted (.hex 和.eep不能同时放到一个文件中,如果没有.eep文件生成就不会报错,可以正常使用了)中断向量的使用IAR中定义中断函数的格式是/////////////////////////////////#pragma vector=中断向量__interrupt void 中断服务程序(void){//中断处理程序}/////////////////////////////////////中断的初始化要另外加入代码,可在主程序内加入。

如下是各个中断函数的定义。

//中断定义#include <iom16.h>#pragma vector=INT0_vect__interrupt void INT0_Server(void){}#pragma vector=INT1_vect__interrupt void INT1_Server(void){}#pragma vector=TIMER2_COMP_vect__interrupt void TIMER2_COMP_Server(void){}#pragma vector=TIMER2_OVF_vect__interrupt void TIMER2_OVF_Server(void){}#pragma vector=TIMER1_CAPT_vect__interrupt void TIMER1_CAPT_Server(void){}#pragma vector=TIMER1_COMPA_vect__interrupt void TIMER1_COMPA_Server(void){}#pragma vector=TIMER1_COMPB_vect__interrupt void TIMER1_COMPB_Server(void){}#pragma vector=TIMER1_OVF_vect__interrupt void TIMER1_OVF_Server(void){}#pragma vector=TIMER0_OVF_vect__interrupt void TIMER0_OVF_Server(void) {}#pragma vector=SPI_STC_vect__interrupt void SPI_STC_Server(void){}#pragma vector=USART_RXC_vect__interrupt void USART_RXC_Server(void) {}#pragma vector=USART_UDRE_vect__interrupt void USART_UDRE_Server(void) {}#pragma vector=USART_TXC_vect__interrupt void USART_TXC_Server(void) {}#pragma vector=ADC_vect__interrupt void ADC_Server(void){}#pragma vector=EE_RDY_vect__interrupt void EE_RDY_Server(void){}#pragma vector=ANA_COMP_vect__interrupt void ANA_COMP_Server(void) {}#pragma vector=TWI_vect__interrupt void TWI_Server(void){}#pragma vector=INT2_vect__interrupt void INT2_Server(void){}#pragma vector=TIMER0_COMP_vect__interrupt void TIMER0_COMP_Server(void) {}#pragma vector=SPM_RDY_vect__interrupt void SPM_RDY_Server(void){}如何把常数字符串定义在flash 空间?法一:unsigned char __flash temptab[] = {1,2,3,4,5};法二:__flash unsigned char temptab[] = {1,2,3,4,5};法三:#pragma type_attribute=__flashunsigned char temptab[]={1,2,3,4,5};法四:const unsigned char temptab[]={1,2,3,4,5};注:第三种方式用#pragma说明后,下面的定义的变量将都在FLASH空间了,用于定义一批FLASH变量,但实际上一般只能作为常量使用了.心得1图中CSTACK的大小调整大小可在编译后的632 bytes of DATA memory (+ 22 absolute ) 中看到。

用keil生成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文件和相关设置

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。

用keil生成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”的可执行二进制文件。

单片机C语言第三课生成HEX文件和最小化系统

单片机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.。

KEIL里如何生成HEX文件

KEIL里如何生成HEX文件

KEIL里如何生成HEX文件第四章:KEIL使用入门本章节介绍如何使用KEIL软件建立一个工程,编写一个简单的程序,编译和下载到单片机运行的流程,目的是教会用户学会用此软件写代码的最基本步骤。

第一步:下载并安装KEIL软件(略)第二步:打开KEIL软件,会出现如下界面我使用的是keil4版本。

这是打开后的界面1:建立一个新工程出现以下界面,在你的硬盘合适的文件夹中创立一个工程文件夹,最好是英文路径,如图是创立了test文件夹打开后,文件名取test,保存弹出芯片选择框,选择Atmel的89C51或89C52(4kb/8kb程序flash),如图选择后者然后点击OK,点击YES,工程创立完成,出现以下界面2:向工程里添加文件出现了新的文本编辑框text1,点击保存按钮输入你文本的文件名,名字可据代码所实现的功能起,如图,然后点击保存现在往工程里添加已经保存好的文件然后选择刚才保存的文件,点击ADD然后点击Close现在在工程目录下已经有你的文本文件了。

3:编译并生成hex文件现在将如下代码拷贝进待编辑的文本中#include //51单片机头文件#define uint unsigned int //用uint代替unsigned int void delay(uint z) //延时函数{uint x,y;for(x=z;x>0;x--)for(y=500;y>0;y--);}void main(){while(1) //让所有led循环闪烁{P2=0xff;delay(200);P2=0x00;delay(200);}}完成后,需要设置以下进行如图设置点击OK,然后进行以下操作在最下边的信息框出现以下信息打开你所建立的工程文件夹,会发现生成了.HEX文件。

iar生产bin hex文件

iar生产bin hex文件

在IAR及MDK里生成hex及bin文件的标准方法在IAR及MDK中生成bin及hex文件的设置方法:IAR里面--->生成bin文件:(1)在options->linker ->output->other选中->output里选择raw-binary,module-local里选择Include all,其余默认;(2)options->linker ->Extra Output->generate output file->format->output format 选择intel extended,override default 不选中,format variant 里面选择none;(3)结果*.bin在工程的flash文件夹下的exe文件夹里面。

生成hex文件:(1)编译生成“bin”的方法:Project\Option\ Linker\Output\Format,里面选择“Other”,在下面的“Output”选“raw-binary”生成bin。

(2)编译生成“hex”的方法:Project\Option\ Linker\Output\Format,里面选择“Other”,在下面的“Output”选“intel-extended”,生成a79直接改名成为hex或者选中上面的“Output Flie”在“Overrride default”项目里面改扩展名为hex。

MDK里面--->需要使用“ARM公司的RVCT开发套件中的fromelf.exe转换工具”这是MDK里面自带的工具,只要加在命令行中即可,具体步骤如下:生成bin文件:假如你的工程文件为Axf_To_Bin,(1)打开Options for Target ‘Axf_To_Bin ‘对话框,选择User标签页。

(2)构选Run User Programs After Build/Rebuild框中的Run #1多选框,在后边的文本框中输入C:\Keil\ARM\BIN31\fromelf.exe --bin -o 命令行;(3)重新编译文件,在./output/文件夹下生成了Axf_To_Bin.bin文件。

ADS1.2生成执行HEX文件,使用ISP功能,利用Flash Magic下载

ADS1.2生成执行HEX文件,使用ISP功能,利用Flash Magic下载

ADS1.2生成执行HEX文件,使用ISP功能,利用Flash Magic下载1、设置ADS1.2的输出文件选项。

32进制文件输出,文件后缀名一定要为“.hex”,Flash Magic可以在周立功单片机发展公司主页下载2、使用Flash magic下载。

Flash magic的设置如下3、先设置好最大波特率如下图4、识别CPU及连接。

放置跳线,复位目标板。

点击Flash magic>ISP>read device signature,应该返回结果如下5、打开可执行hex文件,下载到目标板上,其中重要的两个设置有6、下载成功后,注意看提示——会有一定的时间在校验LPC2214的串口ISP功能使用介绍1、新建一个连接,设置波特率为57600,如图:并保存2、超级终端的波特率可以支持19200及57600的,可以尝试去设定,只要ISP“?”命令返回的不是一些乱码,都可以是合适的波特率。

3、超级终端的设置如下:4、完成上述的设置后,进行命令行的握手A、放置跳线,复位目标板。

向LPC2214发送一个“?”,串口检测到后,自动返回一个“Synchronized”,提示能够识别。

B、发送“Synchronized”(回车键结束),返回一个“OK”。

表示可以进行同步。

C、发送波特率(10进制表示)(回车键结束),返回一个“OK”。

表示波特率设置成功。

5、完成上述的操作,就可以进入ISP(系统编程)功能,具体命令请参考LPC2214说明文档(第22章——LPC21xx/22xx On-chip serial bootloader for LPC2210/20/90)。

用matlab生成.hex和.mig格式

用matlab生成.hex和.mig格式

ROM初始化文件既可以是*.mif也可以是*.hex文件,但是如果工程需要在Modelsim中进行仿真的话,则必须生成*.hex文件对ROM进行初始化。

一般简单且有规律的初始化数据可以用Excel先生成mif文件再在综合软件中转化为hex文件,但如果所需信号要叠加各种各样的噪声时。

Excel则不能胜任,此时我们用MATLAB生成所需初始化数据,在使用下述程序则很容易生成HEX初始化文件。

程序先介绍hex文件的结构,后给出matlab程序,且我做了详细的注释,希望对大家有所帮助。

% __Created by He Yapeng.@School of Electronic Engineering and Photoelectricity Technology at Nanjing University of Science and Technology% --Email:lwkj0920@. ');% Intel 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文件由任意数量以回车换行符结束的数据记录组成.数据记录外观如下:% :10246200464C5549442050524F46494C4500464C33% 其中:% 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).%% Intel HEX文件例子:% 下面是一个完整的Intel HEX文件的例子:% :10001300AC12AD13AE10AF1112002F8E0E8F0F2244% :10000300E50B250DF509E50A350CF5081200132259% :03000000020023D8% :0C002300787FE4F6D8FD7581130200031D% :10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016% :04003F00A42EFE22CB% :00000001FF%%%% 附:英文原文%% QUESTION% What is the Intel HEX file format?% ANSWER% The Intel HEX file is an ASCII text file with lines of text that follow the % Intel HEX file format. Each line in an Intel HEX file contains one HEX record. % These records are made up of hexadecimal numbers that represent machine% language code and/or constant data. Intel HEX files are often used to transfer % the program and data that would be stored in a ROM or EPROM. Most EPROM% programmers or emulators can use Intel HEX files.% Record Format% An Intel HEX file is composed of any number of HEX records. Each record is made % up of five fields that are arranged in the following format:% :llaaaatt[dd...]cc% Each group of letters corresponds to a different field, and each letter% represents a single hexadecimal digit. Each field is composed of at least two % hexadecimal digits-which make up a byte-as described below:% : is the colon that starts every Intel HEX record.% ll is the record-length field that represents the number of data bytes (dd) in % the record.% aaaa is the address field that represents the starting address for subsequent % data in the record.% tt is the field that represents the HEX record type, which may be one of the % following:% 00 - data record% 01 - end-of-file record% 02 - extended segment address record% 04 - extended linear address record% dd is a data field that represents one byte of data. A record may have multiple % data bytes. The number of data bytes in the record must match the number% specified by the ll field.% cc is the checksum field that represents the checksum of the record. The% checksum is calculated by summing the values of all hexadecimal digit pairs in % the record modulo 256 and taking the two's complement.% Data Records% The Intel HEX file is made up of any number of data records that are terminated % with a carriage return and a linefeed. Data records appear as follows:% :10246200464C5549442050524F46494C4500464C33% where:% 10 is the number of data bytes in the record.% 2462 is the address where the data are to be located in memory.% 00 is the record type 00 (a data record).% 464C...464C is the data.% 33 is the checksum of the record.% Extended Linear Address Records (HEX386)% Extended linear address records are also known as 32-bit address records and % HEX386 records. These records contain the upper 16 bits (bits 16-31) of the % data address. The extended linear address record always has two data bytes and % appears as follows:% :02000004FFFFFC% where:% 02 is the number of data bytes in the record.% 0000 is the address field. For the extended linear address record, this field % is always 0000.% 04 is the record type 04 (an extended linear address record).% FFFF is the upper 16 bits of the address.% FC is the checksum of the record and is calculated as% 01h + NOT(02h + 00h + 00h + 04h + FFh + FFh).% When an extended linear address record is read, the extended linear address % stored in the data field is saved and is applied to subsequent records read % from the Intel HEX file. The linear address remains effective until changed by % another extended address record.% The absolute-memory address of a data record is obtained by adding the address % field in the record to the shifted address data from the extended linear% address record. The following example illustrates this process..% Address from the data record's address field 2462% Extended linear address record data field FFFF% --------% Absolute-memory address FFFF2462% Extended Segment Address Records (HEX86)% Extended segment address records-also known as HEX86 records-contain bits 4-19 % of the data address segment. The extended segment address record always has two % data bytes and appears as follows:% :020*********EA% where:% 02 is the number of data bytes in the record.% 0000 is the address field. For the extended segment address record, this field % is always 0000.% 02 is the record type 02 (an extended segment address record).% 1200 is the segment of the address.% EA is the checksum of the record and is calculated as% 01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).% When an extended segment address record is read, the extended segment address % stored in the data field is saved and is applied to subsequent records read % from the Intel HEX file. The segment address remains effective until changed by % another extended address record.% The absolute-memory address of a data record is obtained by adding the address % field in the record to the shifted-address data from the extended segment% address record. The following example illustrates this process.% Address from the data record's address field 2462% Extended segment address record data field 1200% --------% Absolute memory address 00014462% End-of-File (EOF) Records% An Intel HEX file must end with an end-of-file (EOF) record. This record must % have the value 01 in the record type field. An EOF record always appears as % follows:% :00000001FF% where:% 00 is the number of data bytes in the record.% 0000 is the address where the data are to be located in memory. The address in % end-of-file records is meaningless and is ignored. An address of 0000h is% typical.% 01 is the record type 01 (an end-of-file record).% FF is the checksum of the record and is calculated as% 01h + NOT(00h + 00h + 00h + 01h).% Example Intel HEX File% Following is an example of a complete Intel HEX file:% :10001300AC12AD13AE10AF1112002F8E0E8F0F2244% :10000300E50B250DF509E50A350CF5081200132259% :03000000020023D8% :0C002300787FE4F6D8FD7581130200031D% :10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016% :04003F00A42EFE22CB% :00000001FFclear ;clc;data=1:16;%data need to be writen into the mif filefh=fopen('E:Hex1.hex','w');l_data=length(data);for j=1:l_dataadr=dec2hex(j-1,4);%4位十六进制表示的地址data_hex=dec2hex(data(j),4);%4位十六进制表示的数据data_H=floor(data(j)/2^8);%数据十六进制高两位data_L=data(j)-data_H*2^8;%数据十六进制低两位adr_H=floor((j-1)/2^8);%地址十六进制高两位adr_L=(j-1)-adr_H*2^8;%地址十六进制低两位idetify_word=mod(2^8-mod(2+adr_H+adr_L+data_H+data_L,2^8),2^8);%十进制表示的校验位,外围mod函数是以防里面的mod函数结果为0idetify_word_hex=dec2hex(idetify_word,2);%十六进制表示的校验位fprintf(fh,[':02',adr,'00',data_hex,idetify_word_hex,' ']);%产生HEX码(end-1:end)endfprintf(fh,':00000001FF');fclose(fh);。

KEIL里如何生成HE文件

KEIL里如何生成HE文件

KEIL里如何生成HE文件Keil是一款广泛应用于嵌入式系统开发的集成开发环境(IDE),它可以用于多种微控制器平台的软件开发。

在Keil中生成HEX文件是非常常见的操作,HEX文件是一种可以由微控制器系统直接加载和执行的文件格式。

下面将介绍如何在Keil中生成HEX文件。

首先,在Keil中创建一个新的工程或打开一个已有的工程。

在工程文件夹中,可以看到一个名为“.uvproj”的工程文件,双击打开该文件进入Keil工程界面。

接下来,点击菜单栏上的“Project”选项,然后选择“Options for Target 'Target1'”(其中的'Target1'是目标设备的名称,可能因工程而异,可以根据实际工程情况进行选择)。

选项对话框中会展示一系列的选项和设置,其中有一个叫做“Output”或“输出”的选项。

在这个选项下,可以选择代码生成器的输出格式。

对于生成HEX文件,需要确保选择了可执行文件格式为HEX文件。

在代码生成器的输出格式选项中,可能还会有一些列的子选项,比如选择HEX文件的存储路径和文件名等。

在这些选项中,可以设置HEX文件保存的路径和名称,可以根据需要进行自定义。

通常,HEX文件的名称会和工程名称以及生成的可执行文件名称相关联,以便于在工程文件夹中进行识别和管理。

设置完以上选项后,点击确定,保存更改,然后重新编译工程。

编译过程完成后,可以在指定保存路径中找到生成的HEX文件。

此外,在Keil中还可以通过在工程文件上点击右键,选择“Open in Windows Explorer”或“在Windows资源管理器中打开”(可能因Keil版本而异)来直接打开工程所在的文件夹。

在文件夹中,可以找到生成的HEX文件以及其他相关的编译输出文件。

总结来说1.创建工程或打开已有工程;2. 进入“Project” -> “Options for Target 'Target1'”;3. 在选项对话框中找到“Output”或“输出”选项;4.设置可执行文件格式为HEX文件,并设置HEX文件的保存路径和名称;5.保存设置,重新编译工程;6.在指定保存路径中找到生成的HEX文件。

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

生成HEX文件的MATLAB程序ROM初始化文件既可以是*.mif也可以是*.hex文件,但是如果工程需要在Modelsim中进行仿真的话,则必须生成*.hex文件对ROM进行初始化。

一般简单且有规律的初始化数据可以用Excel先生成mif文件再在综合软件中转化为hex文件,但如果所需信号要叠加各种各样的噪声时。

Excel则不能胜任,此时我们用MATLAB生成所需初始化数据,在使用下述程序则很容易生成HEX初始化文件。

程序先介绍hex文件的结构,后给出matlab程序,且我做了详细的注释,希望对大家有所帮助。

% __Created by He Yapeng.@School of Electronic Engineering and Photoelectricity Technology at Nanjing University of Science and Technology% --Email:lwkj0920@. ');% Intel 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文件由任意数量以回车换行符结束的数据记录组成.数据记录外观如下:% :10246200464C5549442050524F46494C4500464C33% 其中:% 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).%% Intel HEX文件例子:% 下面是一个完整的Intel HEX文件的例子:% :10001300AC12AD13AE10AF1112002F8E0E8F0F2244% :10000300E50B250DF509E50A350CF5081200132259% :03000000020023D8% :0C002300787FE4F6D8FD7581130200031D% :10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016% :04003F00A42EFE22CB% :00000001FF%%%% 附:英文原文%% QUESTION% What is the Intel HEX file format?% ANSWER% The Intel HEX file is an ASCII text file with lines of text that follow the % Intel HEX file format. Each line in an Intel HEX file contains one HEX record. % These records are made up of hexadecimal numbers that represent machine% language code and/or constant data. Intel HEX files are often used to transfer % the program and data that would be stored in a ROM or EPROM. Most EPROM% programmers or emulators can use Intel HEX files.% Record Format% An Intel HEX file is composed of any number of HEX records. Each record is made % up of five fields that are arranged in the following format:% :llaaaatt[dd...]cc% Each group of letters corresponds to a different field, and each letter% represents a single hexadecimal digit. Each field is composed of at least two % hexadecimal digits-which make up a byte-as described below:% : is the colon that starts every Intel HEX record.% ll is the record-length field that represents the number of data bytes (dd) in % the record.% aaaa is the address field that represents the starting address for subsequent % data in the record.% tt is the field that represents the HEX record type, which may be one of the % following:% 00 - data record% 01 - end-of-file record% 02 - extended segment address record% 04 - extended linear address record% dd is a data field that represents one byte of data. A record may have multiple % data bytes. The number of data bytes in the record must match the number% specified by the ll field.% cc is the checksum field that represents the checksum of the record. The% checksum is calculated by summing the values of all hexadecimal digit pairs in % the record modulo 256 and taking the two's complement.% Data Records% The Intel HEX file is made up of any number of data records that are terminated % with a carriage return and a linefeed. Data records appear as follows:% :10246200464C5549442050524F46494C4500464C33% where:% 10 is the number of data bytes in the record.% 2462 is the address where the data are to be located in memory.% 00 is the record type 00 (a data record).% 464C...464C is the data.% 33 is the checksum of the record.% Extended Linear Address Records (HEX386)% Extended linear address records are also known as 32-bit address records and % HEX386 records. These records contain the upper 16 bits (bits 16-31) of the % data address. The extended linear address record always has two data bytes and % appears as follows:% :02000004FFFFFC% where:% 02 is the number of data bytes in the record.% 0000 is the address field. For the extended linear address record, this field % is always 0000.% 04 is the record type 04 (an extended linear address record).% FFFF is the upper 16 bits of the address.% FC is the checksum of the record and is calculated as% 01h + NOT(02h + 00h + 00h + 04h + FFh + FFh).% When an extended linear address record is read, the extended linear address % stored in the data field is saved and is applied to subsequent records read % from the Intel HEX file. The linear address remains effective until changed by % another extended address record.% The absolute-memory address of a data record is obtained by adding the address % field in the record to the shifted address data from the extended linear% address record. The following example illustrates this process..% Address from the data record's address field 2462% Extended linear address record data field FFFF% --------% Absolute-memory address FFFF2462% Extended Segment Address Records (HEX86)% Extended segment address records-also known as HEX86 records-contain bits 4-19 % of the data address segment. The extended segment address record always has two % data bytes and appears as follows:% :020*********EA% where:% 02 is the number of data bytes in the record.% 0000 is the address field. For the extended segment address record, this field % is always 0000.% 02 is the record type 02 (an extended segment address record).% 1200 is the segment of the address.% EA is the checksum of the record and is calculated as% 01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).% When an extended segment address record is read, the extended segment address % stored in the data field is saved and is applied to subsequent records read % from the Intel HEX file. The segment address remains effective until changed by % another extended address record.% The absolute-memory address of a data record is obtained by adding the address % field in the record to the shifted-address data from the extended segment% address record. The following example illustrates this process.% Address from the data record's address field 2462% Extended segment address record data field 1200% --------% Absolute memory address 00014462% End-of-File (EOF) Records% An Intel HEX file must end with an end-of-file (EOF) record. This record must % have the value 01 in the record type field. An EOF record always appears as % follows:% :00000001FF% where:% 00 is the number of data bytes in the record.% 0000 is the address where the data are to be located in memory. The address in % end-of-file records is meaningless and is ignored. An address of 0000h is% typical.% 01 is the record type 01 (an end-of-file record).% FF is the checksum of the record and is calculated as% 01h + NOT(00h + 00h + 00h + 01h).% Example Intel HEX File% Following is an example of a complete Intel HEX file:% :10001300AC12AD13AE10AF1112002F8E0E8F0F2244% :10000300E50B250DF509E50A350CF5081200132259% :03000000020023D8% :0C002300787FE4F6D8FD7581130200031D% :10002F00EFF88DF0A4FFEDC5F0CEA42EFEEC88F016% :04003F00A42EFE22CB% :00000001FFclear ;clc;data=1:16;%data need to be writen into the mif filefh=fopen('E:Hex1.hex','w');l_data=length(data);for j=1:l_dataadr=dec2hex(j-1,4);%4位十六进制表示的地址data_hex=dec2hex(data(j),4);%4位十六进制表示的数据data_H=floor(data(j)/2^8);%数据十六进制高两位data_L=data(j)-data_H*2^8;%数据十六进制低两位adr_H=floor((j-1)/2^8);%地址十六进制高两位adr_L=(j-1)-adr_H*2^8;%地址十六进制低两位idetify_word=mod(2^8-mod(2+adr_H+adr_L+data_H+data_L,2^8),2^8);%十进制表示的校验位,外围mod函数是以防里面的mod函数结果为0idetify_word_hex=dec2hex(idetify_word,2);%十六进制表示的校验位fprintf(fh,[':02',adr,'00',data_hex,idetify_word_hex,' ']);%产生HEX码(end-1:end)endfprintf(fh,':00000001FF');fclose(fh);。

相关文档
最新文档