找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4024|回复: 5
打印 上一主题 下一主题
收起左侧

怪事了,同一个C文件,为何编译出来的HEX文件不同?

[复制链接]
跳转到指定楼层
楼主
ID:290381 发表于 2018-3-11 14:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先我看了教学视频后,估计打算不看源程序就自己编写一下先
  1. #include <reg52.h>

  2. void main()
  3. {
  4.         P0 = ~0x3f;
  5.         while(1);
  6. }
复制代码
结果LED 不亮。

对比一下光盘里的源程序,觉得功能实现上没多大区别啊。

然后copy源程序来编译,就得出下面两种结果。
/**************************************************************************************
*                              静态数码管显示实验                                                                                                  *
实现现象:下载程序后数码管静态显示0。
注意事项:                                                                                                                                                                  
***************************************************************************************/

#include "reg52.h"                         //此文件中定义了单片机的一些特殊功能寄存器

typedef unsigned int u16;          //对数据类型进行声明定义
typedef unsigned char u8;


u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
                                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//显示0~F的值


/*******************************************************************************
* 函 数 名       : main
* 函数功能                 : 主函数
* 输    入       : 无
* 输    出             : 无
*******************************************************************************/
void main()
{        
        P0=~smgduan[0];
        while(1);
}
HEX 文件1:把源程序copy到我的工程文件里编译,LED不亮。
  1. :01000F0022CE
  2. :03000000020003F8
  3. :0C000300787FE4F6D8FD75810702000F3D
  4. :00000001FF
复制代码
HEX 文件2: 打开光盘的工程文件编译。LED 亮。 这是光盘里源程序编译出来的HEX文件
  1. :100003003F065B4F666D7D077F6F777C395E797145
  2. :0100130000EC
  3. :0A002000900003E493F4F58080FEE5
  4. :03000000020014E7
  5. :0C001400787FE4F6D8FD7581070200201B
  6. :00000001FF
复制代码


这是何故?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:290381 发表于 2018-3-11 15:00 | 只看该作者
另附上两个M51文件。
HEX 1 的M51文件
  1. BL51 BANKED LINKER/LOCATER V6.22.2.0                                                    03/11/2018  01:12:24  PAGE 1


  2. BL51 BANKED LINKER/LOCATER V6.22.2.0, INVOKED BY:
  3. C:\KEIL51\C51\BIN\BL51.EXE main.obj TO template


  4. MEMORY MODEL: SMALL


  5. INPUT MODULES INCLUDED:
  6.   main.obj (MAIN)
  7.   C:\KEIL51\C51\LIB\C51S.LIB (?C_STARTUP)


  8. LINK MAP OF MODULE:  template (MAIN)


  9.             TYPE    BASE      LENGTH    RELOCATION   SEGMENT NAME
  10.             -----------------------------------------------------

  11.             * * * * * * *   D A T A   M E M O R Y   * * * * * * *
  12.             REG     0000H     0008H     ABSOLUTE     "REG BANK 0"
  13.             IDATA   0008H     0001H     UNIT         ?STACK

  14.             * * * * * * *   C O D E   M E M O R Y   * * * * * * *
  15.             CODE    0000H     0003H     ABSOLUTE     
  16.             CODE    0003H     000CH     UNIT         ?C_C51STARTUP
  17.             CODE    000FH     0001H     UNIT         ?PR?MAIN?MAIN



  18. OVERLAY MAP OF MODULE:   template (MAIN)


  19. SEGMENT
  20.   +--> CALLED SEGMENT
  21. ---------------------
  22. ?C_C51STARTUP
  23.   +--> ?PR?MAIN?MAIN



  24. SYMBOL TABLE OF MODULE:  template (MAIN)

  25.   VALUE           TYPE          NAME
  26.   ----------------------------------

  27.   -------         MODULE        MAIN
  28.   C:0000H         SYMBOL        _ICE_DUMMY_
  29.   D:0090H         PUBLIC        P1
  30.   D:00B0H         PUBLIC        P3
  31.   D:00A8H         PUBLIC        IE
  32.   D:00B8H         PUBLIC        IP
  33.   C:000FH         PUBLIC        main
  34.   D:0098H         PUBLIC        SCON
  35.   D:0088H         PUBLIC        TCON
  36.   D:00C8H         PUBLIC        T2CON
  37.   D:00D0H         PUBLIC        PSW
  38.   -------         PROC          MAIN
  39.   C:000FH         LINE#         3
  40. BL51 BANKED LINKER/LOCATER V6.22.2.0                                                  03/11/2018  01:12:24  PAGE 2


  41.   C:000FH         LINE#         4
  42.   C:000FH         LINE#         6
  43.   -------         ENDPROC       MAIN
  44.   -------         ENDMOD        MAIN

  45. Program Size: data=9.0 xdata=0 code=16
  46. LINK/LOCATE RUN COMPLETE.  0 WARNING(S),  0 ERROR(S)
复制代码

HEX2 的M51文件
  1. BL51 BANKED LINKER/LOCATER V6.22.2.0                                                    03/11/2018  14:48:52  PAGE 1


  2. BL51 BANKED LINKER/LOCATER V6.22.2.0, INVOKED BY:
  3. C:\KEIL51\C51\BIN\BL51.EXE main.obj TO template


  4. MEMORY MODEL: SMALL


  5. INPUT MODULES INCLUDED:
  6.   main.obj (MAIN)
  7.   C:\KEIL51\C51\LIB\C51S.LIB (?C_STARTUP)


  8. LINK MAP OF MODULE:  template (MAIN)


  9.             TYPE    BASE      LENGTH    RELOCATION   SEGMENT NAME
  10.             -----------------------------------------------------

  11.             * * * * * * *   D A T A   M E M O R Y   * * * * * * *
  12.             REG     0000H     0008H     ABSOLUTE     "REG BANK 0"
  13.             IDATA   0008H     0001H     UNIT         ?STACK

  14.             * * * * * * *   C O D E   M E M O R Y   * * * * * * *
  15.             CODE    0000H     0003H     ABSOLUTE     
  16.             CODE    0003H     0011H     UNIT         ?CO?MAIN
  17.             CODE    0014H     000CH     UNIT         ?C_C51STARTUP
  18.             CODE    0020H     000AH     UNIT         ?PR?MAIN?MAIN



  19. OVERLAY MAP OF MODULE:   template (MAIN)


  20. SEGMENT
  21.   +--> CALLED SEGMENT
  22. ---------------------
  23. ?C_C51STARTUP
  24.   +--> ?PR?MAIN?MAIN

  25. ?PR?MAIN?MAIN
  26.   +--> ?CO?MAIN



  27. SYMBOL TABLE OF MODULE:  template (MAIN)

  28.   VALUE           TYPE          NAME
  29.   ----------------------------------

  30.   -------         MODULE        MAIN
  31.   C:0000H         SYMBOL        _ICE_DUMMY_
  32.   D:0080H         PUBLIC        P0
  33.   D:0090H         PUBLIC        P1
  34.   D:00B0H         PUBLIC        P3
  35.   D:00A8H         PUBLIC        IE
  36.   D:00B8H         PUBLIC        IP
  37.   C:0020H         PUBLIC        main
  38.   D:0098H         PUBLIC        SCON
  39. BL51 BANKED LINKER/LOCATER V6.22.2.0                                                  03/11/2018  14:48:52  PAGE 2


  40.   D:0088H         PUBLIC        TCON
  41.   D:00C8H         PUBLIC        T2CON
  42.   C:0003H         PUBLIC        smgduan
  43.   D:00D0H         PUBLIC        PSW
  44.   -------         PROC          MAIN
  45.   C:0020H         LINE#         23
  46.   C:0020H         LINE#         24
  47.   C:0020H         LINE#         25
  48.   C:0028H         LINE#         26
  49.   -------         ENDPROC       MAIN
  50.   -------         ENDMOD        MAIN

  51. Program Size: data=9.0 xdata=0 code=42
  52. LINK/LOCATE RUN COMPLETE.  0 WARNING(S),  0 ERROR(S)
复制代码

抓狂了。
回复

使用道具 举报

板凳
ID:290381 发表于 2018-3-11 15:02 | 只看该作者
HEX1 的M51 文件
  1. BL51 BANKED LINKER/LOCATER V6.22.2.0                                                    03/11/2018  01:12:24  PAGE 1


  2. BL51 BANKED LINKER/LOCATER V6.22.2.0, INVOKED BY:
  3. C:\KEIL51\C51\BIN\BL51.EXE main.obj TO template


  4. MEMORY MODEL: SMALL


  5. INPUT MODULES INCLUDED:
  6.   main.obj (MAIN)
  7.   C:\KEIL51\C51\LIB\C51S.LIB (?C_STARTUP)


  8. LINK MAP OF MODULE:  template (MAIN)


  9.             TYPE    BASE      LENGTH    RELOCATION   SEGMENT NAME
  10.             -----------------------------------------------------

  11.             * * * * * * *   D A T A   M E M O R Y   * * * * * * *
  12.             REG     0000H     0008H     ABSOLUTE     "REG BANK 0"
  13.             IDATA   0008H     0001H     UNIT         ?STACK

  14.             * * * * * * *   C O D E   M E M O R Y   * * * * * * *
  15.             CODE    0000H     0003H     ABSOLUTE     
  16.             CODE    0003H     000CH     UNIT         ?C_C51STARTUP
  17.             CODE    000FH     0001H     UNIT         ?PR?MAIN?MAIN



  18. OVERLAY MAP OF MODULE:   template (MAIN)


  19. SEGMENT
  20.   +--> CALLED SEGMENT
  21. ---------------------
  22. ?C_C51STARTUP
  23.   +--> ?PR?MAIN?MAIN



  24. SYMBOL TABLE OF MODULE:  template (MAIN)

  25.   VALUE           TYPE          NAME
  26.   ----------------------------------

  27.   -------         MODULE        MAIN
  28.   C:0000H         SYMBOL        _ICE_DUMMY_
  29.   D:0090H         PUBLIC        P1
  30.   D:00B0H         PUBLIC        P3
  31.   D:00A8H         PUBLIC        IE
  32.   D:00B8H         PUBLIC        IP
  33.   C:000FH         PUBLIC        main
  34.   D:0098H         PUBLIC        SCON
  35.   D:0088H         PUBLIC        TCON
  36.   D:00C8H         PUBLIC        T2CON
  37.   D:00D0H         PUBLIC        PSW
  38.   -------         PROC          MAIN
  39.   C:000FH         LINE#         3
  40. BL51 BANKED LINKER/LOCATER V6.22.2.0                                                  03/11/2018  01:12:24  PAGE 2


  41.   C:000FH         LINE#         4
  42.   C:000FH         LINE#         6
  43.   -------         ENDPROC       MAIN
  44.   -------         ENDMOD        MAIN

  45. Program Size: data=9.0 xdata=0 code=16
  46. LINK/LOCATE RUN COMPLETE.  0 WARNING(S),  0 ERROR(S)
复制代码

HEX2 的M51文件
  1. BL51 BANKED LINKER/LOCATER V6.22.2.0                                                    03/11/2018  14:48:52  PAGE 1


  2. BL51 BANKED LINKER/LOCATER V6.22.2.0, INVOKED BY:
  3. C:\KEIL51\C51\BIN\BL51.EXE main.obj TO template


  4. MEMORY MODEL: SMALL


  5. INPUT MODULES INCLUDED:
  6.   main.obj (MAIN)
  7.   C:\KEIL51\C51\LIB\C51S.LIB (?C_STARTUP)


  8. LINK MAP OF MODULE:  template (MAIN)


  9.             TYPE    BASE      LENGTH    RELOCATION   SEGMENT NAME
  10.             -----------------------------------------------------

  11.             * * * * * * *   D A T A   M E M O R Y   * * * * * * *
  12.             REG     0000H     0008H     ABSOLUTE     "REG BANK 0"
  13.             IDATA   0008H     0001H     UNIT         ?STACK

  14.             * * * * * * *   C O D E   M E M O R Y   * * * * * * *
  15.             CODE    0000H     0003H     ABSOLUTE     
  16.             CODE    0003H     0011H     UNIT         ?CO?MAIN
  17.             CODE    0014H     000CH     UNIT         ?C_C51STARTUP
  18.             CODE    0020H     000AH     UNIT         ?PR?MAIN?MAIN



  19. OVERLAY MAP OF MODULE:   template (MAIN)


  20. SEGMENT
  21.   +--> CALLED SEGMENT
  22. ---------------------
  23. ?C_C51STARTUP
  24.   +--> ?PR?MAIN?MAIN

  25. ?PR?MAIN?MAIN
  26.   +--> ?CO?MAIN



  27. SYMBOL TABLE OF MODULE:  template (MAIN)

  28.   VALUE           TYPE          NAME
  29.   ----------------------------------

  30.   -------         MODULE        MAIN
  31.   C:0000H         SYMBOL        _ICE_DUMMY_
  32.   D:0080H         PUBLIC        P0
  33.   D:0090H         PUBLIC        P1
  34.   D:00B0H         PUBLIC        P3
  35.   D:00A8H         PUBLIC        IE
  36.   D:00B8H         PUBLIC        IP
  37.   C:0020H         PUBLIC        main
  38.   D:0098H         PUBLIC        SCON
  39. BL51 BANKED LINKER/LOCATER V6.22.2.0                                                  03/11/2018  14:48:52  PAGE 2


  40.   D:0088H         PUBLIC        TCON
  41.   D:00C8H         PUBLIC        T2CON
  42.   C:0003H         PUBLIC        smgduan
  43.   D:00D0H         PUBLIC        PSW
  44.   -------         PROC          MAIN
  45.   C:0020H         LINE#         23
  46.   C:0020H         LINE#         24
  47.   C:0020H         LINE#         25
  48.   C:0028H         LINE#         26
  49.   -------         ENDPROC       MAIN
  50.   -------         ENDMOD        MAIN

  51. Program Size: data=9.0 xdata=0 code=42
  52. LINK/LOCATE RUN COMPLETE.  0 WARNING(S),  0 ERROR(S)
复制代码



回复

使用道具 举报

地板
ID:130231 发表于 2018-3-11 15:17 | 只看该作者
你确定编译时芯片有没有选对?
回复

使用道具 举报

5#
ID:290381 发表于 2018-3-11 15:45 | 只看该作者
搞定了,原来是选了不同的芯片,所以出现不同的编译结果。
回复

使用道具 举报

6#
ID:290381 发表于 2018-3-11 18:51 | 只看该作者
zqy181818 发表于 2018-3-11 15:17
你确定编译时芯片有没有选对?

谢谢。

我发现其实我芯片是选对的。在KEIL 4 设置的芯片是amtel 的at89c51,编译出来的程序能把led点亮
后来我再装了KEIL 5的最新版本,但这个版本没有amtel 的at89c51可选,只好选了microchip的at89c51,结果编译出来的结果就不能点亮LED了。

另我用的是普中科技的8600 V2.2 开发板。
奇怪
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表