📄 距离计算.asm
字号:
;显示缓冲单元在40H~43H
;使用内存44H、45H、46H用于计算距离
;20H用于标志
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;显示缓冲单元在44H~47H
;使用内存50H、51H、52H用于计算距离
;20H用于标志
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;**************************************************
;* 距离计算程序(=计算值×17/1000cm) 近似 *
;**************************************************
ORG 0000H
JMP MAIN
MAIN:
MOV 51H,#05H
MOV 50H,#9FH
WORK:PUSH ACC
PUSH PSW
PUSH B
MOV PSW, #18H ;RS1=1,RS0=1
MOV R3, 51H
MOV R2, 50H
MOV R1, #00D
MOV R0, #17D ;与17相乘
LCALL MUL2BY2 ;R7R6R5R4<=R3R2*R1R0
MOV R3, #03H
MOV R2, #0E8H
LCALL DIV4BY2 ;R7R6R5R4/R3R2=R7R6R5R4(商)......R1R0(余数)
LCALL DIV4BY2 ;R7R6R5R4/R3R2=R7R6R5R4(商)......R1R0(余数)
MOV 44H, R4
MOV A, 44H
JNZ JJ0 ;A不等于0时,跳转
MOV 44H, #0AH ;最高位为0,不点亮
JJ0: MOV A, R0
MOV R4, A
MOV A, R1
MOV R5, A
MOV R3, #00D
MOV R2, #100D
LCALL DIV4BY2
MOV 45H, R4
MOV A, 45H
JNZ JJ1
MOV A, 44H ;此高位为0,先看最高位是否为不亮
SUBB A, #0AH
JNZ JJ1
MOV 45H, #0AH ;最高位不亮,次高位也不亮
JJ1: MOV A, R0
MOV R4, A
MOV A, R1
MOV R5, A
MOV R3, #00D
MOV R2, #10D
LCALL DIV4BY2
MOV 46H, R4
MOV A, 46H
JNZ JJ2
MOV A, 45H ;次高位为0,先看次高位是否为不亮
SUBB A, #0AH
JNZ JJ2
MOV 46H, #0AH ;次高位不亮,次高位也不亮
JJ2: MOV 47H, R0
POP B
POP PSW
POP ACC
RET
;************************************
;* 两字节无符号数乘法程序 *
;************************************
;R7R6R5R4<=R3R2*R1R0
MUL2BY2: CLR A
MOV R7, A
MOV R6, A
MOV R5, A
MOV R4, A
MOV 52H, #10H
MULLOOP1:CLR C
MOV A, R4
RLC A
MOV R4, A
MOV A, R5
RLC A
MOV R5, A
MOV A, R6
RLC A
MOV R6, A
MOV A, R7
RLC A
MOV R7, A
MOV A, R0
RLC A
MOV R0, A
MOV A, R1
RLC A
MOV R1, A
JNC MULLOOP2
MOV A, R4
ADD A, R2
MOV R4, A
MOV A, R5
ADDC A, R3
MOV R5, A
MOV A, R6
ADDC A, #00H
MOV R6, A
MOV A, R7
ADDC A, #00H
MOV R7, A
MULLOOP2:DJNZ 52H, MULLOOP1
RET
;**************************************
;* 四字节/两字节无符号数除法程序 *
;**************************************
;R7R6R5R4/R3R2=R7R6R5R4(商)......R1R0(余数)
DIV4BY2: MOV 52H, #20H
MOV R0, #00H
MOV R1, #00H
DIVLOOP1:MOV A, R4
RLC A
MOV R4, A
MOV A, R5
RLC A
MOV R5, A
MOV A, R6
RLC A
MOV R6, A
MOV A, R7
RLC A
MOV R7, A
MOV A, R0
RLC A
MOV R0, A
MOV A, R1
RLC A
MOV R1, A
CLR C
MOV A, R0
SUBB A, R2
MOV B, A
MOV A, R1
SUBB A, R3
JC DIVLOOP2
MOV R0, B
MOV R1, A
DIVLOOP2:CPL C
DJNZ 52H, DIVLOOP1
MOV A, R4
RLC A
MOV R4, A
MOV A, R5
RLC A
MOV R5, A
MOV A, R6
RLC A
MOV R6, A
MOV A, R7
RLC A
MOV R7, A
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -