2023年12月14日发(作者:采用t来表示)
BCD码 (二 ─ 十进制码)
在一些数字系统中,如电子计算机和数字式仪器中,往往采用二进制码表达十进制数。通常,把用一组四位二进制码来表达一位十进制数的编码方法称作二─十进制码,亦称BCD码(Binary Code Decimal)。
4位二进制码共有16种组合,可从中任取10种组合来表达0~9这10个数。根据不同的选取方法,可以编制出很多种BCD码,如8421码,5421码,2421码,5211码和余3码。表B1101列出了这几种BCD码,其中的8421 BCD码最为常用。
由于每一组4位二进制码只代表一位十进制数,因而n位十进制数就得用n组4位二进制码表达。
【例1110】把十进制数369.74编成8421 BCD码。
解: 3 6 9 7 4
↓ ↓ ↓ ↓ ↓
0011 0110 1001 0111 0100
∴(369.74)10=(0011 0110 1001. 0111 0100)BCD
表B1101 常用BCD编码表
编码类型
8421码
十进制数
0
1
2
3
4
5
6
7
8
9
权
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
8421
0000
0001
0010
0011
0100
1000
1001
1010
1011
1100
5421
0000
0001
0010
0011
0100
0101
0110
0111
1110
1111
2421
0000
0001
0100
0101
0111
1000
1001
1100
1101
1111
5211
0000
0100
0101
0110
0111
1000
1001
1010
1011
1100
5421码 2421码 5211码 余3码
BCD码转化
结识BCD编码
BCD编码是一种数字压缩存储编码,大家都知道一个字节有8个位,而数字0到9最多只需要使用4个位,假如用一个字节来存储一个数字相对就会有一定的浪费,特别是在传输过程中,由此人们就想出了压缩的办法,于是BCD编码就产生了。
BCD编码将一个字节的8个位拆提成高4位和低4位两个部分,也就是说一个字节能存储两个数字。所以BCD的编码过程就是将数字压缩的过程,将两个字节的数字压缩成一个字节。反之,解码就是把一个字节的数字拆分为两个数字单独存放(大部分的解决都是按字节解决的)。
示例:
编码过程,将数字69进行BCD编码(注:BCD编码低位在前,后面将不再注释)。
1. 将6,9分别转换成二进制表达:6(00000110)9(00001001),大家可以看到,最大的数字9也只要4个位,在传输过程中白白浪费了4个位;
2.将69合并为一个字节,分别取6,9二进制编码的低4位,按照低位在前的原则,将9的低四位放前面6的低四位放后面得出新的字节二进制编码是10010110;
3.完毕编码过程,69的BCD编码结果为10010110。
解码过程:将69的BCD码10010110进行解码。
1.将10010110的高4位与低4位拆分开,得到两个二进制数1001和0110;
2.分别将1001和0110的前面补充4位0000得到两个8位的二进制数00001001,00000110; 3.由于编码时低位在前,所以我们将两个二进制数编排顺序为00000110 ;
4.将二进制数转换为十进制得出解码结果为69(对的解码)。
PB中如何对BCD码进行解码
大家知道在PB中有二进制类型的变量blob,但要无法按位操作,那么我们如何进行BCD编码的数字进行解码呢?
我想大家都会不约而同的想到ASCII码,没错,就是她。ASCII就是数字和字符在计算机中存储的的值,她在PB中给我们呈现的并不是01组成的二进制数而是十进制数值。
BCD解码需要将一个字节的高4位和低4位进行拆分,那么我们怎么来使用十进制的ASCII编码做到呢?
由于PB不提供位运算所以我们只能自己写函数来做些简朴的解决了,那又如何解决呢?
方法一:我们写函数将十进制的ASCII(单字节)转化为二进制的字符串,当然,如此一来你还要写一个将二进制字符串转换为10进制数字的函数,有爱好的朋友可以尝试一下。
方法二:在我上次写的内容中已经提到了,就是借助十六进制来完毕转换。大家仔细研究不难发现十六进制表达等同于将一个字节的内容高4位和低4位分别转换为十进制,假如不信你可以自己验算一下。这样我们就只需要写一个转换函数了,将十进制数转换为十六进制字符串。转换后将十六串的两个字符位置对换(由于编码的时候低位在前),然后直接将这个串强制转换为数值型就得到了解码后的数值。(注:后面有一转换函数是网上一网友所写)
有了解码方法我们在读BCD码的地磅数据的时候就很容易解决了,由于我上次写过解决过程这里我只简朴描述一下:
1.用二进制类型blob将串口(现在有的用usb口)的数据读出来;
2.将blob强制转换为string,这样就把二进制流按8位存储格式编码了,也就是说BCD码在这个string中,但是是压缩格式; 3.将string的每个字节都分割开来,然后分别译为ASCII编码,PB中有函数ASC;
4.根据具体设备出厂参数辨认string中状态位,校验位,数字位等的位置;
5.找到数字位进行BCD解码,方法如上;
6.完毕解码,得到称量数据。
本文发布于:2023-12-14 11:43:06,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/1702525386246189.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:BCD码进制转进制表格工具说明.doc
本文 PDF 下载地址:BCD码进制转进制表格工具说明.pdf
留言与评论(共有 0 条评论) |