51單片機(jī)啟動代碼:STARTUP.A51
通過Keil編譯器建立工程時,Keil會提示是否添加STARTUP.A51文件到工程,該文件即為51單片機(jī)啟動代碼。
51單片機(jī)復(fù)位后馬上執(zhí)行STARTUP.A51文件中的啟動代碼,根據(jù)啟動代碼中的設(shè)置依次執(zhí)行以下操作:
內(nèi)部RAM清零
外部RAM清零
清零分頁的外部RAM
初始化SMALL內(nèi)存模型的可重入模擬堆棧及其堆棧指針
初始化LARGE內(nèi)存模型的可重入模擬堆棧及其堆棧指針
初始化COMPACT內(nèi)存模型的可重入模擬堆棧及其堆棧指針
初始化8051單片機(jī)的硬件堆棧指針
將系統(tǒng)控制權(quán)轉(zhuǎn)交給初始化全局變量的代碼,如果沒有被初始化的全局變量則轉(zhuǎn)交給C程序文件中的main函數(shù)。
STARTUP.A51啟動文件中定義了一些常量,修改這些常量可以控制單片機(jī)復(fù)位時執(zhí)行的動作:
1、IDATALEN
指定idata區(qū)需要清零的字節(jié)數(shù)。默認(rèn)值為80H,這是由于8051系列單片機(jī)都包含至少128字節(jié)內(nèi)部ram。對于8052系列單片機(jī)或者其他系列具有256字節(jié)內(nèi)部ram的,可以將此值改為100H。
2、XDATASTART
指定外部ram需要清零的區(qū)域起始地址。
3、XDATALEN
指示xdata區(qū)需要清零的字節(jié)數(shù),默認(rèn)值為0.。
4、PDATASTART
指示需要清零的pdata區(qū)起始地址。
5、PDATALEN
指示pdata區(qū)需要清零的字節(jié)數(shù),默認(rèn)值為0。
6、IBPSTACK
指示是否初始化small內(nèi)存模型的可重入模擬堆棧指針(?C_IBP)。默認(rèn)值為0,不初始化該指針。值設(shè)為1,編譯器將初始化該指針。
7、IBPSTACKTOP
指示small內(nèi)存模型下可重入堆棧棧頂。默認(rèn)值為idata區(qū)的0xff。該堆棧區(qū)是否可用完全由用戶負(fù)責(zé),編譯器并不會幫助檢查該地址指定的堆棧區(qū)是否與程序使用的ram、硬件堆棧存在沖突。
8、XBPSTACK
指示是否初始化large內(nèi)存模型的可重入堆棧指針(?C_XBP)。默認(rèn)值為0,不初始化該指針。值設(shè)為1,編譯器將初始化該指針。
9、XBPSTACKTOP
指示large內(nèi)存模型的可重入堆棧棧頂。默認(rèn)值為xdata區(qū)的0xffff。該值指定的區(qū)域是否與程序使用的ram、硬件堆棧沖突由用戶負(fù)責(zé)。編譯器不做檢查。
10、PBPSTACK
指示是否初始化compact內(nèi)存模型的可重入堆棧棧指針(?C_PBP)。默認(rèn)值為0,不初始化該指針。值設(shè)為1,編譯器將初始化該指針。
11、PBPSTACKTOP
指示compact內(nèi)存模型可重入堆棧棧頂。默認(rèn)值為pdata區(qū)的0xff。該區(qū)域選擇是否合理完全由用戶負(fù)責(zé),編譯器不做檢查。
12、PPAGEENABLE
該值決定是否初始化Port 2的值,以便pdata區(qū)尋址。默認(rèn)值為0,不初始化Port 2。pdata尋址使用Port 2的值作為地址的高字節(jié)。
13、PPAGE
指示對Port 2 設(shè)置的值,用于pdata尋址時作為地址高字節(jié)。例如,pdata區(qū)起始位置為xdata區(qū)的0x1000,則PPAGEENABLE應(yīng)該設(shè)為1,并且PPAGE應(yīng)該設(shè)為0x10。