登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

如何看HEX文件阿?

作者:hejide2002 栏目:单片机
如何看HEX文件阿?
 
2楼: >>参与讨论
hejide2002
HEX怎么看?谢谢
比如:
:03000000020023D8
:0C002300787FE4F6D8FD75810702000329
:10000300E4FFFEE4FDFC0DBD00010CED640A4C7041
:10001300F50FBF00010EBE03EABFE8E7B2A080E020
:00000001FF


谢谢!!!

3楼: >>参与讨论
h218
不同公司的编译器出来的不完全同
做几个简单的程式,对照 LIST 看

4楼: >>参与讨论
h218
如没有 List 文件
一般的编译器在左边是地址,最右边是校验,还要看程序字的长度
PIC 有12位,16位 那么是两字节一行
51 系列、摩托等是不定长的,要难一些,一个一个的找
你的芯片是什么?????




5楼: >>参与讨论
h218
例子


         ORG 000H
BEGIN:   MOVLW  01H
         MOVLW  02H
         MOVLW  03H
         MOVLW  04H
         MOVLW  05H
         MOVLW  06H
         MOVLW  07H
         MOVLW  08H
         MOVLW  09H
         MOVLW  0AH
         MOVLW  0BH
         MOVLW  0CH
         MOVLW  0DH
         MOVLW  0EH
         MOVLW  0FH
         NOP
         MOVLW  10H
         MOVLW  11H
         MOVLW  12H
         MOVLW  13H
         MOVLW  14H
         MOVLW  15H
         MOVLW  16H
         MOVLW  17H
         MOVLW  18H
         MOVLW  19H
         MOVLW  1AH
         MOVLW  1BH
         MOVLW  1CH
         MOVLW  1DH
         MOVLW  1EH
         MOVLW  1FH
         NOP  
         GOTO   BEGIN
         
END



:20000000 0130 0230 0330 0430 0530 0630 0730 0830 0930 0A30 0B30 0C30 0D30 0E30 0F30 0000 98


:20002000 1030 1130 1230 1330 1430 1530 1630 1730 1830 1930 1A30 1B30 1C30 1D30 1E30 1F30 48


:04004000 0000 0028 94


:00000001 FF


6楼: >>参与讨论
h218
PIC16F73A 芯片

指 令              代码

MOVLW 01H  .......  0130
MOVLW 02H  .......  0230
MOVLW 03H  .......  0330
MOVLW 04H  .......  0430

.
.
.

NOP        .......  0000
GOTO BEGIN .......  0028



7楼: >>参与讨论
h218
51 例子



         ORG 000H
BEGIN:   MOV   A, #0
         MOV   A, #1
         MOV   A, #2
         MOV   A, #3
         MOV   A, #4
         MOV   A, #5
         MOV   A, #6
         MOV   A, #7
         MOV   A, #8
         MOV   A, #9
         MOV   A, #0AH
         MOV   A, #0BH
         MOV   A, #0CH
         MOV   A, #0DH
         MOV   A, #0EH
         MOV   A, #0FH
         NOP      

         MOV   A, #10H
         MOV   A, #11H
         MOV   A, #12H
         MOV   A, #13H
         MOV   A, #14H
         MOV   A, #15H
         MOV   A, #16H
         MOV   A, #17H
         MOV   A, #18H
         MOV   A, #19H
         MOV   A, #1AH
         MOV   A, #1BH
         MOV   A, #1CH
         MOV   A, #1DH
         MOV   A, #1EH
         MOV   A, #1FH

         INC   A
         NOP      
        
END


:20000000 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 740A 740B 740C 740D 740E 740F 28
:20002000 00   7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 741a 741B 741C 741D 741E 74 27
:03004000 1F 04 00 9A
:00000001 FF

8楼: >>参与讨论
h218
51

指 令              代码

MOV A,#00H  .......  7400 ; 双字节
MOV A,#01H  .......  7401
MOV A,#02H  .......  7402

.
.
.

NOP         .......  00   ; 单字节
INC A       .......  04   ; 单字节



9楼: >>参与讨论
h218
关于地址

:03   0000   00   02 00 23 D8
:0C   0023   00   78 7F E4 F6 D8 FD 75 81 07 02 00 03 29
:10   0003   00   E4 FF FE E4 FD FC 0D BD 00 01 0C ED 64 0A 4C 70 41
:10   0013   00   F5 0F BF 00 01 0E BE 03 EA BF E8 E7 B2 A0 80 E0 20
:00   0000   01   FF


行长  地址   
:03   0000   00   02 00 23 D8
:10   0003   00   E4 FF FE E4 FD FC 0D BD 00 01 0C ED 64 0A 4C 70 41
:10   0013   00   F5 0F BF 00 01 0E BE 03 EA BF E8 E7 B2 A0 80 E0 20
:0C   0023   00   78 7F E4 F6 D8 FD 75 81 07 02 00 03 29
:00   0000   01   FF

10楼: >>参与讨论
h218
按 51 帮你手工做的, 象是上电后的清 0

;03 0000 00   02 00 23 D8
;10 0003 00   E4 FF FE E4 FD FC 0D BD 00 01 0C ED 64 0A 4C 70 41
;10 0013 00   F5 0F BF 00 01 0E BE 03 EA BF E8 E7 B2 A0 80 E0 20
;0C 0023 00   78 7F E4 F6 D8 FD 75 81 07 02 00 03 29
;00 0000 01   FF


         ORG  0000H

BEGIN:   LJMP START

LOP0:    CLR  A
         MOV  R7,A
         MOV  R6,A

LOP1:    CLR  A
         MOV  R5,A
         MOV  R4,A

LOP2:    INC  R5
         CJNE R5,#00,SKP1
         INC  R4

SKP1:    MOV  A,R5
         XRL  A,#0AH
         ORL  A,R4
         JNZ  LOP2
         INC  R7
         CJNE R7,#00H,SKP2
         INC  R6

SKP2:    CJNE R6,#03H,LOP1
         CJNE R7,#0E8H,LOP1
         CPL  0A0H
         SJMP LOP0

         ORG  0023H
START:   MOV  R0,#7FH
         CLR  A
LP_CR:   MOV  @R0,A
         DJNZ R0,LP_CR
         
         MOV  81H,#07H
         LJMP LOP0
           
END

11楼: >>参与讨论
beiwei23du
看他的HEX文件有什么用啊?
看他的HEX文件有什么用啊?

12楼: >>参与讨论
雷风
楼主可能是不清楚hex文件格式吧,给你看一篇文章
一个INTEL HEX文件可以包含任意多的十六进制记录,每条记录有五个域,下面是一个记录的格式.

:llAAAA.html">AAAAtt[dd...]cc

每一组字母是独立的一域,每一个字母是一个十六进制数字,每一域至少由两个十六进制数字组成,下面是字节的描述.

:冒号     是每一条INTEL HEX记录的开始

ll 是这条记录的长度域,他表示数据(dd)的字节数目.

AAAA.html">AAAA 是地址域,他表示数据的起始地址
<如果是数据记录,这表示将要烧录的这条记录中的数据在EPROM中的偏移地址,
对于不支持扩展段地址和扩展线性地址的,如89C51,这就是此条记录的起始地址>

tt 这个域表示这条HEX记录的类型,他有可能是下面这几种类型
00 ----数据记录       
01 ----文件结束记录
02 ----扩展段地址记录
04 ----扩展线性地址记录

dd   是数据域,表示一个字节的数据,一个记录可能有多个数据字节,字节数目可以
查看ll域的说明

cc   是效验和域,表示记录的效验和,计算方法是将本条记录冒号开始的所有字母对

<不包括本效验字和冒号> 所表示的十六进制数字
<一对字母表示一个十六进制数,这样的一个十六进制数为一个字节>

都加起来然后模除256得到的余数最后求出余数的补码即是本效验字节cc.
<例如:
:0300000002005E9D
cc=0x01+NOT((0x03+0x00+0x00+0x00+0x02+0x00+0x5E)%0x100)=0x01+0x9C=0x9D

C语言描述:
UCHAR cc;
cc=(UCHAR)~(0x03+0x00+0x00+0x00+0x02+0x00+0x5E);
cc++;
>
数据记录

INTEL HEX文件由若干个数据记录组成,一个数据记录以一个回车和一个换行结束
                                          <回车为0x0d换行为0x0a>

比如下面的一条数据记录
:10246200464C5549442050524F46494C4500464C33

10   是此行记录数据的字节数目
2462   是数据在内存<将要烧写的eprom地址>中的起始地址
00     是记录类型00(是一个数据记录)
464C464C 是数据
33   是此行记录的效验和

扩展线性地址记录(HEX386)
扩展线性地址记录也可称为 32位地址记录   和   HEX386记录,这个纪录包含高16(16-31位)位数据地址,这种扩展的线性记录总是有两个字节数据,像下面这样:

: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位的数据地址段,
这个扩展段地址记录总是有两字节数据,如下:

:020000021200EA
02 是     记录中的数据字节数目
0000           是地址域,在扩展段地址记录中,这个域总是0000
02           是记录类型02(扩展段地址的标示)
1200     是该段的地址
EA     是效验和
计算如下:
01h + NOT(02h + 00h + 00h + 02h + 12h + 00h).

当扩展段地址记录被读后,扩展段地址将被存储并应用到以后从INTEL HEX文件读出的记录,这个段地址一直有效直到读到下一个扩展段地址记录

绝对内存地址 = 数据记录中的地址 + 移位后的扩展段地址


数据记录中的地址域       移位后扩展段地址记录中的地址域

下面举例说明这个过程

从数据记录的地址域得到地址                   2 4 6 2
从扩展段地址记录的地址域得到地址           1 2 0 0
绝对内存地址                         0 0 0 1 4 4 6 2

文件结束记录(EOF)
一个INTEL HEX文件必须有一个文件结束记录,这个记录的类型域必须是01,
一个EOF记录总是这样:
:00000001FF
00是记录中数据字节的数目
0000这个地址对于EOF记录来说无任何意义
01记录类型是01(文件结束记录标示)
FF是效验和计算如下
01h + NOT(00h + 00h + 00h + 01h).
========================

总结


形如
:BBAAAATTHHHH...HHHHCC

BB: Byte
AAAA:数据记录的开始地址,高位在前,地位在后
      因为这个格式只支持8bits,地址被倍乘
      所以,为了得到实际的PIC的地址,需要将 地址除以2
TT: Type
        00 数据记录
        01 记录结束
        04 扩展地址记录(表示32位地址的前缀,当然这种只能在 INHX32)
HHHH:一个字(Word)的数据记录,高Byte在前,低Byte在后
      TT之后,总共有 BB/2 个字 的数据
CC: 一个Byte的CHECKSUM



13楼: >>参与讨论
qjy_dali
楼上“雷风”才是楼主要的及时雨呀!
 
14楼: >>参与讨论
piter_tan
呵呵,我很笨的阿
看来半天我还是没有明白是怎么回事的

15楼: >>参与讨论
yadog
回复主题:如何看HEX文件阿?
路过

参与讨论
昵称:
讨论内容:
 
 
相关帖子
Keil C7.50升级出故障,请教为何?
有高速单片机吗?
请教SMD晶体谐振器的四个脚如何定义的?
求助关于二行16位字符液晶显示
TURBOC中有没有什么库函数是可以让光标消引的呢?
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号