单片机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吗?那不是不正确了?】
讲解详细的话可以追加悬赏。
楼主给出的这三个小程序,也是把左移,只是用的带进位的加法指令。
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。
当完成一个周期的循环左移操作后,若中间没有作任何操作,则数据将还原为原来的样子,也就是流水灯的原理。 前提是,在执行整个操作前,CY必须清零,否则,CY中的1(若已有进位)在操作过程中会参与运算(ADDC及DA操作),从而导致错误的结果。
十进制码62对应的8421bcd码是多少
二进制编码的十进制数,简称bcd码(binarycodeddecimal).
这种方法是用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码程序理解的主要内容,如果未能解决你的问题,请参考以下文章