51單片機啓動代碼:STARTUP.A51

通過Keil編譯器建立工程時,Keil會提示是否添加STARTUP.A51文件到工程,該文件即爲51單片機啓動代碼。

51單片機復位後馬上執行STARTUP.A51文件中的啓動代碼,根據啓動代碼中的設置依次執行以下操作:

  • 內部RAM清零
  • 外部RAM清零
  • 清零分頁的外部RAM
  • 初始化SMALL內存模型的可重入模擬堆棧及其堆棧指針
  • 初始化LARGE內存模型的可重入模擬堆棧及其堆棧指針
  • 初始化COMPACT內存模型的可重入模擬堆棧及其堆棧指針
  • 初始化8051單片機的硬件堆棧指針
  • 將系統控制權轉交給初始化全局變量的代碼,如果沒有被初始化的全局變量則轉交給C程序文件中的main函數。
STARTUP.A51啓動文件中定義了一些常量,修改這些常量可以控制單片機復位時執行的動作:

        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。








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章