2 changed files with 199 additions and 0 deletions
@ -0,0 +1,198 @@ |
|||
$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 1 ; 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 |
Loading…
Reference in new issue