当前位置:首页 > 单片机 > 单片机
[导读]查了很多资料,要用KEIL C51在ROM(FLASH)中固定的位置写入一个初始化数据,网上有很多办法,感觉都不是很好,我最近因为要用,所以想了一个办法来实现,大家都知道在C51成立工程时都有一个扩展名为A51的源文件,这

查了很多资料,要用KEIL C51在ROM(FLASH)中固定的位置写入一个初始化数据,网上有很多办法,感觉都不是很好,我最近因为要用,所以想了一个办法来实现,大家都知道在C51成立工程时都有一个扩展名为A51的源文件,这个文件其实就是程序的初始化文件,也就是在程序的开始对堆栈等东西做一个初始化;好了话不多说;下面介绍如何使用。

1、一般的工程可以不用此文件,把此文件删除就可以;但是我们要对ROM的固定地址填入数据,所以这个文件要加在工程内。

2、打开这个文件会有很长的篇幅,这些其实都是没有用的,删除就可以,只留下最后三行就可以,因为有这个文件后,编译器要知道如何转移到你的main()。看第5条。

3、在上面一个位置就可以写入如下的数据。

CSEG AT 03FcH
DB 10h,11h,12h

这个意思就是在03FC地址处存放下面的3个数据。当然你可以定义更多。

你也可以加上地址符号。

CSEG AT 03FcH
FLASH_DATA1: DB 10h,11h,12h

CSEG AT 03ecH
fLASH_DATA2: DB 10h,11h,12h

4、在主程序中可以这样处理

#define FLASH_DATA1 0x3fc

#define FLASH_DATA2 0x3Ec

定义一个FLASH的基地址。这个时候你就可以随便读写了。

5、注意要把A51文件处理好,要保证它能够转移到MAIN中;下面是我用的START900.A51;留以下内容就可以。

;以下是START900.A51的全部内容=================================================

CSEG AT 03FcH
FLASH_DATA1: DB 10h,11h,12h

CSEG AT 03ecH
fLASH_DATA2: DB 10h,11h,12h

EXTRN CODE (?C_START) ;只留下面的三行就可以。
JMP ?C_START

END

;============================================================================

原文件的开始有很多常量的定义,还有IF语句,这些删除就可以,只留最下面的这三行;编译器就知道你的MAIN入口了;可能别的A51文件不些不同,但这三行都是有的;别的都删除。

6、注意,定义的地址空间不能在你的程序内;也就是不能和你的程序地址重合;以免影响你的程序运行


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭