C51固定ROM地址初始化数据方法
扫描二维码
随时随地手机看文章
查了很多资料,要用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、注意,定义的地址空间不能在你的程序内;也就是不能和你的程序地址重合;以免影响你的程序运行