51单片机二进制数转换成十进制数一段精典小程序,谁来帮我分析一下,再下新就是搞不明白为什么!!!!

16位二进制数转换成十进制BCD码,,设R6R7的内容为16进制数,要求转换结果存入R2R3R4程序如下:MOVORG8000HBCDT:MOVR5,#16;设置计数值C... 16位二进制数转换成十进制BCD码,,设R6R7的内容为16进制数,要求转换结果存入R2R3R4
程序如下:MOV
ORG 8000H
BCDT: MOV R5,#16;设置计数值
CLR A
MOV R2,A;存放结果寄存器清0
MOV R3,A
MOV R4,A
LOOP:CLR C
MOV A,R7;取被转换二进制数乘2
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R4;乘2加b后经十进制调整后转换成BCD码存R2R3R4
ADDC A,R4
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
ADDC A,R2
DA A
MOV R2,A
DJNZ R5,LOOP
RET
END

就这个书本上的程序,小弟看不懂为什么,烦请为小弟讲述具体过程,原理,带实例,和图更佳,万谢!
展开
 我来答
hg200300
2012-08-15 · 超过24用户采纳过TA的回答
知道答主
回答量:71
采纳率:0%
帮助的人:57.7万
展开全部
不推荐把这个程序弄懂,它只是一个转换程序,知道怎么用就行了,而且在汇编中才用。
想花时间看懂的话,注意看明白 RLC A,这句语言还影响了标志C位,C位带到了下面的ADDC进位了计算。

以1101为例转化为BCD值,RLC A 是把16位2进制向高端移出一位,举例的数为0000000000001101前位全为0不管它,我们从1101开始。
1101第一位是1,1移动到C位经过ADDC A R4 运算 R4=0x01;
1101第二位是1,1移动到c 位经过ADDC A R4 运算 R4=0x03;
1101第三位是0,0移动到c 位经过ADDC A R4 运算 R4=0x06;
1101第四位是1,1移动到C位经过ADDC A R4 运算 R4=0x13;
1101 “=”13
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式