新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > keil 51啟動代碼

        keil 51啟動代碼

        作者: 時間:2016-11-23 來源:網絡 收藏
        ;------------------------------------------------------------------------------
        ; STARTUP.A51: 用戶上電初始化程序
        ;------------------------------------------------------------------------------
        ;
        ; 用戶定義需上電初始化的內存空間
        ;
        ; 使用以下EQU命令可定義在CPU復位時需用0進行初始化的內存空間
        ;
        ;; ; IDATA 存儲器的空間的絕對起始地址總是0.;
        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存儲器模式時再入函數的堆棧空間 .
        IBPSTACK EQU 0 ; 使用SMALL存儲器模式再入函數時將其設置成1.
        IBPSTACKTOP EQU 0FFH+1 ; 將堆棧頂設置為最高地址+1.
        ;
        ; 使用LARGE存儲器模式時再入函數的堆棧空間.; 使用LARGE存儲器模式時再入函數的堆棧空間.
        XBPSTACK EQU 0 ; 使用LARGE存儲器模式再入函數時將其設置成1.
        XBPSTACKTOP EQU 0FFFFH+1; 將堆棧頂設置為最高地址+1.
        ;
        ; 使用COMPACT存儲器模式時再入函數的堆棧空間.; 使用COMPACT存儲器模式時再入函數的堆棧空間.
        PBPSTACK EQU 0 ; 使用COMPACT存儲器模式再入函數時將其設置成1.
        PBPSTACKTOP EQU 0FFFFH+1; 將堆棧頂設置為最高地址+1.
        ;
        ;------------------------------------------------------------------------------
        ;
        ; 使用COMPACT存儲器模式時64K字節XDATA存儲器空間的分頁定義
        ;
        ; 以下用EQU指令定義PDATA類型變量在XDATA存儲器空間的頁地址
        ; 使用EQU指令定義PFAGE時必須與L51連接定位器PDATA指令的控制參數一致
        ;
        PPAGEENABLE EQU 0 ; 使用PDATA類型變量時將其設置成1.
        PPAGE EQU 0 ; 定義頁號.
        ;
        ;------------------------------------------------------------------------------
        NAME ?C_STARTUP; 模塊名為 ?C_STAUTUP
        ?C_C51STARTUP SEGMENT CODE ; 代碼
        ?STACK SEGMENT IDATA ; 堆棧
        RSEG ?STACK ; 堆棧
        DS 1
        EXTRNEXTRN CODE ((?C_START)) ; 程序開始地址
        PUBLIC ?C_STARTUP
        CSEG AT 0x8000 ; 定義用戶程序的起始地址,用MON51仿真器時可能有用
        ?C_STARTUP: LJMP STARTUP1
        RSEG ?C_C51STARTUP
        STARTUP1::
        ;
        ; 初始化串口
        MOV SCON,#40H
        MOV TMOD,#20H
        MOV TH1,#0fdH
        SETB TR1
        CLR TI
        ; 單片機上電IDATA內存清零 如果不需要上電清零IDATA 可以注銷IF到IFEDN之間的話句
        ; 或者修改IDTALEN的長度 為了具有掉電保護功能 不知IDTALEN多長為好
        IF IDATALEN <> 0
        MOV R0,#IDATALEN - 1
        CLR A
        IDATALOOP: MOV @R0,A
        DJNZ R0,IDATALOOP
        ENDIF
        ;
        ; 單片機上電XDATA內存清零 如果不需要上電清零XDATA 可以注銷IF到IFEDN之間的話句
        ; 或者修改XDATALEN的長度
        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
        ENDIF
        ;
        ; 送PDATA存儲器頁面高位地址
        IF PAGEENABLE <> 0
        MOV P2,#PPAGE
        ENDIF
        ;
        ; 單片機上電PDATA內存清零 如果不需要上電清零XDATA 可以注銷IF到IFEDN之間的話句
        ; 或者修改PDATALEN的長度
        IF PDATALEN <> 0
        MOV R0,#PDATASTART
        MOV R7,#LOW (PDATALEN)
        CLR A
        PDATALOOP: MOVX @R0,A
        INC R0
        DJNZ R7,PDATALOOP
        ENDIF
        ;
        ; 設置使用SMALL存儲器模式時再入函數的堆棧空間.
        IF IBPSTACK <> 0
        EXTRN DATA (?C_IBP)
        MOV ?C_IBP,#LOW IBPSTACKTOP
        ENDIF
        ;
        ; 設置使用LARGE存儲器模式時再入函數的堆棧空間.
        IF XBPSTACK <> 0
        EXTRN DATA (?C_XBP)
        MOV ?C_XBP,#HIGH XBPSTACKTOP
        MOV ?C_XBP+1,#LOW XBPSTACKTOP
        ENDIF
        ;
        ; 設置使用COMPACT存儲器模式時再入函數的堆棧空間.
        IF PBPSTACK <> 0
        EXTRN DATA (C_PBP)
        MOV ?C_PBP,#LOW PBPSTACKTOP
        ENDIF
        ;
        ; 設置堆棧的起始地址
        MOV SP,#?STACK-1 ; 例如 MOV SP,#4FH;
        ; This code is required if you use L51_BANK.A51 with Banking Mode 4
        ; 如果你的程序使用了Mode 4 程序分組技術 請啟動下面的程序,不會吧你的程序超過64K 利害
        ; EXTRN CODE (?B_SWITCH0)
        ; CALL ?B_SWITCH0 ; init bank mechanism to code bank 0
        ;; 程序從第一組bank 0 塊開始執行
        ; 跳轉到用戶程序MAIN函數
        LJMP ?C_START
        END
        ;lINSHENGFENG


        關鍵詞: keil51啟動代

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 东莞市| 福贡县| 永年县| 大渡口区| 丰县| 壤塘县| 宁陕县| 双辽市| 曲靖市| 固原市| 霍州市| 姜堰市| 高密市| 徐汇区| 康平县| 丰原市| 吉木乃县| 任丘市| 兴海县| 贵定县| 石首市| 瑞金市| 旅游| 广宁县| 敦化市| 临猗县| 宝兴县| 无锡市| 晋宁县| 土默特左旗| 鄂托克前旗| 红河县| 双鸭山市| 乳源| 宁武县| 金湖县| 鹰潭市| 奉节县| 德阳市| 六枝特区| 平乡县|