编码器功能正好与译码器功能相反,将某一时刻仅一个输入有效的多个输入的变量情况用较少的输出状态组合来表达出现的一种器件,通常使用的编码器一般分为:2n到n及10到8421BCD码的编码。
编码器的功能
下面我们通过一个例子来说明编码器的逻辑功能。 例 一个7层高的大楼,其每层有一个火警报警传感器,如有火警希望在控制中心的数码显示屏上能显示出火警的楼层数,假设不会在两层上同时出现火警。 这是一个实际使用编码器的例子,我们在上一节里学过了译码显示驱动器电路,其输入是8421BCD码,而现在其每层有一个传感器,也就相当于其输入的7根,这里无法直接与译码显示电路相连,须在这两之间加上一个转换电路,将其7种状态转换为4位(或更少位)的二进制输出。 由于7个传感器,并且同一时刻仅一个传感器有效,故输入共7种状态,我们可以用3位二进制数据来描述其状态,假设输入用 I0,I1,I2,I3,I4,I5,I6,输出为O0,O1,O2。我们可以将其状态用真值表表示为:
I6 |
I5 |
I4 |
I3 |
I2 |
I1 |
I0 |
O2 |
O1 |
O0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
根据上面的分析我们可以画出下图的工作框图。
根据真值表及其每个时刻仅一个输入有效,于是可写出输出与输入的表达式如下:
O2=I6+I5+I4
O1=I6+I3+I2
O0=I5+I3+I1
上面方框中的电路实现的就是编码器的逻辑功能,从图上还会发现其它输入无效时,无论I0为0还是为1其输出皆为000,并且在电路上I0没有与门电路相连,这是一个设计缺陷,如果将输出的取值改为001~111将不会出现这样的问题,读者可自行设计。 上面例子中的前提条件是每一时刻仅一个输入有效,如果同时有两个或两以上输入有效,这时编码器就无法工作,由于通常的情况事件的处理总存在一个优先等级的问题,故实际的编码器通常是优先编码器(Priority Encoders)。 优先编码器就是当有两个或两个以上的输入有效时,仅对优先级高的输入进行编码,即当I6I5同时有效时,编码器输入仅对I6进行编码,而I5被忽略掉。
标准编码器器件
74148是一个8-3线的优先编码器电路,如下图给出了电路的管脚排布及逻辑符号。
其中:/I0~/I7:编码器输入端(低电平有效); /ST:选通输入端(低电平有效); /Y0~Y2:编码器输出(低电平有效); /YEX:扩展输出端(低电平有效); YS:选通输出端; HPRI/BIN:表示该编码器为二进制输出的优先编码器。下表列出了74148的功能真值表。
选通 |
输入端 |
输出 |
扩展 |
选通 |
/ST |
/I7 |
/I6 |
/I5 |
/I4 |
/I3 |
/I2 |
/I1 |
/I0 |
/Y2 |
/Y1 |
/Y0 |
/YEX |
YS |
1 |
× |
× |
× |
× |
× |
× |
× |
× |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
× |
× |
× |
× |
× |
× |
× |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
× |
× |
× |
× |
× |
× |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
× |
× |
× |
× |
× |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
× |
× |
× |
× |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
× |
× |
× |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
× |
× |
1 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
× |
1 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 | |