|
;-------------------------------------------------------- ;BIN <==> BCD ;--------------------------------------------------------
;******************************** ;二进制数 ==> 十进制BCD码 ;入口: BIN_HI,BIN_LO=二进制数 ;出口: BCD_H,BCD_M,BCD_L=十进制BCD码 ;******************************** BIN16_BCD: MOV A,@16 MOV COUNT,A
CLR BCD_L CLR BCD_M CLR BCD_H ADJNEXT: CALL ADJDEC
RLC BIN_LO RLC BIN_HI RLC BCD_L RLC BCD_M RLC BCD_H
DJZ COUNT JMP ADJNEXT
RET ;================= ADJDEC: MOV A,@BCD_L MOV R4,A CALL ADJBCD
MOV A,@BCD_M MOV R4,A CALL ADJBCD
MOV A,@BCD_H MOV R4,A CALL ADJBCD
RET ;================= ADJBCD: MOV A,@0X03 ADD A,R0 MOV DATA,A JBC DATA,3 MOV R0,A
MOV A,@0X30 ADD A,R0 MOV DATA,A JBC DATA,7 MOV R0,A RET ;=================
;******************************** ;十进制BCD码 ==> 二进制数 ;入口: BCD_H,BCD_M,BCD_L=十进制BCD码 ;出口: BIN_HI,BIN_LO=二进制数 ;******************************** BCD_BIN16: MOV A,@16 MOV COUNT,A
CLR BIN_L0 CLR BIN_HI ADJNEXT: CALL ADJOCT BC R3,C
RRC BCD_H RRC BCD_M RRC BCD_L RRC BIN_HI RRC BIN_LO
DJZ COUNT JMP ADJNEXT
RET ;================= ADJOCT: MOV A,@BCD_L MOV R4,A CALL ADJBCD
MOV A,@BCD_M MOV R4,A CALL ADJBCD
MOV A,@BCD_H MOV R4,A CALL ADJBCD
RET ;================= ADJBCD: MOV A,@0X03 JBC R0,3 SUB R0,A MOV A,@0X30 JBC R0,7 SUB R0,A RET
;================= ;================= ;================= ;=================
|