51单片机把4位16进制数转成10进制数的方法

来源:互联网 发布:淘宝店新手如何推广 编辑:程序博客网 时间:2024/05/22 02:29

2位16进制转10进制,用除以10求商跟余数的方法,即可。
4位16进制数呢?DIV指令只可以对2位16进制数进行除法运算啊,求高手解答。
例如把TH1 TL1的数值转成十进制, 分别存入R4 R3 R2 R1 R0。
我要的是汇编的方法,C语言还没学到。
悬赏分:30 - 解决时间:2010-2-10 22:47
;------------------------------------------------------------------
最佳答案:两个字节的二进制数转换成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
;------------------------------------------------------------------
提问者对于答案的评价:非常感谢,很热心
原文网址:http://zhidao.baidu.com/question/137307787.html?fr=im2
;------------------------------------------------------------------

0 0