C51固定ROM地址初始化數(shù)據(jù)方法
查了很多資料,要用KEIL C51在ROM(FLASH)中固定的位置寫(xiě)入一個(gè)初始化數(shù)據(jù),網(wǎng)上有很多辦法,感覺(jué)都不是很好,我最近因?yàn)橐茫韵肓艘粋€(gè)辦法來(lái)實(shí)現(xiàn),大家都知道在C51成立工程時(shí)都有一個(gè)擴(kuò)展名為A51的源文件,這個(gè)文件其實(shí)就是程序的初始化文件,也就是在程序的開(kāi)始對(duì)堆棧等東西做一個(gè)初始化;好了話不多說(shuō);下面介紹如何使用。
1、一般的工程可以不用此文件,把此文件刪除就可以;但是我們要對(duì)ROM的固定地址填入數(shù)據(jù),所以這個(gè)文件要加在工程內(nèi)。
2、打開(kāi)這個(gè)文件會(huì)有很長(zhǎng)的篇幅,這些其實(shí)都是沒(méi)有用的,刪除就可以,只留下最后三行就可以,因?yàn)橛羞@個(gè)文件后,編譯器要知道如何轉(zhuǎn)移到你的main()??吹?條。
3、在上面一個(gè)位置就可以寫(xiě)入如下的數(shù)據(jù)。
CSEG AT 03FcH
DB 10h,11h,12h
這個(gè)意思就是在03FC地址處存放下面的3個(gè)數(shù)據(jù)。當(dāng)然你可以定義更多。
你也可以加上地址符號(hào)。
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
定義一個(gè)FLASH的基地址。這個(gè)時(shí)候你就可以隨便讀寫(xiě)了。
5、注意要把A51文件處理好,要保證它能夠轉(zhuǎn)移到MAIN中;下面是我用的START900.A51;留以下內(nèi)容就可以。
;以下是START900.A51的全部?jī)?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
;============================================================================
原文件的開(kāi)始有很多常量的定義,還有IF語(yǔ)句,這些刪除就可以,只留最下面的這三行;編譯器就知道你的MAIN入口了;可能別的A51文件不些不同,但這三行都是有的;別的都刪除。
6、注意,定義的地址空間不能在你的程序內(nèi);也就是不能和你的程序地址重合;以免影響你的程序運(yùn)行