C51固定ROM地址初始化數(shù)據(jù)方法
查了很多資料,要用KEIL C51在ROM(FLASH)中固定的位置寫入一個初始化數(shù)據(jù),網(wǎng)上有很多辦法,感覺都不是很好,我最近因為要用,所以想了一個辦法來實現(xiàn),大家都知道在C51成立工程時都有一個擴展名為A51的源文件,這個文件其實就是程序的初始化文件,也就是在程序的開始對堆棧等東西做一個初始化;好了話不多說;下面介紹如何使用。
1、一般的工程可以不用此文件,把此文件刪除就可以;但是我們要對ROM的固定地址填入數(shù)據(jù),所以這個文件要加在工程內(nèi)。
2、打開這個文件會有很長的篇幅,這些其實都是沒有用的,刪除就可以,只留下最后三行就可以,因為有這個文件后,編譯器要知道如何轉(zhuǎn)移到你的main()。看第5條。
3、在上面一個位置就可以寫入如下的數(shù)據(jù)。
CSEG AT 03FcH
DB 10h,11h,12h
這個意思就是在03FC地址處存放下面的3個數(shù)據(jù)。當然你可以定義更多。
你也可以加上地址符號。
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文件處理好,要保證它能夠轉(zhuǎn)移到MAIN中;下面是我用的START900.A51;留以下內(nèi)容就可以。
;以下是START900.A51的全部內(nèi)容=================================================
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、注意,定義的地址空間不能在你的程序內(nèi);也就是不能和你的程序地址重合;以免影響你的程序運行