<var id="fnfpo"><source id="fnfpo"></source></var>
<rp id="fnfpo"></rp>

<em id="fnfpo"><object id="fnfpo"><input id="fnfpo"></input></object></em>
<em id="fnfpo"><acronym id="fnfpo"></acronym></em>
  • <th id="fnfpo"><track id="fnfpo"></track></th>
  • <progress id="fnfpo"><track id="fnfpo"></track></progress>
  • <tbody id="fnfpo"><pre id="fnfpo"></pre></tbody>

  • x
    x

    Keil C51中的啟動程序startup.a51最新中文說明!

    發布時間:2010-10-18 17:43    發布者:左左
    關鍵詞: Keil , C51 , startup
    Keil C51中的啟動程序startup.a51最新中文說明!
    由于CPU和程序啟動代碼文件STARTUP.a51的重要性,一些8051派生的CPU產品要求初始化CPU來滿足設計中的相應的硬件,因此,有時候用戶需要對STARTUP.a51進行修改,所以進行注釋一下:
    ;---------------------------------------------------
    ;startup.A51: 用戶上電初始化程序
    ;----------------------------------------------------
    ;
    ;使用以下EQU命令可定義在CPU復位時需要用0進行初始化的內存空間
    ;
    ;IDATA存儲器的空間的絕對起始地址總是零
    IDATALEN EQU 80H      ;需用0進行初始化的IDATA存儲器空間的字節數
    ;
    XDATASTART EQU 0H     ;XDATA存儲器空間的絕對起始地址
    XDATALEN EQU 0H       ;需用0進行初始化的XDATA存儲器的空間字節數
    ;
    PDATASTART EQU 0H     ;PDATA存儲器的空間的絕對起始地址
    PDATALEN EQU 0H       ;需用0進行初始化的PDATA存儲器的空間字節數
    ;注意:IDATA存儲器的空間在物理上包括了8051單片機的DATA和BIT存儲空間
    ;至少要保證與C51編譯器運行庫有關的存儲器的空間進行0初始化
    ;
    ;再入函數模擬初始化
    ;-----------------------------------------------------------
    ;以下用EQU指令定義了再入函數模擬堆棧指針的初始化
    ;
    ;使用SMALL存儲器模式時再入函數的堆?臻g
    IBPSACK EQU 0   ;使用SMALL存儲器模式再入函數時將其設置成1
    IBPSTACKTOP EQU 0FFH+1    ;將堆棧頂設置為最高地址加1
    ;
    ;使用LARGE存儲器模式時再入函數的堆?臻g
    XBPSTACK EQU 0     ;使用LARGE存儲器模式再入函數時將其設置成1
    XBPSTACKTOP WQU 0FFFFH+1     ;將堆棧頂設置為最高地址加1
    ;
    ;使用COMPACT存儲器模式時再入函數的堆?臻g
    PBPSTACK EQU 0     ; 使用COMPACT存儲器模式再入函數時將其設置成1
    PBPSTACKTOP WQU 0FFFFH+1     ;將堆棧頂設置為最高地址加1
    ;;----------------------------------------------------
    ;使用COMPACT存儲器模式時,64KB X DATA存儲器空間的分頁定義
    ;
    ;以下用EQU指令定義PDATA類型變量在XDATA存儲器空間的頁地址
    ;使用EQU指令定義PFAGE時必須與L51連接定位器PDATA指令的控制參數一致
    ;
    PPAGEENABLE EQU 0     ;使用PDATA類型變量時將其設置成1
    PPAGE EQU 0      ;定義頁號
    ;
    ;------------------------------------------------
    NAME ? C_STARTUP   ;模塊名為 ? C_STARTUP
    ? C_51STARTUP SEGMENT CODE     ;代碼段
    ? STACK SEGMENT IDATA      ;堆棧段
    RSEG ? STACK              ;堆棧
    DS 1
    EXTRN COE(? C_START)          ;程序開始地址
    PUBLIC ? C_STARTUP
    CSEG AT 0x8000                 ;定義用戶程序的起始地址,用MON51仿真器時可能有用
    ? C_STARTUP: LFMP STARTUP1
    RSEG ? C_51STARTUP
    STARTUP1:
    ;
    ;初始化串口
    MOV SCOM, #40H
    MOV TMOD, #20H
    MOV TH1, #0FDH
    SETB TR1
    CLR T1
    ;單片機上電IDATA內存清零,如果不需要上電清零IDATA,可以注銷IF到IFEDN之間的
    ;語句,或者修改IDTALEN的長度,為了讓CPU具有掉電保護功能,需要確定IDTALEN的長度
    IF IDATALEN <> 0
    MOV R0, # IDATALEN-1
    CLR A
    IDATALOOP: MOV @R0,A
    DJNZ R0,IDATALOOP
    ENDIF
    ;
    ;單片機上電XDATA內存清零,如果不需要上電清零XDATA,可以注銷IF到IFEDN之間的
    ;語句,或者修改XDTALEN的長度
    IF XDATALEN <> 0
    MOV DPTR, #XDATASTART
    MOV R7,#LOW (XDATALEN)
    IF (LOW(XDATALEN)) <> 0
    MOV R6, #(HIGH(XDATALEN))+1
    ELSE
    MOV R6, #HIGH (XDATALEN)
    ENDIF
    CLR A
    XDATALOOP: MOVX @DPTR, A
    INC DPTR
    DJNZ R7, XDATALOOP
    DJNZ R6, XDATALOOP
    END IF
    ;
    ;送PDATA存儲器頁面高位地址
    IF PPAGEENABLE <> 0
    MOV P2, #PPAGE
    ENDIF
    ;
    ;單片機上電PDATA內存清零,如果不需要上電清零XDATA,可注銷IF到IFEDN之
    ;間的語句或者修改PDATALEN的長度
    IF PDATALEN <> 0
    MOV R0, #PDATASTART
    MOV R7, #LOW (PDATALEN)
    CLR A
    PDATALOOP: MOV @R0, A
    INC R0
    DJNZ R7,PDATALOOP
    ENDIF
    ;
    ;設置使用SMALL存儲器模式時再入函數的堆?臻g
    IF IBPSTACK <> 0
    EXTRN DATA(? C_IBP)
    MOV ? C_IBP, #LOW IBPSTACKTOP
    ENDIF
    ;
    ;設置使用LARGE存儲器模式時再入函數的堆?臻g
    IF XBPSTACK <> 0
    EXTRN DATA (? C_XBP)
    MOV ? C_XBP, #HIGH XBPSTACKTOP
    MOV ? C_XBP +1, #LOW XBPSTACKTOP
    ENDIF
    ;
    ;設置使用COMPACT存儲器模式時再入函數的堆?臻g
    IF PBPSTACK <> 0
    EXTRN DATA(? C_PBP)
    MOV ? C_PBP, #LOW PBPSTACKTOP
    END IF
    ;
    ;設置堆棧的起始地址
    MOV SP, #? STACK-1           ;例如 MOV SP, #4FH
    ;
    ;如果程序超過64K,則使用程序分組技術,啟動下面的程序
    ;EXTRN CODE(? B_SWITCH0)
    ;CALL ? B_SWITCH0
    ;程序從第一組bank 0 塊開始執行
    ;跳轉到用戶程序MAIN函數
    LJMP ? C_START
    END
    本文地址:http://www.portaltwn.com/thread-33152-1-1.html     【打印本頁】

    本站部分文章為轉載或網友發布,目的在于傳遞和分享信息,并不代表本網贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據著作權人的要求,第一時間更正或刪除。
    freeboy898 發表于 2011-7-4 17:50:47
    文檔寫的不錯哦,簡單易懂哦。。謝謝樓主分享!
    您需要登錄后才可以發表評論 登錄 | 立即注冊

    廠商推薦

    • Microchip視頻專區
    • EtherCAT®和Microchip LAN925x從站控制器介紹培訓教程
    • MPLAB®模擬設計器——在線電源解決方案,加速設計
    • 讓您的模擬設計靈感,化為觸手可及的現實
    • 深度體驗Microchip自動輔助駕駛應用方案——2025巡展開啟報名!
    • 貿澤電子(Mouser)專區
    關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯系我們
    電子工程網 © 版權所有   京ICP備16069177號 | 京公網安備11010502021702
    快速回復 返回頂部 返回列表
    精品一区二区三区自拍图片区_国产成人亚洲精品_亚洲Va欧美va国产综合888_久久亚洲国产精品五月天婷