从零开始学数字电路
上QQ阅读APP看书,第一时间看更新

1.2 数制的转换、运算与编码

1.2.1 常用数制

数制就是记数法、进位制,目前人们通用的数制是十进制,但使用十进制并非是天经地义的,它只不过是来源于远古时代用十指记数的一种约定俗成的习惯。事实上,在我们的生活中也有使用非十进制的实例,如日期、时间的表示和进位以及英制度量衡等,下面就几种常用的数制分别进行介绍。

1. 十进制(D)

数制所使用的数码的个数为基,数制的每一位所具有的值称为权。十进制是以10为基数的计数体制,即它所使用的代码为0、1、2、3、4、5、6、7、8、9,共有10个。十进制的权是以10为底的幂,如10=1×101+0×100。每个十进制数都可以用位权值表示,其中,个位的位权为100,十位的位权为101,百位的位权为102,依此类推。

例如,402.8=4×102+0×101+2×100+8×10−1

从数字电路的角度来看,采用十进制是不方便的,因为构成数字电路的基本思路是把电路的状态与数码对应起来,而十进制的10个数码,必须有10个不同的而且能严格区分的电路状态与之对应起来,这样将在技术上带来许多困难,而且不经济,因而在数字电路中一般不直接采用十进制,而采用二进制。

2. 二进制(B)

二进制是用两个数码0和1表示,而且是“逢二进一”,即1+1=10(读为“壹零”),注意:这里的“10”与十进制数的“10”是完全不同的,它不代表“十”,右边的“0”表示0个20,左边的“1”表示1个21,即10=1×21+0×20,可见,二进制的权是以2为底的幂。

使用二进制具有以下优点。

(1)二进制只需用两种状态表示数字,容易实现

计算机是由电子元器件构成的,二进制在电气、电子元器件中最易实现。它只有两个数字,用两种稳定的物理状态即可表达,而且稳定可靠。比如磁化与未磁化,晶体管的截止与导通(表现为电平的高与低)等。而若采用十进制,则需用10种稳定的物理状态分别表示10个数字,不易找到具有这种性能的元器件,即使有,其运算与控制的实现也极复杂。

(2)二进制的运算规则简单

加法是最基本的运算,乘法是连加,减法是加法的逆运算(利用补码原理,还可以转化为加法运算,类似钟表拨针时的计算),除法是乘法的逆运算,其余任何复杂的数值计算也都可以分解为基本算术运算复合进行。为提高运算效率,在计算机中除采用加法器外,也可直接使用乘法器。

众所周知,十进制加法和乘法运算规则的口诀各有100条,根据交换率去掉重复项,也各有55条,用计算机的电路实现这么多运算规则是很复杂的。

相比之下,二进制的算术运算规则非常简单,加法、乘法各仅4条,运算操作也比较方便。

(3)用二进制容易实现逻辑运算

数字电路不仅需要算术功能,还应具备逻辑运算功能,二进制的0、1分别可用来表示假(false)和真(true),用布尔代数的运算法则很容易实现逻辑运算。

但是,二进制也有一些缺点。比如,用二进制表示一个数时,位数多,使用起来不方便也不习惯。因此在运算时,原始数据多用人们习惯的十进制,在送入计算机时,就必须将十进制数据转换成数字系统能接受的二进制数,而运算结束后再将二进制数转换为十进制数,表示最终结果。

3. 八进制(O)和十六进制(H)

由于使用二进制数时位数很多,不便于书写和记忆,因此在数字计算机的资料中常采用十六进制数或八进制数来表示二进制数。上述十进制和二进制数的表示法可以推广到十六进制和八进制。例如,八进制数采用8个数码,而且“逢八进一”。这种数制中有8个不同的数字:0、1、2、3、4、5、6、7,它是以8为基数的计数体制。十六进制数采用16个数码,而且“逢十六进一”。这种数制中有16个不同的数字:0、1、2、3、4、5、6、7、8、9、A(对应于十进制数中的10)、B(11)、C(12)、D(13)、E(14)、F(15),它是以16为基数的计数体制。

为便于记忆和理解,表1-4对二进制、八进制、十进制和十六进制进行了对照和比较。

表1-4 二进制、八进制、十进制和十六进制对照比较情况

0

1.2.2 数制的转换

1. 其他进制转换为十进制

其他进制转换为十进制方法是,将其他进制按权位展开,然后各项相加,就得到相应的十进制数。

例1:将二进制数(11011.101)2转换成十进制数。

解:(11011.101)2=1×24+1×23+0×22+1×21+1×20+1×2-1+0×2-2+1×2-3=16+8+0+2+1+0.5+0+0.125=(27.625)10

例2:将八进制数(136.524)8转换成十进制数。

解:(136.524)8=1×82+3×81+6×80+5×8-1+2×8-2+4×8-3=64+24+6+0.625+0.03125+0.0078125=(94.6640625)10

例3:将十六进制数(FF)16转换为十进制数。

解:(FF)16=15×161+15×160=240+15=(255)10

例4:将十六进制数(13DF.B8)16[=(13DF.B8)H]转换成十进制数。

解:(13DF.B8)16=1×163+3×162+13×161+15×160+11×16-1+8×16-2=4096+768+208+15+0.6875+0.03125=(5087.71875)10

2. 将十进制转换成其他进制

十进制转换成其他进制时,需分两部分进行,即整数部分和小数部分。

(1)整数部分(基数除法)

① 把要转换的十进制数除以新的进制的基数,把余数作为新进制的最低位。

② 把上一次得的商再除以新的进制基数,把余数作为新进制的次低位。

③ 继续上一步,直到最后的商为零,这时的余数就是新进制的最高位。

(2)小数部分(基数乘法)

① 把要转换数的小数部分乘以新进制的基数,把得到的整数部分作为新进制小数部分的最高位。

② 把上一步得的小数部分再乘以新进制的基数,把整数部分作为新进制小数部分的次高位。

③ 继续上一步,直到小数部分变成零为止,或者达到预定的要求也可以。

例5:把十进制数(25)10转换成二进制数。

解:由于二进制基数为2,所以逐次除以2取其余数(0或1)。

0

所以,(25)10=(11001)2,即25D=11001B

例6:把十进制数173D转换成二进制数。

解:由于二进制基数为2,所以逐次除以2取其余数(0或1)。

0

所以,(173)10=(10101101)2

例7:将十进制数(25)10转换成八进制数。

解:由于基数为8,逐次除以8取余数。

0

所以,(25)10=(31)8

例8:将十进制(255)10转换为十六进制数。

解:由于基数为16,逐次除以16取余数。

0

所以,(255)10=(FF)16

例9:将十进制小数(0.375)10转换成二进制数。

解:

0

所以,(0.375)10=(0.011)2

3. 二进制与八进制、十六进制的相互转换

八进制数和十六进制数的基数分别为8=23、16=24,所以3位二进制数恰好相当于1位八进制数,4位二进制数相当于1位十六进制数,它们之间的相互转换是很方便的。

二进制数转换成八进制数的方法是:从小数点开始,分别向左、向右,将二进制数按每3位一组分组(不足3位的补0),然后写出每一组等值的八进制数。

例10:求(01101111010.1011)2的等值八进制数。

解:

0

所以,(01101111010.1011)2=(1572.54)8

二进制数转换成十六进制数的方法和二进制数与八进制数的转换相似,从小数点开始分别向左、向右将二进制数按每4位一组分组(不足四位补0),然后写出每一组等值的十六进制数。

例11:将(1101101011.101)2转换为十六进制数。

解:

0

所以,(1101101011.101)2=(36B.A)16

八进制数、十六进制数转换为二进制数的方法可以采用与前面相反的步骤,即只要按原来顺序将每一位八进制数(或十六进制数)用相应的3位(或4位)二进制数代替即可。

例12:将(678.A5)16转换为二进制数。

解:

0

所以,(678.A5)16=(0110 0111 1000.1010 0101)2

1.2.3 二进制的算术运算

二进制数的加、减、乘、除四则运算,在数字系统中是经常遇到的,它们的运算规则与十进制数很相似。加法运算是最基本的一种运算,利用它的运算规则可以实现其他3种运算。例如,减法运算可以借助改变减数的符号再与被减数相加,乘法运算可视为被乘数的连加,而除法则可视为被除数重复地减去除数。

1. 二进制加法

加法运算的规则是逢二进一,如表1-5所示。

表1-5 加法运算规则

0

2. 二进制减法

这里先介绍无符号数的减法,其规则是向高位借1当2,如表1-6所示。

表1-6 无符号数的减法运算规则

0

3. 二进制乘法与除法

二进制乘法、除法与十进制乘法、除法相同,下面列出了四条乘法规则。

0×0=0

0×1=0

1×0=0

1×1=1

例13:求(1101)2与(0101)2的乘积。

解:

0

1.2.4 编码

数字系统中的信息可分为两类,一类是数值,另一类是文字符号(包括控制符)。为了表示文字符号信息,往往也采用一定位数的二进制码表示,这个特定的二进制码称为代码。建立代码与十进制数、字母、符号的一一对应关系的方法称为编码。

1. 码的基本概念

(1)数位与比特

码的位叫作数位,对于十进制码叫作十进制数位,对于二进制码叫作二进制数位,二进制数位一般简称为bit,中文读作比特。例如,某一个二进制码是100101,该码共有6数位,所以称为6bit(比特)。

(2)字

用二进制数表示某一个数值或字符时,该二进制数称为字,英文是word。在数字系统电路中,所有的信息,包括数据、字母、符号、代表机器操作的指令或数据以及指令在存储器中的存放地址等,都是以二进制代码表示的,作为一个整体来处理或运算的一组二进制数码,称为一个字。字是二进制数的基本单位,是数据总线宽度。

(3)字长

在微控制器中,一个字的二进制位数称之为字长。微控制器的字长有1位、4位、8位和16位等。

(4)字节

字节是由一组二进制位形成的计算机的一种存储单位,它可以表示一个字符,通常一个字节为8个二进制位。

(5)字内位的名称

字内各个位的名称是有规定的,具体规定如下。

最高一位叫作MSB,次高位叫作2SB,第3位叫作3SB,依此类推,最后一位叫作LSB。

2. 二-十进制编码(BCD码)

二-十进制编码也称BCD码,它是一个用4比特二进制码来表示十进制数的二进制码,即用4数位的二进制码来表示十进制数中的0~9,表1-7列出了几种常用BCD码编码方式。

表1-7 几种常用的BCD码

0

(1)8421 BCD码

8421 BCD码是最基本和最常用的BCD码,从上表可以看出,十进制数中的0~9十个数每个数都用一个4比特的二进制码表示,而十进制数中的两位及两位以上的数,则采用每一位都用一个4比特的二进制码来表示。例如,123用8421 BCD码表示就是0001 0010 001l,其中0001是表示百位数的1,0010表示的是十位数的2,0011表示的是个位数3。

8421 BCD码的权自左至右为8、4、2、1。具体地讲,8是最高位(第四位)的权,4是次高位(第三位)的权,2是第二位的权,1是最低位的权。

根据每一位的权,可以方便地计算出十进制数。例如,某一个二进制数码是0111,则该数码就是十进制数中的0×8+1×4+1×2+1×1=7。

(2)其他BCD码

在5421码中,5、4、2、1是这种编码的权,即最高一位的权是5,次高位的权是4,第三位的权是2,最低一位的权是1。

在2421码中,2、4、2、1是这种编码的权,即最高一位的权是2,次高位的权是4,第三位的权是2,最低一位的权是1。

用4位二进制码中的10组代码0011~1100来表示十进制中0~9十个数,同一个十进制数所对应的余3码等于所对应的8421码加上3(0011)。余3码这种编码是无权的。

3. ASCII码

在数字系统中,除数字需要编码成为二进制码外,各种字母和符号也必须用某种特定规则的二进制编码来表示。目前,国际上普遍采用的是ASCII码,其英文为American Standard Code for Information Interchange,是美国标准信息交换码的简称,ASCII码用7位二进制数码来表示,故可表示27=128种不同的字符,这其中包括了26个大小写的英文字母、10个十进制数字符号0~9、7个标点符号、9个运算符号以及50个其他符号。

4. 原码、反码和补码

(1)原码

在生活中,表示数的时候一般都是把正数前面加一个“+”,负数前面加一个“−”,但是在数字设备中,机器是不认识这些的。一般规定,用二进制的最高位“0”表示“+”,用二进制的最高位“1”表示“−”,其余数位表示数的大小。

例如,[+105]=01101001,[−105]=11101001,[+0]=00000000,[−0]=10000000。

有符号的8位(一个字节)二进制数表示的范围为−127~+127。

(2)反码

正数的反码与其原码相同,而负数的反码等于其绝对值各位求反。

例如,[+105]=01101001,[−105]=10010110,[+0]=00000000,[−0]=11111111。

(3)补码

在介绍补码概念之前,有必要先介绍补数的概念。以天天见到的时钟为例,设当前的准确时间是下午2点,可时钟却停在10点位置上,将时钟修正到下午2点位置有两种方法:一是将时钟顺时针方向拨4小时,二是将时钟逆时针方向拨8小时,其结果是一样的,上述两种拨钟方法可用下式表示:

10+4=14点=2点。

10−8=2点。

14点就是2点,这是因为时钟按12小时为一个周期计数,12称为模,即时钟系统的模是12,14和2是以12为模的同余数,在12为模的系统中,4和8互为补数,此外,3和9,2和10等都是互为补数,它们的共同特点是两数相加等于12。因此,要求一个数的补数,用模减去这个数就可以了。

有了上述补数的概念之后,就容易理解补码的概念了,在数字系统电路中的补数就是补码。

一般来说,正数的补码与其原码相同;负数的补码是把其原码除符号位外的各位先求其反码,然后在最低位加1。

例如,[+105]=01101001,[−105]=10010111,[0]=00000000,[−1]=11111111。

5. 奇偶校验码

在数据的存取、运算和传送过程中,难免会发生错误,把“1”错成“0”或把“0”错成“1”。奇偶校验码是一种能检验这种错误的代码。它分为两部分,信息位和奇偶校验位。有奇数个“1”称为奇校验,有偶数个“1”则称为偶校验。

1.2.5 二进制码的传输与存取

人们的日常生活每时每刻都离不开信息,信息的传播是人类社会交流的基础,信息传播有各种途径。人们讲话可以靠空气、固体电缆等传播,广播、电视可以通过无线电波传播等。那么计算机的信息又是靠什么来传播呢?它有三种途径:网络电缆、固体磁盘、无线电波,但无论是哪种途径,都必须经过编码,即用固定的代码代表特定的信息,因为计算机能够识别的只有二值的“0”和“1”。这样的例子有很多,比如键盘上的每个英文字符都可以用特定的ASCⅡ码表示,每个汉字都可以用国际码表示,这些都是固定的。但是,对模拟信号而言,由于信号的连续性,无法直接用代码表示,必须经模/数转换,用一组代码表示固定信息。信息用代码表示后,就可以进行传输,而在传输过程中的信息识别要求有统一的协议,信息代码的传输如图1-5所示。

0

图1-5 信息代码的传输

1. 数据的传输方式

二进制数据从一处传输到另一处,可以采用串行方式或并行方式。

(1)串行方式

对于串行方式,所需设备简单,只需一根导线和一个共同接地端即可,每传送一位数据需要一个时钟周期,这种传输可以通过电话线或两台计算机之间进行二进制数据串行传输,如图1-6(a)所示。

0

图1-6 串行传输方式

由图1-6(a)可见,电路1输出了一个4位的二进制码,即D0=1,Dl=1,D2=0,D3=1,该4位数码加到电路2中,从电路1到电路2就采用了串行传输方式,此时传输这4位二进制数码就只用了一根导线。

在串行传输时,先传输第一位数码D0=1,再传输第二位数码D1=1,然后依次传输D2=0和D3=1,当采用电平调制串行传输时,信号为高电平时为“1”,信号为低电平时为“0”,其信号传输波形如图1-6(b)所示。

如果采用脉冲位置调制(PPM)串行传输方式,脉冲间隔宽者为高电平“1”,脉冲宽度窄者为低电平“0”,如图1-6(c)所示,D0、Dl和D3脉冲宽,表示为高电平“1”,D2脉冲窄,表示为低电平“0”。

(2)并行方式

并行传输是二进制数码的各位同时传输,这样要求传输导线的数目与二进制数码的位数相同。例如,传输一个4位二进制数码时要使用4条导线。在并行传输方式中,各位的数值用该位电位的“高”或“低”来表示。高电平为“1”,低电平为“0”,图1-7是4位二进制数码并行传输示意图。

从图1-7中可以看出,电路中共有4位二进制数码,在传输时它们同时传输,不像串行传输那样要一位一位地传输。

0

图1-7 并行传输方式

2. 码的传输速率

码的传输速率也称波特率或比特率,是指每秒钟所传输数据的位数,它的单位是位/秒(bit/s)。例如,某通信系统每秒钟传输120个字符,而每个字符格式包含10个代码位(1个起始位、1个终止位、8个数据位),这时,传输的波特率为:

10×120bit/s=1200bit/s

每一位代码传输的时间td为波特率的倒数。

0

波特率是衡量传输通道频宽的指标,它和传输数据的速率并不一致,如上例中,因为除掉起始位和终止位,每个字符实际上只有8位数据,所以,数据的传输速率为:

8×120bit/s=960bit/s

3. 二进制码的存取

数字电路与模拟电路还有一个不同之处,就是数字电路中有许多存储器电路,在工作过程中时常需要从存储器里取出有关信息,或送入有关信息,这在模拟电路中是不可能实现的,因为模拟电路中不能设计出具有记忆功能的存储器电路。

(1)信息存放电路

数字电路中有关信息的存放有专门的记忆功能电路,如寄存器、存储器,这两种存放信息的电路用来存放各种功能的二进制码。

(2)读写操作

在数字系统电路中,将信息(二进制码)从存储器电路中取出称为读操作,将信息存入存储器电路称为写操作,对存储器的读、写操作称为访问存储器。