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

电子常识

2583人已加入

描述

  2位16进制转10进制,用除以10求商跟余数的方法,即可。

  4位16进制数呢?DIV指令只可以对2位16进制数进行除法运算啊,那么下面就为大家来解答。

  例如把TH1 TL1的数值转成十进制, 分别存入R4 R3 R2 R1 R0。

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

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

  ;

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

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

  ;

  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

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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分