8.1编码器的逻辑功能
一.编码器概述
计算机系统中,输入的文字、十进制数和运算符号的信息,要变换成若干位二进制代码后才能被计算机系统识别,然后发出操作指令。所以人们习惯用十进制,而数字系统只识别二进制,那么十进制与二进制之间就要相互转化。将二进制数按一定规则组成代码表示特定对象的过程,称为编码。实现编码功能的逻辑电路称为编码器。
在数字设备中,任何数据和信息都是用代码来表示的,所用的编码不同,实现这些编码的电路也不同,故编码器又可以分为二进制编码器、二-十进制编码器和字符编码器等。
二.二进制编码器
用n位二进制代码对2n个信号进行编码的电路,称为二进制编码器。
现以3位二进制编码器为例,分析一下二进制编码器的工作原理。图4-1(a)为3位二进制编码器的框图。编码器有8个输入端I0~I7,且输入为高电平有效,每个时刻仅有1个输入端为高电平,可见输入共有8种组合,可以用3位二进制数来分别表示输入端的8种情况,也就是把每一种输入情况编成一个与之对应的3位二进制数,这就是3位二进制编码器,又称之为8线–3线编码器。输入与输出的关系如表4-1所示。
图4-1 3位二进制编码器的框图与逻辑电路图
表4-1 3位二进制编码器的真值表

由真值表可写出输出与输入的函数表达式:

根据上式可得图4-1(b)所示的编码器电路。这个电路由三个与非门组成。
三.二十进制编码器
数字设备中多采用二进制,而日常生活中人们多采用十进制,这就要求对这两种进制进行转换。将0~9十个十进制数转换为二进制代码的逻辑电路,称为十进制编码器,又称为二-十进制编码器,也称为10线-4线编码器。四位二进制代码共有0000~1111十六种状态,其中任何十种状态都可表示0~9十个数码,方案很多。最常用的是8421编码方式,就是在四位二进制代码的十六种状态中取出前面十种状态0000~1001表示0~9十个数码,后面六种状态1010~1111去掉。如图4-2所示为二一十进制编码器逻辑电路图。其输入与输出的关系如表4-2所示。

图4-2 二一十进制编码器逻辑电路图
表4-2 二-十进制编码器的真值表

当编码器某一个输入信号为1而其它输入信号都为0时,则有一组对应的数码输出,如I7=1时,Y3Y2 Y1 Y0=0111。输出数码各位的权从高位到低位分别为8、4、2、1。因此,上图所示电路为8421BCD码编码器。由表中可看出,编码器在任何时刻只能对一个输入信号进行编码,不允许有两个或两个以上的输入信号同时请求编码,否则输出编码会发生混乱。这就是说,该编码器输入I0~I9这10个编码信号是相互排斥的。
四.优先编码器
在普通编码器电路中,编码器输入的编码信号是相互排斥的,而优先编码器则将所有输入端按优先顺序排队,允许同时在两个以上输入端上得到有效信号,此时仅对优先权最高的一个进行编码,而不对优先级低的请求进行编码,优先级别高的编码器信号排斥级别低的。优先权的顺序完全是根据实际需要来确定的。下面以二-十进制(8421)编码器74LS147和二进制编码器74LS148为例,介绍优先编码器。
74LS147又称为10线-4线优先编码器。如图4-3所示为74LS147引脚图及逻辑符号。由该图可见,编码器有9个输入端(
)和四个输出端(
)。输入端低电平0有效,这时表示有编码请求。其中
状态信号级别最高,
状态信号级别最低。
为编码输出端,四位二进制代码表示一位十进制数,以8421BCD反码输出,
为最高位,
为最低位。当
有效信号输入时,根据输入信号的优先级别输出级别最高的信号的编码。如当
=0时,其余输入信号不论是0还是1都不起作用,电路只对
进行编码,输出
=0110,为十进制数9的反码,其原码为1001。编码器没有
输入端,这是因为当
都为高电平1时,输出
=1111,为十进制数0的反码,其原码为0000,相当于输入
。因此,在逻辑功能示意图中没有输入端
。

图4-3(a)74LS147引脚图 (b)74LS147逻辑符号
74LS147编码器的功能表如表4-3所示。
表4-3 74LS147优先编码器功能表

74LS148是8-3线优先编码器,常用于优先中断系统和键盘编码。如图4-4所示为74LS148引脚图及逻辑符号。它有8个输入信号,3位输出信号。由于是优先编码器,故允许多个输入信号同时有效,但只对其中优先级别最高的有效输入信号编码,而对级别较低的不响应。

图4-4 74LS148的引脚图和逻辑符号
(a)引脚图 (b)逻辑符号
为状态信号输入,其中
状态信号的优先级别最高,
状态信号的优先级别最低,低电平为有效信号。
为编码输出端,以反码输出,
为最高位,
为最低位。
为使能输入端,当
时,无论输入信号
是什么,输出都是1;当
根据输入信号
的优先级别编码。例如,74ls148功能表4-4中第3行,输入信号
为有效低电平,则无论其他输入信号为低电平还是高电平,输出的BCD码均为000,即数字7的反码。
为使能输出端,主要用于级联和扩展。
用于标记输入信号是否有效。只要有一个输入信号为有效的低电平。
就变成低电平,它也用于编码器的级联。
表4-4 74ls148编码器功能表

五.编码器的应用
1、微控制器报警编码电路
图4-5所示为利用74LS148编码器监视8个化学罐液面的报警编码电路。若8个化学罐中任何一个的液面超过预定高度时,其液面检测传感器便输出一个0电平到编码器的输入端。编码器输出3位二进制代码到微控制器。此时,微控制器仅需要3根输入线就可以监视8个独立的被测点。
图4-5 74LS148微控制器报警编码电路
这里用的是Intel 8051微控制器,它有4个输入/输出接口,我们使用其中的一个口输入被编码的报警代码,并且利用中断输入INT0接收报警信号
(
是编码器输入信号有效的标志输出,只要有一个输入信号为有效的低电平,
就变成低电平)。当Intel 8051在INT0端接收到一个0时,就运行报警处理程序并做出相应的反应,完成报警。