⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 startup.a51

📁 采用811芯片实现单片机读写U盘的源代码
💻 A51
字号:
;/*
;------------------------------------------------------------------------------
;  This file is part of the C-51 Compiler package
;  Copyright KEIL ELEKTRONIK GmbH 1990
;------------------------------------------------------------------------------
;  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
;  L51 invocation:
;
;     L51 <your object file list>, STARTUP.OBJ <controls>
;
;------------------------------------------------------------------------------
;
;  User-defined Power-On Initialization of Memory
;
;  With the following EQU statements the initialization of memory
;  at processor reset can be defined:
;
;		; the absolute start-address of IDATA memory is always 0
IDATALEN	EQU	0H	; the length of IDATA memory in bytes.
;
XDATASTART	EQU	0H	; the absolute start-address of XDATA memory
XDATALEN	EQU	0H	; the length of XDATA memory in bytes.
;
PDATASTART	EQU	0H	; the absolute start-address of PDATA memory
PDATALEN	EQU	0H	; the length of PDATA memory in bytes.
;
;  Notes:  The IDATA space overlaps physically the DATA and BIT areas of the
;          8051 CPU. At minimum the memory space occupied from the C-51 
;          run-time routines must be set to zero.
;------------------------------------------------------------------------------
;
;  Reentrant Stack Initilization
;
;  The following EQU statements define the stack pointer for reentrant
;  functions and initialized it:
;
;  Stack Space for reentrant functions in the SMALL model.
IBPSTACK	EQU	0	; set to 1 if small reentrant is used.
IBPSTACKTOP	EQU	0FFH+1	; set top of stack to highest location+1.
;
;  Stack Space for reentrant functions in the LARGE model.	
XBPSTACK	EQU	0	; set to 1 if large reentrant is used.
XBPSTACKTOP	EQU	0FFFFH+1; set top of stack to highest location+1.
;
;  Stack Space for reentrant functions in the COMPACT model.	
PBPSTACK	EQU	0	; set to 1 if compact reentrant is used.
PBPSTACKTOP	EQU	0FFFFH+1; set top of stack to highest location+1.
;
;------------------------------------------------------------------------------
;
;  Page Definition for Using the Compact Model with 64 KByte xdata RAM
;
;  The following EQU statements define the xdata page used for pdata
;  variables. The EQU PPAGE must conform with the PPAGE control used
;  in the linker invocation.
;
PPAGEENABLE	EQU	0	; set to 1 if pdata object are used.
PPAGE		EQU	0	; define PPAGE number.
;
;------------------------------------------------------------------------------


		NAME	?C_STARTUP

	P4	EQU	0C0H
	WDKEY EQU 0AEH
	
?C_C51STARTUP	SEGMENT   CODE

;?STACK		SEGMENT   IDATA
;		RSEG	?STACK

;	DSEG    AT      52H
;?STACK:     DS      2eH
	ISEG    AT      0c0H
?STACK:     DS      40H


		EXTRN CODE (?C_START)
		PUBLIC	?C_STARTUP

		CSEG	AT	0
?C_STARTUP:	LJMP	STARTUP1

		RSEG	?C_C51STARTUP

STARTUP1:
;		ANL	P1,#00H		;清P1,P3口
;		ORL	P3,#0FFH
;		ORL	P4,#0FFH
;		SETB P1.2
;		SETB P1.3
;		CLR P3.7
;		CLR P3.4
		MOV	WDKEY,#55H

;		MOV	DPTR,#0FE04H	;PA口
;		MOV	A,#07FH
;		MOVX	@DPTR,A
;		MOV	A,#0FFH
;		MOV	DPTR,#0FE06H
;		MOVX	@DPTR,A
;		MOV	DPTR,#0FE0CH
;		MOVX	@DPTR,A
		
;		MOV	DPTR,#0FE05H	;PB口
;		MOV	A,#0FBH
;		MOVX	@DPTR,A
;		MOV	A,#017H
;		MOV	DPTR,#0FE07H
;		MOVX	@DPTR,A
;		MOV	DPTR,#0FE0DH
;		MOVX	@DPTR,A

;		MOV	DPTR,#0FE12H	;PC口
;		MOV	A,#0FFH
;		MOVX	@DPTR,A
;		MOV	DPTR,#0FE14H
;		MOVX	@DPTR,A
;		MOV	DPTR,#0FE1AH
;		MOVX	@DPTR,A
		
;		MOV	DPTR,#0FEE0H	;PRT口
;		MOV	A,#080H
;		MOVX	@DPTR,A		;写页寄存器
;		MOV	A,#0FFH		;不出针
;		MOV	DPTR,#00H
;		MOVX	@DPTR,A
;		MOV		A,#0CCH	;设置两个马达停止电流
;		MOV  	DPTR,#02000H
;		MOVX 	@DPTR,A
;		MOV	A,#00H		;恢复页寄存器
;		MOV	DPTR,#0FEE0H
;		MOVX	@DPTR,A

		MOV	TMOD,#21H	;定时器初始化 定时器1工作方式为2
		MOV	TH1,#0FDH	;定时器1波特率为9600
		MOV	TL1,#0FDH
		SETB	TR1		;定时器1接通工作
		MOV	TH0,#0EEH	;定时器0每5ms发一中断
		MOV	TL0,#01H
		MOV	SCON,#50H	;串口初始化 工作方式1,允许接收
		MOV	PCON,#00H
		MOV	IP,#0H		;串口中断优先
		MOV	IE,#00H		;允许中断


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 PDATALEN <> 0
		MOV	R0,#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

IF PPAGEENABLE <> 0
		MOV	P2,#PPAGE
ENDIF

		MOV	SP,#?STACK-1		;设堆栈
;		MOV	SP,#0C0H		;设堆栈

		LJMP	?C_START

		END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -