;*************************************************************;
;功能:2进制数转换为BCD数
;用法:R0输入数据首地址,R1输出数据尾地址,R2字节数,B存放余数
;*************************************************************;
BTD_R0_R1_R2:
;存储输入的参数
mov 20h,r0
mov 21h,r1
mov a,r2
rl a
mov 22h,a
mov r0,20h
mov r1,#30h
mov a,22h
rr a
mov r2,a
acall SPLIT_R0_R1_R2
mov 23h,21h
mov 24h,22h
BTD012lp1:
mov r0,#30h
mov r1,#30h
mov r2,22h
acall MDIV_R0_R1_R2
mov a,b
; jz BTD012ret
mov r0,23h
inc 23h
mov @r0,a
djnz 24h,BTD012lp1
BTD012ret:
ret
;*************************************************************;
;功能:16进制数整除,输入数据为连续的占用1个字节的一位16进制数
;用法:R0输入数据首地址,R1输出数据首地址,R2字节数,B存放余数
;*************************************************************;
MDIV_R0_R1_R2:
clr a
MRRRlp1:
add a,@r0
mov b,#10
div ab
mov @r1,a
mov a,b
swap a
inc r0
inc r1
djnz r2,MRRRlp1
ret
;*************************************************************;
;功能:将数据按4位2进制一组拆分
;用法:R0输入数据首地址,R1输出数据首地址,R2输入数据的字节数
;*************************************************************;
SPLIT_R0_R1_R2:
BDlp1: mov a,@r0
anl a,#0f0H
swap a
mov @r1,a
mov a,@r0
anl a,#0fH
inc r1
mov @r1,a
inc r0
inc r1
djnz r2,BDlp1
ret
end
;功能:2进制数转换为BCD数
;用法:R0输入数据首地址,R1输出数据尾地址,R2字节数,B存放余数
;*************************************************************;
BTD_R0_R1_R2:
;存储输入的参数
mov 20h,r0
mov 21h,r1
mov a,r2
rl a
mov 22h,a
mov r0,20h
mov r1,#30h
mov a,22h
rr a
mov r2,a
acall SPLIT_R0_R1_R2
mov 23h,21h
mov 24h,22h
BTD012lp1:
mov r0,#30h
mov r1,#30h
mov r2,22h
acall MDIV_R0_R1_R2
mov a,b
; jz BTD012ret
mov r0,23h
inc 23h
mov @r0,a
djnz 24h,BTD012lp1
BTD012ret:
ret
;*************************************************************;
;功能:16进制数整除,输入数据为连续的占用1个字节的一位16进制数
;用法:R0输入数据首地址,R1输出数据首地址,R2字节数,B存放余数
;*************************************************************;
MDIV_R0_R1_R2:
clr a
MRRRlp1:
add a,@r0
mov b,#10
div ab
mov @r1,a
mov a,b
swap a
inc r0
inc r1
djnz r2,MRRRlp1
ret
;*************************************************************;
;功能:将数据按4位2进制一组拆分
;用法:R0输入数据首地址,R1输出数据首地址,R2输入数据的字节数
;*************************************************************;
SPLIT_R0_R1_R2:
BDlp1: mov a,@r0
anl a,#0f0H
swap a
mov @r1,a
mov a,@r0
anl a,#0fH
inc r1
mov @r1,a
inc r0
inc r1
djnz r2,BDlp1
ret
end