导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→初学者:请问?请问?[hanjiang]

 *第1501篇: 初学者:请问?请问?

  
楼 主:hanjiang 2001年12月13日18:45
 初学者:请问?请问?
请问各位大侠,在keil里用c写好的程序,编译通过后生成的hex文件直接就可以写入单片机
rom内吗,各位大侠这样生成的hex文件中地址是从多少开始的??
我的汇编程序从我指定的0x0000开始,但c却不能,这是为什么??
  
2楼:老古 2001年12月13日19:17
 c默认是从0000开始的。除非你做了特殊的设定
  
3楼:hanjiang 2001年12月14日11:18
 没有做过特殊的设定!想不通。
  
4楼:hlg8888 2001年12月14日12:05
 HLG
编程的起始地址与使用的编程语言无关,取决于你的固化器和芯片,
  
5楼:hanjiang 2001年12月14日12:44
 再问!
以下c程序和汇编程序使用同样的keil51设置,但他们生成的hex文件不同:
1。汇编程序:
   MAIN: SETB P1.0;
      LCALL DELAY;
      CLR P1.0;
      LCALL DELAY;
      AJMP MAIN;

DELAY:MOV R7,#250;
   D1:MOV R6,#250;
   D2:DJNZ R6,D2;
      DJNZ R7,D1;
      RET
      END
  汇编的hex文件:
:10000000D29012000CC29012000C01007FFA7EFA0E
:05001000DEFEDFFA2214
:00000001FF

2。同样的程序用c写:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit P10=P1^0;

void delay(uint i)
{ uint j;
  for(;i>0;i--)
   {for(j=0;j<125;j++)
    {;}
   }
}

void main()
{ for(;;)
  {P10=1;
   delay(500);
   P10=0;
   delay(500);
  }
}
 相应的hex文件却是:
:10800000D3EF9400EE94004015E4FDFC0DBD00019B
:0E8010000CED647D4C70F5EF1F70E51E80E2F4
:01801E00223F
:10801F00D2907FF47E01128000C2907FF47E011215
:04802F00800080EC61
:0300000002803348
:0C803300787FE4F6D8FD75810702801FFD
:00000001FF
怎样才能该0x8000到0x0000呢?应为烧写器是找不到0x8000这样的地址的。

  
6楼:老古 2001年12月14日14:14
 是否修改了startup.a51的文件?
  
7楼:hanjiang 2001年12月14日17:04
 没有修改startup.a51的文件
没有。要修改吗?
我看过了,它的起始地址是0000。
编译是要把它加入工程吗?
  
8楼:老古 2001年12月14日18:32
 重新安装你的keil。
  
9楼:hanjiang 2001年12月14日19:27
 问题解决了,多谢老古!

>>>>>>对该主题发表你的看法

本主题贴数9,分页: [第1页]


[上一篇主题]:初学者:AT29c020掉电后,内容是否丢

[下一篇主题]:C51编程:请教各位大侠