📄 routines.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 + -