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