关于单片机编写程序 将A中的二进制数变换成3为BCD码 并将百,十,个位数分别防御内部RAM的50H 51H 52H中

对程序有点不理解希望达人能将程序给讲解下程序如下ORG0MOV52H,#0MOV51H,#0MOV50H,#0(以上是定位和单元清0这里懂些)MOVA,#0FDH(这里就... 对程序有点不理解 希望达人 能将程序给讲解下 程序如下
ORG 0

MOV 52H,#0

MOV 51H,#0

MOV 50H,#0(以上是定位 和单元清0 这里懂些)

MOV A,#0FDH(这里就不知道了 题目没给确切的二进制数 为什么 这里要将

A置为FDH呢)

LCALL DCDTH(跳转DCDTH是吧)

SJMP $

DCDTH:MOV R7,#8(定次数 8次)
MOV R0,A

LOOP: CLR C
MOV A,R0

RLC A

MOV R0,A

MOV R1,#51H

MOV A,@R1
ADDC A,@R1

DA A

MOV @R1,A

DEC R1

MOV A,@R1

ADDC A,@R1

DA A

MOV @R1,A

DJNZ R7,LOOP

INC R1

MOV A,#00H

XCHD A,@R1

MOV 52H,A

MOV A,@R1

SWAP A

MOV @R1,A

RET

END

以上是全部程序 打LOOP 越看越糊涂 望高人讲些 最好详细些 有加分
展开
 我来答
ATF144X
2013-01-19 · TA获得超过1.2万个赞
知道大有可为答主
回答量:5344
采纳率:77%
帮助的人:4587万
展开全部
这程序也写的太复杂了!既然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是个位数
追问
要这么弄 是不是得加句 DA A将0FDH转换为10进制 然后再除100啊 而且 你那个MOV A,B是什么意思 将做完除法的得数4位给A??0FDH 253  除以100后 得2余53 那么AB中应该是 00000010 高四位就是0000 将A置零了?后面有点不通 麻烦解答下
追答
DIV指令执行后,商在A余数在B,这个你需要记住。
0xFD是十进制的253,在执行
MOV B,#100
DIV AB
之后,A=2,B=53,这样就A就是百位的数值了。将A保存,然后把余数53转移到A,再执行
MOV B,#10
DIV AB
这样A=5,B=3,是不是分别得到了十位数和个位数?

DA指令不是你想的那样把16进制转换为10进制的,DA是用来处理BCD码的!
yes__mcu
2013-01-19 · TA获得超过923个赞
知道小有建树答主
回答量:387
采纳率:0%
帮助的人:436万
展开全部
这个运算是通过移位的方式,将一个十六进制的数据做十进制调整,这条指令DJNZ R7,LOOP执行完之后,BCD码的百位在50H,十位和个位在51H。 MOV A,#0FDH,0FDH是待转换的十六进制数据。最终通过这一段指令
INC R1

MOV A,#00H

XCHD A,@R1

MOV 52H,A

MOV A,@R1

SWAP A

MOV @R1,A之后,50H,51H,52H就依次存放的是百十个位了
更多追问追答
追问
那么 0FDH 就是随便举得例子了?也就是说就11111101这个数转换成BCD码吧? 我看了下程序 
经过8次循环 那么 进位CY=1的时候有7次 也就是说 最后51H 50H单元中存的数都是7啊 最后交换 A与51H单元内容的低4位的话 A中是00000111 也就是7 51H中是0 将7存入52H中 在把51H存入A 半字节交换的话 不还是0么 那么 50H 51H 52H中 相继就是 7 0 7 和0FDH 253不符啊?求解答
追答
你算错了,你没算这几句
MOV A,@R1
ADDC A,@R1

DA A

这个运算的实质就是:将十六进制的每一个位提取出来,将这个位转换成十进制,然后再和下一个位相加,原理就是这样的,其实1个字节的HEX转换BCD还有更简单的方法,就是依次除以100,除以10
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式