双字节二进制转换为BCD
;-----------------------------------------------------------------------
;确定16位二进制百位) + 3*y (十位) + [b6~b0] - 2*y
;由此,就可以明确由高9位[b15~b7]变换出来十进制的各个位的数值,可能大于9,到最终整理一下即可。
;剩下的低7位[b6~b0],已经是单字节数据,变换成BCD码那就非常简洁了。
;-----------------------------------------------------------------------
从最终的表达式中可以看出,高9位变换的计算方法极为简洁,只是运用左移、加减等指令即可,根本上不涉及多字节的运算。
编程的时候,要充分利用单字节、单周期的指令,使程序的长度和执行时间尽量缩短。 做而论道的编程思路已经给出,程序代码还是过一段时间再公布,给大家留下一个发挥的时间。
感爱好的网友可以留言,写出自己编写的程序。
51单片机把4位16进制数转成10进制数的方法
2位16进制转10进制,用除以10求商跟余数的方法,即可。
4位16进制数呢?DIV指令只可以对2位16进制数进展除法运算啊,求高手解答。 例如把TH1 TL1的数值转成十进制, 分别存入R4 R3 R2 R1 R0。 我要的是汇编的方法,C语言还没学到。 悬赏分:30 - 解决时间:2022-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
双字节二进制转换为BCD 来自淘豆网m.daumloan.com转载请标明出处.