二进制转换BCD电路
发布网友
发布时间:2022-05-22 13:39
我来回答
共2个回答
热心网友
时间:2024-03-08 12:30
如果随意对一个累加器a中的二进制数据进行“二进制转十进制”调整是没有任何实际意义的!
da调整的对象是在add或addc之后的结果,而且是以bcd码相加以后才能够调整,否则没有实际意义!
比如,现在要执行12d+39d也就是两个十进制数相加这样一个加法(有时候程序处理的需要,数据在单片机中是以bcd码的形式存储的,也就是12h和39h(十六进制),但我们可以人为将它们看为12d和39d(十进制),而且还希望相加以后的结果为51h,也就是说符合十进制运算规则12+39=51,而不是4bh的结果),但这样的十进制加法运算在单片机中是不能够直接实现的。因为单片机只能够执行二进制加法指令,也就是所有的运算都按照二进制中的规则进行!
于是就出现了da调整指令!
现在12h+39h,将12h放于a中,执行
add
a,#39h指令,则结果为4bh,这不是我们希望的51h的数据形式!!这时执行da
a
指令后,就会将a中的数据调整为51h(具体调整过程和原理你可以详细看书,如果单片机书中讲的不详细,那么微机原理中一定说的非常详细),而我们按照bcd码规则就将其看为51d,符合我们的要求!
也就是说加数和被加数都是bcd码的形式,最大也只可能是99h,也就是我们十进制数中的99,只有这样才会有实际的意义!所以你说的当a=#24h的时候的情况是不会存在的,严格的说是没有意义的!
而且da
a指令只用于十进制bcd码加法指令
add/addc
以后,否则是没有实际意义的!
谢谢!
热心网友
时间:2024-03-08 12:31
使用ISP1016就能实现,非常好的一个PLD器件,我给你个程序,是我作的一个仪器中用的,自己设计的。绝对好用。
MODULE
Seg
B3..B0
PIN;
G,F,E,D,C,B,A
PIN
LSTYPE’COM’;
LED=[G,F,E,D,C,B,A];
BCD=[B3..B0];
TRUTH_TABLE(BCD->LED)
[0,0,0,0]->[0,1,1,1,1,1,1];
[0,0,0,1]->[0,0,0,0,1,1,0];
[0,0,1,0]->[1,0,1,1,0,1,1];
[0,0,1,1]->[1,0,0,1,1,1,1];
[0,1,0,0]->[1,1,0,0,1,1,0];
[0,1,0,1]->[1,1,0,1,1,0,1];
[0,1,1,0]->[1,1,1,1,1,0,1];
[0,1,1,1]->[0,0,0,0,1,1,1];
[1,0,0,0]->[1,1,1,1,1,1,1];
[1,0,0,1]->[1,1,0,1,1,1,1];
[1,0,1,0]->[1,1,1,0,1,1,1];
[1,0,1,1]->[1,1,1,1,1,0,0];
[1,1,0,0]->[0,1,1,1,0,0,1];
[1,1,0,1]->[1,0,1,1,1,1,0];
[1,1,1,0]->[1,1,1,1,0,0,1];
[1,1,1,1]->[1,1,1,0,0,0,1];
END