找回密码
 注册
关于网站域名变更的通知
查看: 557|回复: 1
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-2-20 09:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
51单片机把4位16进制数转成10进制数的方法7 q9 L& Z' K# r8 ~

" w" |& z3 a$ H4 T+ F% Z, }- ~

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

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


0 I( d% a0 i& H- o; M7 b8 h% f
+ `6 i/ W# ]2 s# Y% {6 U
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-12 22:50 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表