分享

二进制 转换成十进制 BCD码(加3移位法)

 昵称5169677 2011-02-23

二进制 转换成十进制 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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多