📄 startup.a51
字号:
$NOMOD51;------------------------------------------------------------------------------; This file is part of the C51 Compiler package; Copyright (c) 1988-2005 Keil Elektronik GmbH and Keil Software, Inc.; Version 8.01;; *** <<< Use Configuration Wizard in Context Menu >>> ***;------------------------------------------------------------------------------; STARTUP.A51: This code is executed after processor reset.;; To translate this file use A51 with the following invocation:;; A51 STARTUP.A51;; To link the modified STARTUP.OBJ file to your application use the following; Lx51 invocation:;; Lx51 your object file list, STARTUP.OBJ controls;;------------------------------------------------------------------------------;; User-defined <h> Power-On Initialization of Memory;; With the following EQU statements the initialization of memory; at processor reset can be defined:;; <o> IDATALEN: IDATA memory size <0x0-0x100>; <i> Note: The absolute start-address of IDATA memory is always 0; <i> The IDATA space overlaps physically the DATA and BIT areas.IDATALEN EQU 80H;; <o> XDATASTART: XDATA memory start address <0x0-0xFFFF> ; <i> The absolute start address of XDATA memoryXDATASTART EQU 0 ;; <o> XDATALEN: XDATA memory size <0x0-0xFFFF> ; <i> The length of XDATA memory in bytes.XDATALEN EQU 0 ;; <o> PDATASTART: PDATA memory start address <0x0-0xFFFF> ; <i> The absolute start address of PDATA memoryPDATASTART EQU 0H;; <o> PDATALEN: PDATA memory size <0x0-0xFF> ; <i> The length of PDATA memory in bytes.PDATALEN EQU 0H;;</h>;------------------------------------------------------------------------------;;<h> Reentrant Stack Initialization;; The following EQU statements define the stack pointer for reentrant; functions and initialized it:;; <h> Stack Space for reentrant functions in the SMALL model.; <q> IBPSTACK: Enable SMALL model reentrant stack; <i> Stack space for reentrant functions in the SMALL model.IBPSTACK EQU 0 ; set to 1 if small reentrant is used.; <o> IBPSTACKTOP: End address of SMALL model stack <0x0-0xFF>; <i> Set the top of the stack to the highest location.IBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 ; </h>;; <h> Stack Space for reentrant functions in the LARGE model. ; <q> XBPSTACK: Enable LARGE model reentrant stack; <i> Stack space for reentrant functions in the LARGE model.XBPSTACK EQU 0 ; set to 1 if large reentrant is used.; <o> XBPSTACKTOP: End address of LARGE model stack <0x0-0xFFFF>; <i> Set the top of the stack to the highest location.XBPSTACKTOP EQU 0xFFFF +1 ; default 0FFFFH+1 ; </h>;; <h> Stack Space for reentrant functions in the COMPACT model. ; <q> PBPSTACK: Enable COMPACT model reentrant stack; <i> Stack space for reentrant functions in the COMPACT model.PBPSTACK EQU 0 ; set to 1 if compact reentrant is used.;; <o> PBPSTACKTOP: End address of COMPACT model stack <0x0-0xFFFF>; <i> Set the top of the stack to the highest location.PBPSTACKTOP EQU 0xFF +1 ; default 0FFH+1 ; </h>;</h>;------------------------------------------------------------------------------;; Memory Page for Using the Compact Model with 64 KByte xdata RAM; <e>Compact Model Page Definition;; <i>Define the XDATA page used for PDATA variables. ; <i>PPAGE must conform with the PPAGE set in the linker invocation.;; Enable pdata memory page initalizationPPAGEENABLE EQU 0 ; set to 1 if pdata object are used.;; <o> PPAGE number <0x0-0xFF> ; <i> uppermost 256-byte address of the page used for PDATA variables.PPAGE EQU 0;; <o> SFR address which supplies uppermost address byte <0x0-0xFF> ; <i> most 8051 variants use P2 as uppermost address bytePPAGE_SFR DATA 0A0H;; </e>;------------------------------------------------------------------------------; Standard SFR Symbols ACC DATA 0E0HB DATA 0F0HSP DATA 81HDPL DATA 82HDPH DATA 83HPCA0MD DATA 0D9H NAME ?C_STARTUP?C_C51STARTUP SEGMENT CODE?STACK SEGMENT IDATA RSEG ?STACK DS 1 EXTRN CODE (?C_START) PUBLIC ?C_STARTUP CSEG AT 0?C_STARTUP: LJMP STARTUP1 RSEG ?C_C51STARTUPSTARTUP1:;Disable the Watch Dog TimerWDT_DISABLE: MOV PCA0MD, #0IF IDATALEN <> 0 MOV R0,#IDATALEN - 1 CLR AIDATALOOP: MOV @R0,A DJNZ R0,IDATALOOPENDIFIF 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 AXDATALOOP: MOVX @DPTR,A INC DPTR DJNZ R7,XDATALOOP DJNZ R6,XDATALOOPENDIFIF PPAGEENABLE <> 0 MOV PPAGE_SFR,#PPAGEENDIFIF PDATALEN <> 0 MOV R0,#LOW (PDATASTART) MOV R7,#LOW (PDATALEN) CLR APDATALOOP: MOVX @R0,A INC R0 DJNZ R7,PDATALOOPENDIFIF IBPSTACK <> 0EXTRN DATA (?C_IBP) MOV ?C_IBP,#LOW IBPSTACKTOPENDIFIF XBPSTACK <> 0EXTRN DATA (?C_XBP) MOV ?C_XBP,#HIGH XBPSTACKTOP MOV ?C_XBP+1,#LOW XBPSTACKTOPENDIFIF PBPSTACK <> 0EXTRN DATA (?C_PBP) MOV ?C_PBP,#LOW PBPSTACKTOPENDIF MOV SP,#?STACK-1; This code is required if you use L51_BANK.A51 with Banking Mode 4;<h> Code Banking; <q> Select Bank 0 for L51_BANK.A51 Mode 4#if 0 ; <i> Initialize bank mechanism to code bank 0 when using L51_BANK.A51 with Banking Mode 4.EXTRN CODE (?B_SWITCH0) CALL ?B_SWITCH0 ; init bank mechanism to code bank 0#endif;</h> LJMP ?C_START END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -