数字电子技术
上QQ阅读APP看书,第一时间看更新

2.3 编码

数制是实现数值数据在数字系统中表示的一种方法。然而,更多的信息数据是非数值的,如文本、字母、操作命令,甚至语音、图像等。因此,对数值和非数值数据多采用二进制编码方式来表示。

2.3.1 数值的编码表示

常见的对数值的二进制编码方法有自然二进制编码、格雷码(Gray码)、二—十进制码(Binary-Coded Decimal,BCD码)等。

1.自然二进制编码

自然二进制编码是一种简单的数值编码方案,十进制数值0~15的4位自然二进制编码如表2-4所示。编码随数值增大具有顺序递增的特点,表2-4中十进制数值0~15的自然二进制编码表明了这一特点。推广到任意一个十进制数值,其N位的自然二进制编码与它的N位二进制数在形式上完全一样。需要注意的是,仅仅在形式上相同,本质上并不相同,编码中高位0不可以省略,这一点显然在二进制数中是不一样的。

2.格雷码

格雷码(Gray Code)又称循环码,是一种在机电、抗干扰通信等方面广泛应用的数值编码,其对十进制数0~15的4位编码如表2-4所示。规律表明:任意两个相邻的码字只有1位不同(相邻性);首尾两个码字同样具有相邻性(循环性)。除此之外,以码字最高位0和1分界处为镜像点,处于镜像对称位置上的码字只有最高位不同,其余各位都相同(反射性也称镜像特性)。相邻性使得格雷码在提高计数器的工作可靠性、提高通信抗干扰能力方面起着重要作用。

表2-4 自然二进制编码与格雷码

图2-2给出了1~3位格雷码的构造过程,构造之法主要基于格雷码的镜像特性。构造具有以下递归特性。

● 采用1位格雷码编码时,有两个码字,即0和1。

●采用n位格雷码编码时,有2n个码字,其中:前2n-1个编码字等于n-1位格雷码的编码字按顺序排列,加前缀0;后2n个编码字等于n位格雷码的编码字按逆序排列,加前缀1。

图2-2 1~3位格雷码构造方法示意图

对比表2-4中4位格雷码的后3位可知,图2-2的编码结果是正确的。

3.二—十进制码

二进制数适合数字系统,而人们习惯于处理十进制数,如何在不改变数字电路基本特性的条件下表示十进制数?这就是二—十进制码BCD码)。

在BCD编码里,将十进制数看作一组0~9的字符串,用4位无符号的二进制数0、1编码表示。例如,(259)10可以看作字符2、5、9依次排列,将各字符分别用二进制码替换,就得到该十进制数的一种编码表示。这种方法简单、直观,避免了十进制数转换为二进制数时烦琐的计算过程。十进制使用字符0~9,将这10个字符编码,至少需要4位二进制码。4位二进制码可以有0000~1111共16种组合,原则上可以从中任取10种进行二—十进制编码,取其中哪10个以及如何与0~9相对应,有许多方案,其中比较常用的BCD码如表2-5所示。

8421码是最常用的BCD码,其编码方法与10个十进制字符等值的二进制数完全相同,是一种有权码,各位的权值由高到低依次为8、4、2、1。有权码有固定的权值,因此也称恒全代码,可以通过按权展开求和的方式求得码字对应的十进制字符。

表2-5 常用BCD码

5421码也是有权码,各位的权值依次为5、4、2、1。编码规则:0~4的编码与8421码相同,高位为0,低三位从000编码至100;5~9的编码高位为1,低三位依然从000编码至100。由此可见,5421码的最高位先为5个连续的0,后为5个连续的1,从而在十进制0~9的计数过程时,最高位对应的输出端可以产生对称方波信号,相关知识详见第5章的计数器部分。

2421码同样是有权码,各位的权值与其名称相同。编码规则:0~4的编码与8421码相同,5~9的编码与0~4的编码之间具有两两互为反码的特点,如0和9、1和8、2和7、3和6、4和5,因此,2421码为自反码。此外,2421码最高位也有5421码的特点。

余3码是无权码,其每一个码字都等于对应的8421码加(0011)2,因而称为余3码。此外,余3码和2421码一样,也是自反码。

余3循环码也是无权码,其码字取自4位格雷码的中间10个码字(去掉开始三个和最后三个码字)。余3循环码具有格雷码的相邻性、循环性和反射性三个特点。

BCD码与对应十进制数的相互转换十分方便只需要按照编码表逐字符转换即可

注意

1)有权码的固定权值必须符合所有编码字。

2)求解固定权值可预设编码字每一位的权值,如b3、b2、b1、b0,然后利用若干个简单编码字求出每位权值,再用剩余的编码字进行验证,都满足时为有权码,否则为无权码。

例2-5 分别用8421码、5421码、2421码、余3码和余3循环码表示十进制数206.94。

(206.94)10=(0010 0000 0110.1001 0100)8421

=(0010 0000 1001.1100 0100)5421

=(0101 0011 1001.1100 0111)余3码

=(0111 0010 1101.1010 0100)余3循环码

注意:BCD码中的每个码字和十进制数中的每个字符是一一对应的,BCD码表示的整数部分高位0和小数部分低位0都不能省略。

BCD码表示法将十进制数值看作一串字符,每个字符各用一组0、1编码来表示,这种表示法本质上是符号编码表示法,用 0、1编码表示不同符号的还有计算机键盘字符的ASCII编码表示法、汉字编码表示法等。

2.3.2 字符的编码表示

上述编码主要用于数值的二进制表示,编码还需要解决符号的二进制表示问题。ASCII(American Standard Codes for Information Interchange)码,即美国信息交换标准码,是一种常用的字符编码,其编码方案如表2-6所示。

表2-6 ASCII码编码表

ASCII码采用7位二进制编码格式,共有128种不同的编码,能够表示十进制字符、英文字母、基本运算字符、控制符和其他符号等。如十进制字符 0~9的7位ASCII码是0110000~0111001,采用十六进制数表示为30h~39h,后缀h表示进制(二进制数用b、十进制数用d、十六进制数用h);大写字母A~Z的ASCII码是41h~5Ah;小写字母a~z的ASCII码是61h~7Ah。编码表中20h~7Fh对应的所有字符都可以在键盘上找到。