Hi SphinX
This is my 8051 version to convert 16 bit number to decimal:
; FUNCTION: BIN2BCD
; BYTES: 27
; CYCLES: 327
; INPUT: R6 (Msb) and R7 (Lsb) (binary_16_bits)
; OUTPUT: R3 (Msb), R4 and R5 (Lsb) (PACKET BCD)
; Destroy: R2, R6, R7, A, and PSW
;
; ALGORITM:
;
; BCD = 0;
; COUNT = 16; // (TO PROCESS 16 BITS)
; do {
; BIN16 = BIN16 * 2
; BCD = BCD * 2 + CARRY
; COUNT = COUNT - 1
; } while (COUNT != 0);
;
BIN2BCD:
CLR A ; BCD = 0
MOV R5,A
MOV R4,A
MOV R3,A
MOV R2,#16 ; TO PROCESS 16 BITS
BIN_10:
MOV A,R7 ; BIN16 = BIN16 * 2
ADD A,R7
MOV R7,A
MOV A,R6
ADDC A,R6 ; CARRY = MSB of BIN16
MOV R6,A
MOV A,R5 ; BCD = BCD * 2 + CARRY
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
DA A
MOV R3,A
DJNZ R2,BIN_10
RET
Best regards.