51单片机如何吧十六进制化为十进制?(好像没有直接的指令去实现)

来源:百度知道 编辑:UC知道 时间:2024/05/16 05:37:23
有这么一段程序,不过我看不懂:

mov a,temp ;将temp中的十六进制数转换成10进制
mov b,#10 ;10进制/10=10进制
div a b
mov b_bit,a ;十位在a
mov a_bit,b ;个位在b

程序中的16进制不用转换,给你举个例子,如果A中的值为FFH,也就是256,实际上程序中除以10,你可以当作是256除以10,跟FFH除以10没有分别,你将除数的商保存在十位,余保存在个位就可以了!!!

你这个程序下面应该还有几句程序,才能完成这个功能
mov a, b_bit
anl a, #0fh
swap a
mov b, a
mov a ,a_bit
anl a ,#0fh
add a, b
mov temp, a ;这时temp里面的数为十进制数
多看两边应该就能理解的。

简单的说把,比如一个十进制数67,除以10等于6,余数是7,所以就把一个十进制数拆成个位数和十位数了,即相当于非压缩的BCD码。你提到的程序就是这个意思,把temp的数字除以10(在B中),得到的商在A,余数在B,而商就是十位数,余数就是个位数。

其实你首先要明白的是,做程序关键是思路,我们用计算机处理事情实际上就是让它模仿我们人的行为,那么在你是如果通过什么方法把十六进制转十进制的,你是如何实现的,然后将你的方法和步骤通过单片机相应的指令来完成这个程序

这实际上就是我们所学的十六进制转换十进制的一种方法。
你可以参考把十进制转换成二进制数,其实是一样的道理。

这个是将一位16进制数转换成10进制数
可类比于将10进制数转化为2进制数用"除2取余"的方法
假设16进制树为B,C/A(即题目中的#10) 商1余2 B(H)=12(D)