STARTUP.A51
上传用户:hg0078
上传日期:2019-06-07
资源大小:13869k
文件大小:6k
- $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 memory
- XDATASTART 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 memory
- PDATASTART 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 initalization
- PPAGEENABLE 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 byte
- PPAGE_SFR DATA 0A0H
- ;
- ; </e>
- ;------------------------------------------------------------------------------
- ; Standard SFR Symbols
- ACC DATA 0E0H
- B DATA 0F0H
- SP DATA 81H
- DPL DATA 82H
- DPH DATA 83H
- 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_C51STARTUP
- STARTUP1:
- IF IDATALEN <> 0
- MOV R0,#IDATALEN - 1
- CLR A
- IDATALOOP: MOV @R0,A
- DJNZ R0,IDATALOOP
- ENDIF
- 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
- IF PPAGEENABLE <> 0
- MOV PPAGE_SFR,#PPAGE
- ENDIF
- IF PDATALEN <> 0
- MOV R0,#LOW (PDATASTART)
- MOV R7,#LOW (PDATALEN)
- CLR A
- PDATALOOP: MOVX @R0,A
- INC R0
- DJNZ R7,PDATALOOP
- ENDIF
- IF IBPSTACK <> 0
- EXTRN DATA (?C_IBP)
- MOV ?C_IBP,#LOW IBPSTACKTOP
- ENDIF
- IF XBPSTACK <> 0
- EXTRN DATA (?C_XBP)
- MOV ?C_XBP,#HIGH XBPSTACKTOP
- MOV ?C_XBP+1,#LOW XBPSTACKTOP
- ENDIF
- IF PBPSTACK <> 0
- EXTRN DATA (?C_PBP)
- MOV ?C_PBP,#LOW PBPSTACKTOP
- ENDIF
- 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