51单片机汇编2进制转BCD码,程序有疑问

以下是我再网上找到的转换程序,下面注释处,乘2加b后经十进制调整转,R2,R2,R4不是上面已经清0了,怎么运算A都是0,我程序调试也是这个结果,我哪里出错了,还是网上人云亦云,根本大家都没试过就在发表高论,请高手帮忙点评下
;设R6、R7中存放16位二进制数,要求转换结果存入R2、R3、R4中。
ORG 00H
BCDT: MOV R5,#16 ;设置计数值
CLR A
MOV R2,A ;存放结果寄存器清零
MOV R3,A
MOV R4,A
MOV R6,#13
MOV R7,#34
LOOP: CLR C

MOV A,R7 ;取被转换二进制数乘二
RLC A
MOV R7,A

MOV A,R6
RLC A
MOV R6,A

MOV A,R4 ;乘2加b后经十进制调整转
ADDC A,R4 ;换成BCD码存入R2R3R4
DA A
MOV R4,A

MOV A,R3
ADDC A,R3
DA A
MOV R3,A

MOV A,R2
ADDC A,R2
DA A
MOV R2,A

DJNZ R5,LOOP
RET
END

这段程序是正确的,我已经验证过了
R6=13=0x0d,R7=34=0x22,所以在R6R7中保存的是0x0d22,转换成10进制就是3362,而程序结束时,R2R3R4中保存的就是0x003362。
总的思路就是R6R7中16进制数左移,将最高位推入R2R3R4的最低位,然后将R4进行DA,如果超过了99就会有进位,将R3自加倍再加进位后DA,依此类推。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-01-06
程序有点乱。

51单片机汇编2进制转BCD码,程序有疑问
这段程序是正确的,我已经验证过了 R6=13=0x0d,R7=34=0x22,所以在R6R7中保存的是0x0d22,转换成10进制就是3362,而程序结束时,R2R3R4中保存的就是0x003362。总的思路就是R6R7中16进制数左移,将最高位推入R2R3R4的最低位,然后将R4进行DA,如果超过了99就会有进位,将R3自加倍再加进位...

单片机实验 二进制到BCD转换
因不太清楚这是哪个单片机和它所对应的具体汇编语法,但是基本的思路是:提取出a中这个三位数,具体方法:用取余的方法,即把a中的数先除以#100得到百位上的系数(也即百位所对的BCD码),然后存到以Result为地址的三个存储单元中的一个。再把a中的数先除以#10得到十位上的系数和余数(也分别为十...

关于单片机编写程序 将A中的二进制数变换成3为BCD码 并将百,十,个位数...
这程序也写的太复杂了!既然51单片机有DIV指令,并且只是把A中的数字转变为BCD,那就用DIV直接运算:MOV A,#0FDH MOV B,#100 DIV AB MOV 50H,A MOV A,B MOB B,#10 DIV AB MOV 51H,A MOV 52H,B 计算完成,这样50H就是百位数,51H是十位数,52H是个位数 ...

51单片机中如何将2字节16位数转换为BCD码,汇编程序最好
HB2: CLR A ;BCD码初始化 MOV R3,A MOV R4,A MOV R5,A MOV R2,#10H ;转换双字节十六进制整数 HB3: MOV A,R7 ;从高端移出待转换数的一位到CY中 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R5 ;BCD码带进位自身相加,相当于乘2 ADDC A,R5 DA A ;十进制调整 MOV...

51单片机求助
不能写成0x0C,而要写成0x12,当然,10以下的就体现不出来什么,因为十进制和十六进制对于10以下的数表示方法一样。程序上的转换就是把十进制数(两位数)除以10得到的值左移4位,然后和这个数除以10的余数相或,得到的就是它的BCD码。自己体会下,其实很简单,祝成功~...

51单片机二进制数转换成十进制数一段精典小程序,谁来帮我分析一下,再...
不推荐把这个程序弄懂,它只是一个转换程序,知道怎么用就行了,而且在汇编中才用。想花时间看懂的话,注意看明白 RLC A,这句语言还影响了标志C位,C位带到了下面的ADDC进位了计算。以1101为例转化为BCD值,RLC A 是把16位2进制向高端移出一位,举例的数为0000000000001101前位全为0不管它,我们从...

二进制与BCD码的转换
比如,现在要执行12D+39D也就是两个十进制数相加这样一个加法(有时候程序处理的需要,数据在单片机中是以BCD码的形式存储的,也就是12H和39H(十六进制),但我们可以人为将它们看为12D和39D(十进制),而且还希望相加以后的结果为51H,也就是说符合十进制运算规则12+39=51,而不是4BH的结果),...

单片机编程将累加器A中的二进制数变成BCD码,并将百、十、个位数分别写入...
div ab mov 50h,a mov a,b da a mov 52h,a anl 52h,#0fh swap a anl a,#0fh mov 51h,a end 我只说说方法吧,先mov R0,a;把原数暂存于R0中 and a,#0fh;mov R1,a;低四位保存至R1 mov a,R0;and a,#0f0h;swap a;交换高四位与低四位 此时再把a中的数乘以10再加上R1中保存...

将二进制变为BCD十进制码,用汇编语言,有哪些算法?求教!!!
除以 10,取其余数。

51单片机如何将二进制小数转换为十进制
如果不想查表,还有个方法,小数=hex\/16,那么先放大,然后移位小数点。小数*10000 = hex*10000\/16 = hex*625,得到一个双字节整数,再转为BCD,即为小数部分,注意此时是【4】位小数。这个方法适用于任意小数的整型计算,只需要注意计算过程的中间结果不要溢出就行了 ...

相似回答