单片机16位二进制转换成BCD码程序理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单片机16位二进制转换成BCD码程序理解相关的知识,希望对你有一定的参考价值。

用的程序是经典法,里面有DA 那个程序,比如16位数是:0000 0000 0000 0001,前面15次循环 使得二进制数变成1000 000 0000 0000第十六次循环时候,前面几步把1移入CY中,但是后面
MOV A, R4
ADDC A, R4
DAA
MOV R4, A
MOV A, R3
ADDC A, R3
DAA
MOV R3, A
MOV A, R2
ADDC A, R2
DAA
MOV R2, A
DJNZ R5, LOOP

这三个小程序段看不懂,谁可以讲解一下各寄存器具体的数字变化吗?还有CY的变化。【因为如果按照我理解的话,那不是每次都会加CY吗?那不是不正确了?】
讲解详细的话可以追加悬赏。

在前面,是用 RLC 指令,把二进制数字,逐位移动到 Cy。

楼主给出的这三个小程序,也是把左移,只是用的带进位的加法指令。

MOV A, R4
ADDC A, R4 ;二倍的 R4,就是左移一位,并且把 Cy 填入最低位。
DAA ;这就成为 BCD 码了。

依此类推,R5、R6,都用带进位加,进行左移,并且变成 BCD。

左移 16 遍,就把 16 位二进制,变成了 BCD。

更多的位数,可以使用同样的处理方法,变成 BCD。追问

比如第十六次,R4里面是0000 0000 那ADDC A,R4 是0000 0001,那这个时候,CY会变成0吗?他自己会清零的吗?

追答

ADDC A,R4 ,会把 Cy 加入到低位。同时也会产生出新的 Cy。
新 Cy,不论是 1 是 0,都将移入 R5 的低位。同时也会产生出新新的 Cy。

新新的 Cy,将移入 R6 的低位。

楼主给出的这三个小程序,也是左移一位,只是用的带进位的加法指令。
并且使用了 DAA,那么移动的结果,就是 BCD。

参考技术A 能把程序完整的写出来吗 参考技术B RLC是带进位循环移位指令,注意,是循环移位——即不丢原数据的位。CY也就是进位位,在移位过程中,仅用作临时存储器——也就是中转站——左高位移动到右低位的中介。
当完成一个周期的循环左移操作后,若中间没有作任何操作,则数据将还原为原来的样子,也就是流水灯的原理。 前提是,在执行整个操作前,CY必须清零,否则,CY中的1(若已有进位)在操作过程中会参与运算(ADDC及DA操作),从而导致错误的结果。

十进制码62对应的8421bcd码是多少

二进制编码的十进制数,简称bcd码(binarycoded
decimal).
这种方法是用4位二进制码的组合代表十进制数的0到9
十个数符。4位二进制数码有16种组合,原则上可任选其中的10种作为代码,分别代表十进制中的0到9
这十个数符。最常用的bcd码称为8421bcd码,8.4.2.1
分别是4位二进数的位取值。因此,38,需要拆开来看3=0011,8=1000因此,38的二进制数码是
0011
1000
望采纳!!!!
参考技术A 答案:01100010
转换方法如下:0=0000
  1=0001
  2=0010
  3=0011
  4=0100
  5=0101
6=0110
  7=0111
  8=1000
  9=1001
举个例子,
十进制19对应的8421码就是把1对应的0001,9对应的1001代入组合就可以,也就是00011001。但是要注意,8421码是有范围的,最大可表示十进制15,也就是对应的1111。希望可以帮到题主。

以上是关于单片机16位二进制转换成BCD码程序理解的主要内容,如果未能解决你的问题,请参考以下文章

16位二进制数怎么转换为BCD码

二进制数转换为BCD码的方法都有哪些?

二进制怎样转换成8421BCD码?

BCD码转换成ASCII值

8421bcd码1111011转换成十进制

十进制数如何换算成8421BCD码