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

📄 start167.a66

📁 keilc pic的版本 才搞到的 希望对大家有帮助
💻 A66
📖 第 1 页 / 共 3 页
字号:
$IF (BUSCON1 = 1)
BCON1		SET     (_MTTC1 << 5) OR (_RWDC1 << 4)
BCON1		SET	BCON1 OR ((NOT _MCTC1) AND 0FH)
BCON1		SET	BCON1 AND (NOT (_RDYEN1 << 3))
BCON1 		SET	BCON1 OR (_RDY_AS1 << 3)  OR (_BTYP1 << 6)
BCON1 		SET	BCON1 OR (_ALECTL1 << 9) OR (_BUSACT1 << 10)
BCON1		SET	BCON1 OR (_RDYEN1 << 12) OR (_CSREN1 << 14)
BCON1           SET     BCON1 OR (_CSWEN1 << 15)

%ADDR (ADDR1,%ADDRESS1,%RANGE1)
		MOV	ADDRSEL1,#ADDR1 
		MOV	BUSCON1,#BCON1
$ENDIF

$IF (BUSCON2 = 1)
BCON2		SET     (_MTTC2 << 5) OR (_RWDC2 << 4)
BCON2		SET	BCON2 OR ((NOT _MCTC2) AND 0FH)
BCON2		SET	BCON2 AND (NOT (_RDYEN2 << 3))
BCON2 		SET	BCON2 OR (_RDY_AS2 << 3)  OR (_BTYP2 << 6)
BCON2 		SET	BCON2 OR (_ALECTL2 << 9) OR (_BUSACT2 << 10)
BCON2		SET	BCON2 OR (_RDYEN2 << 12) OR (_CSREN2 << 14)
BCON2           SET     BCON2 OR (_CSWEN2 << 15)

%ADDR (ADDR2,%ADDRESS2,%RANGE2)
		MOV	ADDRSEL2,#ADDR2 
		MOV	BUSCON2,#BCON2
$ENDIF

$IF (BUSCON3 = 1)
BCON3		SET     (_MTTC3 << 5) OR (_RWDC3 << 4)
BCON3		SET	BCON3 OR ((NOT _MCTC3) AND 0FH)
BCON3		SET	BCON3 AND (NOT (_RDYEN3 << 3))
BCON3 		SET	BCON3 OR (_RDY_AS3 << 3)  OR (_BTYP3 << 6)
BCON3 		SET	BCON3 OR (_ALECTL3 << 9) OR (_BUSACT3 << 10)
BCON3		SET	BCON3 OR (_RDYEN3 << 12) OR (_CSREN3 << 14)
BCON3           SET     BCON3 OR (_CSWEN3 << 15)

%ADDR (ADDR3,%ADDRESS3,%RANGE3)
		MOV	ADDRSEL3,#ADDR3 
		MOV	BUSCON3,#BCON3
$ENDIF

$IF (BUSCON4 = 1)
BCON4		SET     (_MTTC4 << 5) OR (_RWDC4 << 4)
BCON4		SET	BCON4 OR ((NOT _MCTC4) AND 0FH)
BCON4		SET	BCON4 AND (NOT (_RDYEN4 << 3))
BCON4 		SET	BCON4 OR (_RDY_AS4 << 3)  OR (_BTYP4 << 6)
BCON4 		SET	BCON4 OR (_ALECTL4 << 9) OR (_BUSACT4 << 10)
BCON4		SET	BCON4 OR (_RDYEN4 << 12) OR (_CSREN4 << 14)
BCON4           SET     BCON4 OR (_CSWEN4 << 15)

%ADDR (ADDR4,%ADDRESS4,%RANGE4)
		MOV	ADDRSEL4,#ADDR4 
		MOV	BUSCON4,#BCON4
$ENDIF



$IF (STK_SIZE = 7)
		MOV	SP,#DPP3:_TOS		;INITIALIZE STACK POINTER
		MOV	STKUN,#DPP3:_TOS	;INITIALIZE STACK UNFL REGISTER
		MOV	STKOV,#DPP3:(_BOS+6*2)	;INITIALIZE STACK OVFL REGISTER
$ELSE
		MOV	STKOV,#(_BOS+6*2)	;INITIALIZE STACK OVFL REGISTER
$ENDIF

$IF NOT TINY

		EXTRN	?C_PAGEDPP0 : DATA16
		EXTRN	?C_PAGEDPP1 : DATA16
		EXTRN	?C_PAGEDPP2 : DATA16

$IF (DPPUSE = 1)
		MOV	DPP0,#?C_PAGEDPP0       ; INIT DPP0 VALUE
$ENDIF
		MOV	DPP1,#?C_PAGEDPP1	; DEFAULT NEAR CONST PAGE
		MOV	DPP2,#?C_PAGEDPP2	; DEFAULT NEAR DATA  PAGE

$ENDIF

		MOV	CP,#?C_MAINREGISTERS
		EINIT

$IF NOT TINY
        	MOV	R0,#DPP2:?C_USERSTKTOP
$ELSE
	       	MOV	R0,#?C_USERSTKTOP
$ENDIF


;------------------------------------------------------------------------------
;
; The following code is necessary to set RAM variables to 0 at start-up
; (RESET) of the C application program.
;

$IF (CLR_MEMORY = 1)

		EXTRN	?C_CLRMEMSECSTART : WORD
Clr_Memory:
$IF TINY
		MOV	R8,#?C_CLRMEMSECSTART
		JMPR	cc_Z,EndClear

RepeatClear:
$IF (WATCHDOG = 1)
		SRVWDT				; SERVICE WATCHDOG
$ENDIF
		MOV	R5,#0
		MOV	R2,[R8+]    ; Count
		JMPR	cc_Z,EndClear
		MOV     R3,R2
		MOV     R4,[R8+]
		JBC     R2.14,ClearNear

ClearBit:	MOV	R3,R4
		SHR	R3,#3
		BCLR	R3.0
		ADD	R3,#0FD00H		; START OF BIT SPACE
		MOV	R5,#1
		SHL	R5,R4
		CPL	R5
		AND	R5,[R3]
		MOV	[R3],R5
		ADD	R4,#1
		SUB	R2,#1
		JMPR	cc_NZ,ClearBit
		JMPR	cc_UC,RepeatClear

ClearNear:
$IF (WATCHDOG = 1)
		SRVWDT				; SERVICE WATCHDOG
$ENDIF
		MOVB	[R4],RL5
		ADD	R4,#1
		SUB	R2,#1
		JMPR	cc_NN,ClearNear
		JMPR	cc_UC,RepeatClear

$ELSE
		MOV	R9,#SEG (?C_CLRMEMSECSTART)
		MOV	R8,#SOF (?C_CLRMEMSECSTART)
		MOV	R1,R8		
	        OR	R1,R9
		JMPR	cc_Z,EndClear

RepeatClear:
$IF (WATCHDOG = 1)
		SRVWDT				; SERVICE WATCHDOG
$ENDIF
		MOV	R5,#0
                EXTS    R9,#1
		MOV	R2,[R8+]    ; Count
		JMPR	cc_Z,EndClear
		MOV     R3,R2
                EXTS	R9,#1
		MOV     R4,[R8+]
		JBC     R2.14,ClearNear
		JBC     R2.15,ClearFar

ClearBit:	MOV	R3,R4
		SHR	R3,#3
		BCLR	R3.0
		ADD	R3,#0FD00H		; START OF BIT SPACE
		MOV	R5,#1
		SHL	R5,R4
		CPL	R5
		AND	R5,[R3]
		MOV	[R3],R5
		ADD	R4,#1
		SUB	R2,#1
		JMPR	cc_NZ,ClearBit
		JMPR	cc_UC,RepeatClear

ClearFar:	EXTS	R9,#1
                MOV	R3,[R8+]
RepClearFar:
$IF (WATCHDOG = 1)
		SRVWDT				; SERVICE WATCHDOG
$ENDIF
		EXTP	R4,#1
		MOVB	[R3],RL5
		ADD	R3,#1
		ADDC	R4,#0
		OR	R3,#0C000H
		SUB	R2,#1
		JMPR	cc_NN,RepClearFar
		JMPR	cc_UC,RepeatClear

ClearNear:
$IF (WATCHDOG = 1)
		SRVWDT				; SERVICE WATCHDOG
$ENDIF
		MOVB	[R4],RL5
		ADD	R4,#1
		SUB	R2,#1
		JMPR	cc_NN,ClearNear
		JMPR	cc_UC,RepeatClear
$ENDIF

EndClear:

$ENDIF

;------------------------------------------------------------------------------
;
;  The following code is necessary, if the application program contains
;  initialized variables at file level.
;

$IF (INIT_VARS = 1)

		EXTRN	?C_INITSECSTART : WORD
Init_Vars:
$IF TINY
		MOV	R8,#?C_INITSECSTART
RepeatInit:	
$IF (WATCHDOG = 1)
		SRVWDT				; SERVICE WATCHDOG
$ENDIF
		MOV	R2,[R8+]
		JMPR	cc_Z,EndInit
		JBC	R2.15,InitBit
		MOV	R4,R2
		AND	R2,#3FFFH
		JMPR	cc_NZ,LenLoad
		MOV	R4,#0
		MOV	R2,[R8+]
LenLoad:	MOV	R3,[R8+]
CopyInitVal:	MOVB	[R3],[R8+]
$IF (WATCHDOG = 1)
		SRVWDT				; SERVICE WATCHDOG
$ENDIF
		ADD	R3,#1
		SUB	R2,#1
		JMPR	cc_NZ,CopyInitVal
		JNB	R8.0,RepeatInit
		ADD	R8,#1
		JMPR	cc_UC,RepeatInit

InitBit:	MOVBZ	R3,RL2
		SHL	R3,#1
		OR 	R3,#0FD00H		; START OF BIT SPACE
		MOV	R4,#1
		MOVB	RL5,RH2
		SHL	R4,R5			; CALCULATE BIT MASK
		JB	R2.7,SetBit
		CPL	R4			; CLEAR BIT
		AND	R4,[R3]
		JMPR	cc_UC,StoreBit
SetBit:		OR	R4,[R3]			; SET BIT
StoreBit:	MOV	[R3],R4
		JMPR	cc_UC,RepeatInit

EndInit:

$ELSE
		MOV	R9,#SEG (?C_INITSECSTART)
		MOV	R8,#SOF (?C_INITSECSTART)
RepeatInit:	
$IF (WATCHDOG = 1)
		SRVWDT				; SERVICE WATCHDOG
$ENDIF
		MOV	DPP3,#3
		EXTS	R9,#1
		MOV	R2,[R8]
		JMPR	cc_Z,EndInit
		ADD	R8,#2
		ADDC	R9,#0
		JBC	R2.15,InitBit
		MOV	R4,R2
		AND	R2,#3FFFH
		JMPR	cc_NZ,LenLoad
		MOV	R4,#0
		EXTS	R9,#1
		MOV	R2,[R8]
		ADD	R8,#2
		ADDC	R9,#0
LenLoad:	EXTS	R9,#1
		MOV	R3,[R8]
		ADD	R8,#2
		ADDC	R9,#0
		JB	R4.14,CopyInitVal
		MOV	DPP3,R3
		EXTS	R9,#1
		MOV	R3,[R8]
		ADD	R8,#2
		ADDC	R9,#0
CopyInitVal:	EXTS	R9,#1
		MOVB	RL5,[R8]
		ADD	R8,#1
		ADDC	R9,#0
		MOVB	[R3],RL5
		ADD	R3,#1
		JB	R4.14,NoDPP3Adj
		JB	R3.14,NoDPP3Adj
		ADD	DPP3,#1
		OR	R3,#0C000H		; SET DPP3 Bits 
NoDPP3Adj:	
$IF (WATCHDOG = 1)
		SRVWDT				; SERVICE WATCHDOG
$ENDIF
		SUB	R2,#1
		JMPR	cc_NZ,CopyInitVal
		JNB	R8.0,RepeatInit
		ADD	R8,#1
		JMPR	cc_UC,RepeatInit

InitBit:	MOVBZ	R3,RL2
		SHL	R3,#1
		OR 	R3,#0FD00H		; START OF BIT SPACE
		MOV	R4,#1
		MOVB	RL5,RH2
		SHL	R4,R5			; CALCULATE BIT MASK
		JB	R2.7,SetBit
		CPL	R4			; CLEAR BIT
		AND	R4,[R3]
		JMPR	cc_UC,StoreBit
SetBit:		OR	R4,[R3]			; SET BIT
StoreBit:	MOV	[R3],R4
		JMPR	cc_UC,RepeatInit

EndInit:

$ENDIF

$ENDIF

;------------------------------------------------------------------------------

$IF TINY
		JMP	main
$ELSE
		JMP	FAR main
$ENDIF

?C_RESET	ENDP
?C_STARTUP_CODE	ENDS

$IF (INIT_VARS = 1)
EXTERN	?C_ENDINIT:WORD
$ENDIF

		END

⌨️ 快捷键说明

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