应收账款组合:二进制 转换成十进制 BCD码(加3移位法)
来源:百度文库 编辑:中财网 时间:2024/04/28 01:33:28
二进制 转换成十进制 BCD码(加3移位法)
EMC单片机 2010-07-26 15:52:25 阅读118 评论0 字号:大中小 订阅
"二进制数调整BCD码的方法是将二进制码左移8次,每次移位后都检查低四位LSD+3是否大于7,如是则加3,否则不加,高4位MSD作同样处理"一、为什么左移8次
原寄存器是存二进制数的,新寄存器是存十进制数的,当然要左移8次,把数据全部移进去。
但这里要注意两件事,第一,如果只安排一个字节作十进制寄存器,原数据要小于 64H(即100)。第二,由于新寄存器是十进制的,要随时调整。
二、检查 半字节+3 是否大于 7,是,则 +3
在 51 系列里有十进制调节指令(半字节大于 9,则加 6,应该不难理解),PIC 里没有,只好采取变通的方法。
检查 半字节+3 是否大于 7,也就是检查半字节是否大于 4。因为,如果大于 4(比如 5、6),下一步左移就要溢出了,所以加 3,等于左移后的加 6,起到十进制调节的作用。
那为什么要绕个圈子去检测 半字节+3 是否大于 7 呢?这样程序编起来会简练一些。
一个例子
假如有一个八位二进制数255,我把他转255的十进制数
0 1111 1111 原数
1 0000 0001 ;左移一次
2 0000 0011 ; 左移二次
3 0000 0111 ;左移三次,检查低四位+3>7?
3.1 0000 1010 ;大于7,加3进行调整
4 0001 0101 ;左移四次, 检查低四位+3>7?
4.1 0001 1000 ;大于7,加3进行调整
5 0011 0001 ;左移五次
6 0110 0011 ;左移六次,检查高四位+3>7?
6.1 1001 0011 ;大于7,加3进行调整
7 1 0010 0111 ;左移七次,检查低四位+3>7?
7.1 1 0010 1010 ;大于7,加3进行调整
8 10 0101 0101 ;左移八次(得到BCD码255) 一次反推可以用移位发进行BCD转二进制的算法BCD码右移一位后判断,高四位,和第四位是否大于7,如果大于7则减3,然后再移位,即可转化位所要求的二进制码 1 10 0101 0101 转换为二进制 1.1 10 0101 0101 ;右移一位的 01 0010 1010 二进制数为1000 0000 1.1.1 01 0010 1010 ;判断高四位,低四位是否大于7 1.1.2 低四位大于7 则间3 01 0010 0111 1.2 01 0010 0111 ;右移一位得 00 1001 0011 二进制数位 1100 0000 1.21 判断高,低四位 是否大于7 时则减3 得 00 0110 0011 1.3 00 0110 0011 ;右移一位得 00 0011 0001 二进制数位 1110 0000 1.3.1 判断高低四位 1.4 00 0011 0001;右移一位得 00 0001 1000 二进制数位 1111 0000 1.4.1 判断高低四位 的00 0001 0101 1.5 00 0001 0011 ;右移一位得 00 0000 1010 二进制数位 1111 1000 1.5.1 判断高低四位 的00 0000 0111 1.6 00 0000 0111;右移一位得 00 0000 0011 二进制数位 1111 1100 1.7 00 0000 0011 ;右移一位 00 0000 0001 二进制数位 1111 1110 1.8 00 0000 0001; 右移一位 00 0000 0000 二进制数位 1111 1111