单片机16进制转10进制数

两个字节的二进制数转换成BCD码,必须编写程序来解决。

下面把这段转换程序,写成子程序的结构,便于移植。

程序经过仿真调试通过,如下所示:

;------------------------------------------------------------------

;

     MOV R0, TH1

     MOV R1, TL1

     CALL HEX2BCD      ;调用子程序把R0 R1中的数字,转换成BCD码,送到R2 R3 R4

;-------下面,把万千百十个位,分别存入R4 R3 R2 R1 R0

     MOV A,   R4

     MOV B,   #16

     DIV AB                ;除以16,目的是分离出高、低四位

     MOV R1, A            ;存放十位

     MOV R0, B            ;存放个位

;

     MOV A,   R2

     MOV R4, A            ;存放万位

;

     MOV A,   R3

     MOV B,   #16

     DIV AB

     MOV R3, A

     MOV R2, B

     SJMP $                 ;到此,完成了题目要求

;------------------------------------------------------------------

;两个字节的二进制数转换成BCD码的程序如下:

;功能:16位二进制数变换成为 BCD 码;

;入口:R0 R1 中是 16 位二进制数,其中R0中是高 8 位;

;出口:R2 R3 R4 中是 BCD 码,其中R2中是万位,R3中是千、百位,R4中是十、个位。

HEX2BCD:

     CLR A

     MOV R2, A            ;先清零

     MOV R3, A

     MOV R4, A

     MOV R5, #16          ;共转换十六位数

LOOP:

     CLR C

     MOV A,   R1           ;从待转换数的高端移出一位到Cy

     RLC A

     MOV R1, A

     MOV A,   R0

     RLC A

     MOV R0, A

     MOV A,   R4           ;送到BCD码的低端

     ADDC A,   R4           ;带进位加。自身相加,相当于左移一位

     DA   A                 ;十进制调整,变成BCD码

     MOV R4, A

     MOV A,   R3

     ADDC A,   R3

     DA   A

     MOV R3, A

     MOV A,   R2

     ADDC A,   R2

     MOV R2, A

     DJNZ R5, LOOP         ;共转换十六位数

     RET

;------------------------------------------------------------------