📄 shuzi.asm
字号:
CLR EX1
RET
DUSHU:MOVX A,@DPTR
MOV @R0,A
INC R0
DJNZ R7,NT0
SETB 06H
NT0:
RETI
;;;将片内RAM30H-42H中的数据按从小到大的顺序排序
QUE:CLR 00H
MOV R3,#18 ;;;;18个数据循环次数
MOV R0,#30H
MOV A,@R0
L2:INC R0
MOV R2,A
SUBB A,@R0
MOV A,R2
JC L1
SETB 00H
XCH A,@R0
DEC R0
XCH A,@R0
INC R0
L1:MOV A,@R0
DJNZ R3,L2
JB 00H,QUE
RET
JIAO:MOV R0,#31H
MOV R7,#16
MOV 45H,#00H
MOV 46H,#00H
KP1: MOV A,@R0
ADD A,46H
MOV 46H,A
MOV A,#00H
ADDC A,45H
MOV 45H,A
INC R0
DJNZ R7,KP1
RET
PINJUN: ;LCALL QUE
LCALL JIAO
MOV R3,#00H
MOV R4,45H
MOV R5,46H
MOV R7,#10H
LCALL DV31 ;OV=0 时,双字节商在R4、R5中,OV=1 时溢出。
RET
;(21)标号: BH2 功能:双字节BCD码整数转换成双字节十六进制整数
;入口条件:待转换的双字节BCD码整数在R2、R3中。
;出口信息:转换后的双字节十六进制整数仍在R2、R3中。
;影响资源:PSW、A、B、R2、R3、R4 堆栈需求: 4字节
BH2: MOV A,R3 ;;将低字节转换成十六进制
LCALL BCDH
MOV R3,A
MOV A,R2 ;;将高字节转换成十六进制
LCALL BCDH
MOV B,#100 ;;扩大一百倍
MUL AB
ADD A,R3 ;;和低字节按十六进制相加
MOV R3,A
CLR A
ADDC A,B
MOV R2,A
RET
; (20)标号:BCDH 功能:单字节BCD码整数转换成单字节十六进制整数
;入口条件:待转换的单字节BCD码整数在累加器A中。
;出口信息:转换后的单字节十六进制整数仍在累加器A中。
;影响资源:PSW、A、B、R4 堆栈需求: 2字节
BCDH: MOV B,#10H ;;分离十位和个位
DIV AB
MOV R4,B ;;暂存个位
MOV B,#10 ;;将十位转换成十六进制
MUL AB
ADD A,R4 ;;按十六进制加上个位
RET
; ; (9) 标号: DV31 功能:三字节二进制无符号数除以单字节二进制数
;入口条件:被除数在R3、R4、R5中,除数在R7中。
;出口信息:OV=0 时,双字节商在R4、R5中,OV=1 时溢出。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
DV31: CLR C
MOV A,R3
SUBB A,R7
JC DV30
SETB OV ;;商溢出
RET
DV30: MOV R2,#10H ;;求R3R4R5/R7-→R4R5
DM23: CLR C
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
MOV F0,C
CLR C
SUBB A,R7
ANL C,/F0
JC DM24
MOV R3,A
INC R5
DM24: DJNZ R2,DM23
MOV A,R3 ;;四舍五入
ADD A,R3
JC DM25
SUBB A,R7
JC DM26
DM25: INC R5
MOV A,R5
JNZ DM26
INC R4
DM26: CLR OV
RET ;;商在R4R5中
;(5) 标号: MULD 功能:双字节二进制无符号数乘法
;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
;出口信息:乘积在R2、R3、R4、R5中。
;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
MULD: MOV A,R3 ;;计算R3乘R7
MOV B,R7
MUL AB
MOV R4,B ;;暂存部分积
MOV R5,A
MOV A,R3 ;;计算R3乘R6
MOV B,R6
MUL AB
ADD A,R4 ;;;累加部分积
MOV R4,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R2 ;;计算R2乘R7
MOV B,R7
MUL AB
ADD A,R4 ;;累加部分积
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2 ;;计算R2乘R6
MOV B,R6
MUL AB
ADD A,R3 ;;累加部分积
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
RET
; (7) 标号: DIVD 功能:双字节二进制无符号数除法
;入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。
;出口信息:OV=0 时,双字节商在R2、R3中,OV=1 时溢出。
;影响资源:PSW、A、B、R1~R7 堆栈需求: 2字节
DIVD: CLR C ;;比较被除数和除数
MOV A,R3
SUBB A,R7
MOV A,R2
SUBB A,R6
JC DVD1
SETB OV ; ;溢出
RET
DVD1: MOV B,#10H ;;计算双字节商
DVD2: CLR C ;;部分商和余数同时左移一位
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
XCH A,R2
RLC A
XCH A,R2
MOV F0,C ;;保存溢出位
CLR C
SUBB A,R7 ;;计算(R2R3-R6R7)
MOV R1,A
MOV A,R2
SUBB A,R6
ANL C,/F0 ;;结果判断
JC DVD3
MOV R2,A ;;够减,存放新的余数
MOV A,R1
MOV R3,A
INC R5 ;;商的低位置一
DVD3: DJNZ B,DVD2 ;;计算完十六位商(R4R5)
MOV A,R4 ; ;将商移到R2R3中
MOV R2,A
MOV A,R5
MOV R3,A
CLR OV ;;设立成功标志
RET
;;;入口条件:待转换的双字节十六进制整数在R6、R7中。
;;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
;;影响资源:PSW、A、R2~R7 堆栈需求: 2字节
HB2:CLR A ;;;BCD码初始化
MOV R3,A
MOV R4,A
MOV R5,A
MOV R2,#10H ;;;转换双字节十六进制整数
HB3:MOV A,R7 ;;;从高端移出待转换数的一位到CY中
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R5 ;;;BCD码带进位自身相加,相当于乘2
ADDC A,R5
DA A ;;;十进制调整
MOV R5,A
MOV A,R4
ADDC A,R4
DA A
MOV R4,A
MOV A,R3
ADDC A,R3
MOV R3,A ;;;双字节十六进制数的万位数不超过6,不用调整
DJNZ R2,HB3 ;; ;处理完16bit
RET
SEACH:MOV DPTR,#A8279_1
MOVX A,@DPTR
ANL A,#07H
JZ RETUN4
LJMP KEY
RETUN4:RET
TRANS:MOV R0,#52H
MOV R1,53H
MOV R6,#03H
LAST:MOV A,@R0
ANL A,#0FH
MOV @R1,A
MOV A,@R0
ANL A,#0F0H
SWAP A
INC R1
MOV @R1,A
INC R1
DEC R0
DJNZ R6,LAST
RET
LED:MOV DPTR,#A8279_1
MOV A,#90H
MOVX @DPTR,A
MOV R0,#54H
MOV R7,#08H
MOV DPTR,#A8279_2
LOOP2: MOV A,@R0
MOVX @DPTR,A
INC R0
DJNZ R7,LOOP2
RET
LED_1:MOV R0,53H
MOV R7,#06H
MOV DPTR,#TAB
LOOP1:MOV A,@R0
MOVC A,@A+DPTR
MOV @R0,A
INC R0
DJNZ R7,LOOP1
RET
TAB:DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH,77H,7CH
DB 39H,5EH,79H,71H
;***********三角函数值表*************************
TAB1: DB 99H,99H,98H,97H,95H,92H,89H,85H
DB 80H,75H,69H,63H,56H,48H,40H,31H
DB 21H,11H,00H,89H,77H,64H,51H,37H
DB 23H,08H,92H,76H,59H,42H,24H,05H
DB 86H,67H,46H,25H,03H,81H,58H,35H
DB 11H,86H,61H,35H,09H,82H,54H,26H
DB 98H,69H,39H,08H,78H,46H,14H,81H
DB 48H,15H,80H,45H,10H,74H,38H,01H
DB 63H,25H,86H,47H,07H,67H,26H,85H
DB 43H,01H,58H,15H,71H,26H,81H,36H
DB 90H,44H,97H,49H,02H,53H,04H,55H
DB 05H,55H,04H,53H,01H,49H,96H,43H
DB 90H,36H,81H,26H,71H,15H,59H,03H
DB 45H,88H,30H,72H,13H,54H,94H,35H
DB 74H,14H,52H,91H,29H,67H,04H,41H
DB 78H,14H,50H,86H,21H,56H,90H,24H
DB 58H,92H,25H,58H,90H,23H,55H,86H
DB 18H,49H,79H,10H,40H,70H,99H,29H
DB 58H,87H,15H,43H,71H,99H,27H,54H
DB 81H,08H,35H,61H,87H,13H,39H,65H
DB 90H,15H,40H,65H,90H,14H,39H,63H
DB 87H,11H,34H,58H,81H,05H,28H,51H
DB 74H,97H,19H,42H,64H,87H,09H,31H
DB 53H,75H,97H,19H,41H,63H,85H,06H
DB 28H,50H,71H,93H,14H,36H,57H,79H
DB 00H
DW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
TAB2: DB 99H,99H,99H,99H,99H,99H,99H,99H
DB 99H,99H,99H,99H,99H,99H,99H,99H
DB 99H,99H,99H,98H,98H,98H,98H,98H
DB 98H,98H,97H,97H,97H,97H,97H,97H
DB 96H,96H,96H,96H,96H,95H,95H,95H
DB 95H,94H,94H,94H,94H,93H,93H,93H
DB 92H,92H,92H,92H,91H,91H,91H,90H
DB 90H,90H,89H,89H,89H,88H,88H,88H
DB 87H,87H,86H,86H,86H,85H,85H,84H
DB 84H,84H,83H,83H,82H,82H,81H,81H
DB 80H,80H,79H,79H,79H,78H,78H,77H
DB 77H,76H,76H,75H,75H,74H,73H,73H
DB 72H,72H,71H,71H,70H,70H,69H,69H
DB 68H,67H,67H,66H,66H,65H,64H,64H
DB 63H,63H,62H,61H,61H,60H,60H,59H
DB 58H,58H,57H,56H,56H,55H,54H,54H
DB 53H,52H,52H,51H,50H,50H,49H,48H
DB 48H,47H,46H,46H,45H,44H,43H,43H
DB 42H,41H,41H,40H,39H,38H,38H,37H
DB 36H,36H,35H,34H,33H,33H,32H,31H
DB 30H,30H,29H,28H,27H,27H,26H,25H
DB 24H,24H,23H,22H,21H,21H,20H,19H
DB 18H,17H,17H,16H,15H,14H,14H,13H
DB 12H,11H,10H,10H,09H,08H,07H,07H
DB 06H,05H,04H,03H,03H,02H,01H,00H
DB 00H
DW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
; **********THE PROGRAMME END**********
END
END
LED:MOV DPTR,#A8279_1
MOV A,#90H
MOVX @DPTR,A
MOV R1,#54H
MOV R7,#06H
MOV DPTR,#A8279_2
LOOP:MOV A,@R1
ADD A,#05H
MOVC A,@A+PC
MOVX @DPTR,A
INC R1
DJNZ R7,LOOP
RET
DB 3FH,06H,5BH,4FH,66H,6DH
DB 7DH,07H,7FH,6FH,77H,7CH
DB 39H,5EH,79H,71H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -