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

📄 routines.asm

📁 书籍8051入门篇
💻 ASM
字号:
$MOD51
BUFDLY1		DATA		1EH			;另外声明DELAY用变量
BUFDLY2		DATA		1FH
V5000		EQU		5000
BIT_EQU		BIT		20H.0
BIT_LARGE	BIT		20H.1
BIT_SMALL	BIT		20H.2
BIT_ERR		BIT		20H.3
BUF		DATA		30H
BUF1		DATA		31H
BUF2		DATA		32H


;
DELAYA:		MOV		BUFDLY1,#00H		;占3 BYTES
		MOV 		BUFDLY2,#00H
		DJNZ		BUFDLY2,$
		DJNZ		BUFDLY1,DELAYA+3
		RET

CLR_MEM:	MOV		A,#00H
FILL_MEM:	MOV		R0,#7FH			;COUNT=127 BYTES
CLRM:		MOV		@R0,A
		DJNZ		R7,CLRM
		MOV		@R0,A			;(00H)=A
		RET

COMPARE8:
		CLR		BIT_EQU
		CLR		BIT_LARGE
		CLR		BIT_SMALL
		CJNE		A,BUF,NEQU		;A-(BUF)
EQUAL:		SETB		BIT_EQU			;A=(BUF)
		SJMP		CMP_END
NEQU:		JC		SMALL			;CY=1代表A<(BUF)
		SETB		BIT_LARGE
		SJMP		CMP_END
SMALL:		SETB		BIT_SMALL	 
CMP_END:	RET


COMPARE16:
		CLR		BIT_EQU
		CLR		BIT_LARGE
		CLR		BIT_SMALL
		MOV		A,BUF1
		CJNE		A,#HIGH(V5000),NEQU1	;A-13H
		MOV		A,BUF2
		CJNE		A,#LOW(V5000),NEQU1	;A-88H
EQUAL1:		SETB		BIT_EQU			;A=(BUF)
		SJMP		C16_END
NEQU1:		JNC		LARGE		
SMALL1:		SETB		BIT_SMALL	 
		SJMP		C16_END
LARGE:		SETB		BIT_LARGE
C16_END:		RET

BIN2HEX:		ANL		A,#0FH		;只取bit3-bit0
		CJNE		A,#10,BIN2		;A-10
BIN2:		JC		NUM09			;A<10
		SUBB		A,#10			;A=A-10
		ADD		A,#'A'		
		SJMP		BIN2_END
NUM09:		ADD		A,#'0'			;A=A+30H
BIN2_END:
		RET	

BLOCK_MOVE:
		MOV		R7,#4			;移动长度,内定为4 BYTES
BLK_MV:		MOV		A,#00H
		MOVC		A,@A+DPTR
		MOV		@R0,A
		INC		R0
		INC		DPTR
		DJNZ		R7,BLK_MV
		RET

BLOCK_COMP:		
		CLR		BIT_ERR
		MOV		R7,#4			
CMP_NXT:	MOV		A,@R0			;DATA  MEMORY
		MOV		B,A
		MOV		A,#00H
		MOVC		A,@A+DPTR		;PROGRAM MEMORY
		CJNE		A,B,COMP_ERR		;FAIL
		INC		R0
		INC		DPTR
		DJNZ		R7,CMP_NXT
		SJMP		COMP_END
COMP_ERR:
		SETB		BIT_ERR
COMP_END:
		RET

ADD16:			
		MOV		A,@R0
		CLR		C
		ADD		A,@R1
		MOV		@R0,A
		INC		R0
		INC		R1
		MOV		A,@R0
		ADDC		A,@R1			;ADD WITH CARRY
		MOV		@R0,A
		RET

SUB16:		MOV		A,@R0
		CLR		C
		SUBB		A,@R1			;SUBSTRACT WITH CY
		MOV		@R0,A	
		INC		R0
		INC		R1
		MOV		A,@R0
		SUBB		A,@R1			;SUBSTRACT  WITH CARRY
		MOV		@R0,A
		RET

;(23)(22)(21)(20)=(09)(08) x (0B)(0A)
;(27)(26)(25)(24) MUL后临时存放区
;
MUL16:		MOV		20H,#00H		;清除最后结果区,共4 BYTES	
		MOV		21H,#00H
		MOV		22H,#00H
		MOV		23H,#00H
;MUL1
		LCALL		CLEAR_BUF		;清除临时数据存放区
		MOV		A,08H
		MOV		B,0AH
		MUL		AB			;16位 RESULT IN B ,A
		MOV		24H,A
		MOV		25H,B
		LCALL		ADD_4BYTE
;MUL2
		LCALL		CLEAR_BUF
		MOV		A,09H
		MOV		B,0AH
		MUL		AB			;RESULT IN BA
		MOV		25H,A
		MOV		26H,B
		LCALL		ADD_4BYTE
;MUL3
		LCALL		CLEAR_BUF
		MOV		A,08H
		MOV		B,0BH
		MUL		AB			;RESULT IN BA
		MOV		25H,A
		MOV		26H,B
		LCALL		ADD_4BYTE
;MUL4		
		LCALL		CLEAR_BUF
		MOV		A,09H
		MOV		B,0BH
		MUL		AB			;RESULT IN BA
		MOV		26H,A
		MOV		27H,B
		LCALL		ADD_4BYTE		;结果在(23)(22)(21)(20)共32位
		RET
;
CLEAR_BUF:
		MOV		24H,#00H
		MOV		25H,#00H
		MOV		26H,#00H
		MOV		27H,#00H
		RET
;
ADD_4BYTE:
		MOV		R0,#20H
		MOV		R1,#24H
		MOV		R7,#4
		CLR		C
ADD_4N:		MOV		A,@R0
		ADDC		A,@R1
		MOV		@R0,A
		INC		R0
		INC		R1
		DJNZ		R7,ADD_4N
		RET	
		END

⌨️ 快捷键说明

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