数字电路与系统设计
上QQ阅读APP看书,第一时间看更新

1.3 码制

用文字、符号或数码来表示各个特定对象的过程称为编码,编码所得的每组符号称为代码或码字,代码中的每个符号称为基本代码或码元。在数字电路中通常用二进制数码构成的代码来表示各有关对象(如十进制数、字符等)。码制是指编码的制式,不同的码制编码时遵循不同的规则。

1.3.1 二进制码

所谓二进制码是指用二进制数码“0”和“1”构成的代码。n位的二进制码可以有2n个代码。

表1.3.1 给出了几种典型的二进制码。

表1.3.1 典型二进制码

1.自然二进制码

自然二进制码是通常用以表示数值的一种二进制码。从编码的角度看,二进制数也是一种表示数的代码,称为自然二进制码。例如,1100既可以说它是数12的二进制数,又可以说它是数12的自然二进制码。不过,虽然一个数的自然二进制码和其二进制数在写法上完全一样,但在概念上是不一样的,前者是码制中的概念,后者是数制中的概念。表1.3.1中给出了4位自然二进制码,代码中每个码元的位权自左至右分别为8、4、2、1,16个代码依次分别用来表示数0~15。

2.格雷码、循环码

在一组数的编码中,若任意两个相邻数的代码中只有一位对应的码元不同,则称这种编码为格雷码(Gray Code)。格雷码的种类很多,循环码是其中的典型。在循环码中,不仅相邻的两个代码只有1位码元不同,而且首尾两个代码也是如此,表1.3.1中给出了4位循环码。使用循环码可以减少电路工作时出错的可能。通常把两个代码中取值不同的码元的位数称为两个代码的间距,把两个相邻代码中只有一位对应码元取值不同的特点称为单位间距特性。格雷码和循环码都具有单位间距特性,因此,它们都是单位间距码。

循环码的各个代码除最左位以外,其他各位均以最左位0和1的水平分界线为轴镜像对称;循环码的最左位,分界线以上均为0,以下均为1。上述特点称为循环码的反射特性。利用反射特性可以由n位循环码方便地写出n+1位循环码。例如,1位、2位、3位、4位循环码如图1.3.1所示。

图1.3.1 1位、2位、3位、4位循环码

3.奇(偶)校验码

奇(偶)校验码示于表1.3.1中。这种码由信息码加一个奇校验位P(奇)或偶校验位P (偶)构成,其中校验位的取值(0或1)将使各个代码(包括信息码和校验位)中“1”的个数为奇数或偶数。若使“1”的个数为奇数,称为奇校验码;为偶数,则称为偶校验码。奇(偶)校验码的用处是通过检测经传输以后的代码中“1”的个数是否为奇数(或是否为偶数),即进行奇校验(或偶校验)来判断信息在传输过程中是否有一位码元出错。

格雷码、循环码、奇(偶)校验码都是一种可靠性编码。奇、偶校验码具有一定的检测错码的能力,是一种误差检验码,但只能检错而不能纠错。使用海明码则可以达到检测并纠正错码的要求。

1.3.2 二-十进制(BCD)码

所谓二-十进制码又称BCD(Binary Coded Decimal)码,是指用二进制数码0和1来表示的十进制数码0,1,2,…,9,或者说是十进制数码0,1,2,…,9的二进制编码。要表示0~9这10个十进制数码,使用的代码至少需要有4位码元。由于4位二进制数可以构成16个不同的代码,因此,构成BCD码的方案可以有多种,不过最常用的也只是其中的几种。BCD码可以分为有权码和无权码两大类,表1.3.2列出了几种最常用的BCD码,其编码规则各不相同。

表1.3.2 几种常用的BCD码

1.有权码

代码中的每一位都有固定权值的代码称为有权码或恒权码。有权码的名称通常用4个码位的位权来命名。表1.3.2中的8421BCD、5421BCD、2421BCD都是有权码。

各种有权BCD码所表示的十进制数D可以由按权展开式求得。例如,8421BCD码b3b2blb0所表示的十进制数码为D= 8b3+4b2+2b1+1b0

2.无权码

代码中的各位没有固定权值的代码称为无权码。表1.3.2中的余3码、余3循环码和格雷码都是无权码。

余3 BCD码由8421BCD码加3得到,其主要特点是0和9、1和8、2和7、3和6、4和5的代码互为反码,具有这种特点的代码称为自补码(Self Complementing Code)。

表1.3.2中的余3 BCD循环码和格雷BCD码分别由表1.3.1的4位二进制代码中的典型格雷码(循环码)去掉6个代码构成,仍具有原代码所具有的单位间距特性或检错特性。其中,余3 BCD循环码是从循环码的第4个码字开始依次取10个而形成。

每种4位二进制代码共有16个代码,在表1.3.2所列的各种常用BCD码中,未列出的代码是该码制中不允许出现的代码,称为禁用码或非法码,因为它们不与单个十进制数码相对应,是不允许出现的。如8421BCD码中的1010~1111六个代码即是8421BCD码中的禁用码(非法码)。

一个多位的十进制数可以用多个 BCD 代码表示,表示时代码之间应有间隔。例如,用8421BCD码表示(123)10时,其书写形式为

(123)10=(0001 0010 0011)8421BCD

应该注意,用 BCD 码表示的十进制数不是二进制数,也不能直接转化为二进制数。要转换,应先将其转换成十进制数,再由十进制数转换成二进制数。

3.8421BCD码的加法运算

两个 8421BCD 码相加时,可把其当作自然二进制码相加,如在相加所得结果中未出现8421BCD码的非法码,则该结果就是所需的8421BCD码。但如在相加结果中出现了8421BCD码的非法码或在相加过程中在 BCD 数位上出现了向高位的进位,则应对非法码及产生进位的代码进行“加6(0110)修正”。在作多位8421BCD码相加时,如果在“加6(0110)修正”过程中又出现非法码,则还需继续作“加6修正”。

例1.3.1试用8421BCD码分别求1+9及8+8。

解:

所以,1+9=(0001 0000)8421BCD=(10)10

所以,8+8=(0001 0110)8421BCD=(16)10

例1.3.2试用8421BCD码求712+989。

所以,712+989=(0001 0111 0000 0001)8421BCD=(1701)10

4.8421BCD码的减法运算

8421BCD码相减时,由于在进行减法运算时使用了四位二进制减法运算“借一当十六”的规则,而8421BCD码相减时应为“借一当十”,故当发生借位时应进行“减6修正”。

例1.3.3试用8421BCD码求113-55。

解:

所以,113-55=(0000 0101 1000)8421BCD=(58)10