第 139 篇

考研数电·零基础讲义 第09讲(上)|编码器

约 20 分钟 6443 字 华南师范大学数字电子技术考研数电零基础讲义

考研数电·零基础讲义 · 第 09 讲(上)|编码器 学完这一讲,你能说清"编码器"在干什么,会推普通编码器的逻辑式,能读懂优先编码器 74HC148 的功能表(低电平有效、优先级、S′S'⁠、YS′Y_S'⁠、YEX′Y_{EX}'⁠),并会用两片 74HC148 扩展成 16 线-4 线编码器。预计用时 1.5~2 小时。

本讲地图

  • 编码是什么:给每个"事件"(按键、信号)分配一个二进制代码。
  • 普通编码器:任何时刻只允许一个输入有效,否则输出乱套。
  • 优先编码器 74HC148:允许同时有多个输入,只给优先级最高的那个编码;输入输出都是低电平有效。
  • 华师怎么考:考纲点名"编码器、译码器、数据选择器"。常见问法是"给定输入,写出 74HC148 的输出""说明YS′Y_S'⁠、YEX′Y_{EX}'的作用""用两片扩展"。
  • 教材对应:第 4 章 4.4.1 节(编码器),4.5 节例 4.5.1(16 线-4 线扩展)。

前置知识

  • 二进制数与 3 位、4 位二进制码(见第 01 讲上)。
  • 组合电路设计步骤、真值表写式(见第 08 讲)。
  • 无关项(约束项)的使用(见第 04 讲下)。

一、编码到底在干什么

1.1 大白话:给每个按键发一张"号码牌"

想象电梯里有 8 个楼层按钮,但控制电路只想用几根线知道"按的是哪一层"。8 根线一根一根接过去当然可以,但太浪费。聪明的办法是:给每个按钮发一张"号码牌"——按钮 0 是 000,按钮 1 是 001……按钮 7 是 111。这样只要 3 根线就能说清楚是哪个按钮。

**编码器(Encoder)**就是这个"发号码牌"的电路:

输入:2n2^n根线,每根代表一个事件;输出:nn位二进制代码,告诉你是哪一个事件发生了。

8 个输入、3 个输出的编码器叫 8 线-3 线编码器(也叫 3 位二进制编码器)。

1.2 编码器和译码器是一对"反义词"

编码器 译码器(下一讲)
做什么 "哪根线有信号" → 二进制代码 二进制代码 → "让哪根线有信号"
输入/输出 2n2^n进,nn出 nn进,2n2^n出
生活类比 给病人发号码牌 叫号屏按号码叫人

先把这张对照表记住,学下一讲时会轻松很多。

1.3 为什么 8 个输入配 3 位输出?

nn位二进制数一共有2n2^n种组合。23=82^3=8⁠,3 位刚好能区分 8 个事件;要区分 16 个事件就需要 4 位(⁠24=162^4=16⁠)。记住这个关系:输入线数 = 2输出位数2^{\text{输出位数}}。


二、普通编码器

2.1 大白话:一次只许按一个键

普通编码器有一个前提:任何时刻只允许一个输入有效。就像点名,一次只能一个人举手。如果两个人同时举手,它就"懵"了。

2.2 真值表(以 8 线-3 线、高电平有效为例)

输入I0∼I7I_0\sim I_7(读作"I 零到 I 七"),某一根为 1 表示该事件发生;输出Y2Y1Y0Y_2Y_1Y_0是它的号码(⁠Y2Y_2为最高位)。

有效输入 Y2Y_2 Y1Y_1 Y0Y_0
I0=1I_0=1 0 0 0
I1=1I_1=1 0 0 1
I2=1I_2=1 0 1 0
I3=1I_3=1 0 1 1
I4=1I_4=1 1 0 0
I5=1I_5=1 1 0 1
I6=1I_6=1 1 1 0
I7=1I_7=1 1 1 1

(每一行只有表中这一个输入为 1,其余 7 个都是 0。)

8线-3线普通编码器:每次只按下一个输入,输出对应的3位二进制码(动画) 8线-3线 编码器 I0 I1 I2 I3 I4 I5 I6 I7 Y2 Y1 Y0 1000按下 I0(只有它为 1)→ 输出 000 1001按下 I1(只有它为 1)→ 输出 001 1010按下 I2(只有它为 1)→ 输出 010 1011按下 I3(只有它为 1)→ 输出 011 1100按下 I4(只有它为 1)→ 输出 100 1101按下 I5(只有它为 1)→ 输出 101 1110按下 I6(只有它为 1)→ 输出 110 1111按下 I7(只有它为 1)→ 输出 111 按键

图 1:8 线-3 线普通编码器,每次只按下一个键,输出就是这个键的编号(动画循环播放)

2.3 推出逻辑式:为什么只要三个或门

8 个输入有28=2562^8=256种组合,但题目约定只会出现上表 8 种(每次只有一个 1)。其余 248 种组合"不会出现",它们就是约束项,可以当作无关项随便取值。

看Y2Y_2⁠:它在I4I_4⁠、I5I_5⁠、I6I_6⁠、I7I_7有效时为 1。既然每次只有一个输入为 1,那么"I4I_4到I7I_7中有一个是 1"就等价于Y2=1Y_2=1⁠:

Y2=I4+I5+I6+I7Y_2=I_4+I_5+I_6+I_7

同理,Y1Y_1在编号的"中间位"为 1 时为 1(编号 2、3、6、7),Y0Y_0在奇数编号时为 1(编号 1、3、5、7):

Y1=I2+I3+I6+I7,Y0=I1+I3+I5+I7Y_1=I_2+I_3+I_6+I_7,\qquad Y_0=I_1+I_3+I_5+I_7

所以 8 线-3 线普通编码器只要 3 个 4 输入或门。

逐行拆解:怎么快速记住哪个输入进哪个或门?把编号写成二进制,看哪一位是 1:

  • 编号的最高位(⁠222^2位)为 1 的:4、5、6、7 → 进Y2Y_2⁠;
  • 中间位(⁠212^1位)为 1 的:2、3、6、7 → 进Y1Y_1⁠;
  • 最低位(⁠202^0位)为 1 的:1、3、5、7 → 进Y0Y_0⁠。

2.4 例题 1:普通编码器"同时按两个键"会怎样?

题目:上述电路中,若I3I_3和I5I_5同时为 1,输出是什么?

解:Y2=I4+I5+I6+I7=1Y_2=I_4+I_5+I_6+I_7=1(因为I5=1I_5=1⁠);Y1=I2+I3+I6+I7=1Y_1=I_2+I_3+I_6+I_7=1(因为I3=1I_3=1⁠);Y0=I1+I3+I5+I7=1Y_0=I_1+I_3+I_5+I_7=1⁠。输出111111⁠,表示"7 号键"——完全错误,既不是 3 也不是 5。

这就是普通编码器的致命弱点,也是下面要讲优先编码器的原因。

2.5 例题 2:4 线-2 线普通编码器

题目:设计 4 线-2 线普通编码器,输入I0∼I3I_0\sim I_3高电平有效,任何时刻只有一个为 1。

解:同样按"编号哪一位为 1"来写:编号 2(10)、3(11)的高位为 1,编号 1(01)、3(11)的低位为 1,所以

Y1=I2+I3,Y0=I1+I3Y_1=I_2+I_3,\qquad Y_0=I_1+I_3

2.6 易错点 ⚠️

  • 普通编码器的式子Y2=I4+I5+I6+I7Y_2=I_4+I_5+I_6+I_7 依赖"只有一个输入有效"这个约束,离开这个前提就不成立。
  • 注意I0I_0根本没有接进任何门!I0=1I_0=1时三个输出都是 0,和"什么都没按"一模一样。普通编码器分不清"按了 0 号键"和"没按键",这也是 74HC148 要加YS′Y_S'⁠、YEX′Y_{EX}'的原因之一。

三、优先编码器 74HC148

3.1 大白话:医院急诊"分诊"

急诊室同时来了好几个病人,医生先看谁?先看最危重的。优先编码器就是这样一位"分诊护士":

允许同时有多个输入有效,但只对其中优先级最高的那个编码,其余的一概不理。

74HC148 是 8 线-3 线优先编码器,I7I_7优先级最高,I0I_0最低。

3.2 先过"低电平有效"这一关

74HC148 的输入和输出都是低电平有效。这是初学者最容易晕的地方,先讲透:

  • "低电平有效"意思是:0 表示"有信号",1 表示"没信号"。正好和我们习惯的相反。
  • 记号上,在信号名上加一撇或横线:I3′I_3'(读作"I 三非"或"I 三撇"),也写作I3‾\overline{I_3}⁠。I3′=0I_3'=0表示 3 号输入有信号。
  • 在框图上,引脚处画一个小圆圈表示低电平有效。

为什么要这样设计?在实际电路中,按键常常一端接地,按下时把线拉到低电平,所以"低电平 = 有按键"更自然。

8线-3线优先编码器74HC148的逻辑框图,输入输出均低电平有效 74HC148 I0 I0' I1 I1' I2 I2' I3 I3' I4 I4' I5 I5' I6 I6' I7 I7' S S' Y2 Y2' Y1 Y1' Y0 Y0' YS YS' YEX YEX' 小圆圈 = 低电平有效 I7′ 优先级最高,I0′ 最低;输出为反码

图 2:74HC148 逻辑框图。引脚旁的小圆圈表示低电平有效,框内写原变量名,框外写带撇的名字

3.3 引脚一个一个认

引脚 读法 方向 作用
I0′∼I7′I_0'\sim I_7' I 零非~I 七非 输入 8 个编码输入,低电平有效;I7′I_7'优先级最高
S′S' S 非 输入 选通输入(使能):S′=0S'=0芯片工作,S′=1S'=1芯片"睡觉",所有输出被封锁为高电平
Y2′Y1′Y0′Y_2'Y_1'Y_0' Y 二非…… 输出 3 位编码输出,反码形式(低电平有效)
YS′Y_S' Y-S 非 输出 选通输出:YS′=0Y_S'=0表示"芯片在工作,但没有任何输入"
YEX′Y_{EX}' Y-EX 非 输出 扩展输出:YEX′=0Y_{EX}'=0表示"芯片在工作,而且有输入在编码"

"反码"是什么意思?比如I6′I_6'有效(编号 6 = 110),输出不是 110,而是每位取反的 001。所以读 74HC148 的输出时,先把Y2′Y1′Y0′Y_2'Y_1'Y_0'每位取反,再看是几号。

3.4 功能表(教材表 4.4.2)

"×"表示"取 0 取 1 都行,不影响结果"。

S′S' I0′I_0' I1′I_1' I2′I_2' I3′I_3' I4′I_4' I5′I_5' I6′I_6' I7′I_7' Y2′Y_2' Y1′Y_1' Y0′Y_0' YS′Y_S' YEX′Y_{EX}'
1 × × × × × × × × 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1 1 1 0 1
0 × × × × × × × 0 0 0 0 1 0
0 × × × × × × 0 1 0 0 1 1 0
0 × × × × × 0 1 1 0 1 0 1 0
0 × × × × 0 1 1 1 0 1 1 1 0
0 × × × 0 1 1 1 1 1 0 0 1 0
0 × × 0 1 1 1 1 1 1 0 1 1 0
0 × 0 1 1 1 1 1 1 1 1 0 1 0
0 0 1 1 1 1 1 1 1 1 1 1 1 0

3.5 逐行拆解这张表

第 1 行(⁠S′=1S'=1⁠):芯片被禁止。不管输入是什么,5 个输出全是 1。可以理解为"关机了,所有灯都不亮"(低电平有效,1 就是不亮)。

第 2 行(⁠S′=0S'=0⁠,输入全 1):芯片在工作,但没有任何输入有效。Y2′Y1′Y0′=111Y_2'Y_1'Y_0'=111⁠,YS′=0Y_S'=0("我在工作但没活干"),YEX′=1Y_{EX}'=1⁠。

第 3 行(⁠I7′=0I_7'=0⁠):7 号输入有效。因为它优先级最高,其他输入不管是什么(全是 ×),都只给 7 编码:7 = 111,取反得Y2′Y1′Y0′=000Y_2'Y_1'Y_0'=000⁠。YEX′=0Y_{EX}'=0("我有输入在编码"),YS′=1Y_S'=1⁠。

第 4 行(⁠I7′=1I_7'=1⁠,I6′=0I_6'=0⁠):7 号没信号,6 号有信号,比 6 低的不管。6 = 110,取反得 001。

……以此类推,看"从I7′I_7'往下数,第一个出现的 0"在哪一位,就给那一位编码。

最后一行(只有I0′=0I_0'=0⁠):0 = 000,取反得 111,YEX′=0Y_{EX}'=0⁠。

注意:输出都是 111 的情况有三种——第 1 行(禁止)、第 2 行(工作但无输入)、最后一行(对I0I_0编码)。靠YS′Y_S'和YEX′Y_{EX}'区分:

情况 Y2′Y1′Y0′Y_2'Y_1'Y_0' YS′Y_S' YEX′Y_{EX}'
芯片禁止(⁠S′=1S'=1⁠) 111 1 1
工作但无输入 111 0 1
对I0′I_0'编码 111 1 0

这就补上了普通编码器"分不清 0 号键和没按键"的漏洞。

3.6 逻辑式(看懂即可)

教材由内部电路写出(令S=S′‾S=\overline{S'}⁠,Ik=Ik′‾I_k=\overline{I_k'}为高电平有效的内部信号):

Y2′=(I4+I5+I6+I7)S‾Y_2'=\overline{(I_4+I_5+I_6+I_7)S} Y1′=(I2I4‾ I5‾+I3I4‾ I5‾+I6+I7)S‾Y_1'=\overline{(I_2\overline{I_4}\,\overline{I_5}+I_3\overline{I_4}\,\overline{I_5}+I_6+I_7)S} Y0′=(I1I2‾ I4‾ I6‾+I3I4‾ I6‾+I5I6‾+I7)S‾Y_0'=\overline{(I_1\overline{I_2}\,\overline{I_4}\,\overline{I_6}+I_3\overline{I_4}\,\overline{I_6}+I_5\overline{I_6}+I_7)S} YS′=I0‾ I1‾⋯I7‾ S‾,YEX′=(I0+I1+⋯+I7)S‾Y_S'=\overline{\overline{I_0}\,\overline{I_1}\cdots\overline{I_7}\,S},\qquad Y_{EX}'=\overline{(I_0+I_1+\cdots+I_7)S}

怎么理解"优先"写在式子里:看Y1′Y_1'里的I2I4‾ I5‾I_2\overline{I_4}\,\overline{I_5}——"I2I_2有效,而且比它优先的I4I_4⁠、I5I_5都没有效"。为什么不用管I3I_3⁠?因为I3I_3和I2I_2编码的Y1Y_1位都是 1,谁有效都一样;为什么不用写I6‾\overline{I_6}⁠、I7‾\overline{I_7}⁠?因为I6I_6⁠、I7I_7有效时Y1Y_1也是 1,结果不变。这几条式子已用程序对 512 种输入穷举,和功能表完全一致。

3.7 例题 3:读 74HC148 的输出

题目:74HC148 中S′=0S'=0⁠,I5′=I3′=I1′=0I_5'=I_3'=I_1'=0⁠,其余输入为 1。求各输出。

解:

  1. S′=0S'=0⁠,芯片工作。
  2. 有效输入是 5、3、1 号,优先级最高的是 5 号。
  3. 5 = 101,取反得Y2′Y1′Y0′=010Y_2'Y_1'Y_0'=010⁠。
  4. 有输入在编码,所以YEX′=0Y_{EX}'=0⁠,YS′=1Y_S'=1⁠。

答:Y2′Y1′Y0′=010Y_2'Y_1'Y_0'=010⁠,YS′=1Y_S'=1⁠,YEX′=0Y_{EX}'=0⁠。

3.8 例题 4:同一组输入,S′=1S'=1时

题目:上题中如果S′=1S'=1呢?

解:芯片被禁止,所有输出都是 1:Y2′Y1′Y0′=111Y_2'Y_1'Y_0'=111⁠,YS′=1Y_S'=1⁠,YEX′=1Y_{EX}'=1⁠。不要被输入"迷惑"去编码。

3.9 例题 5:用逻辑式验证功能表的一行

题目:S′=0S'=0⁠,I3′=0I_3'=0⁠,I1′=0I_1'=0⁠,其余为 1。分别用"功能表口诀"和"逻辑式"求Y2′Y1′Y0′Y_2'Y_1'Y_0'⁠,看两种方法是否一致。

口诀法:从I7′I_7'往下找第一个 0,是I3′I_3'⁠;3 = 011,取反得 100。

逻辑式法:先把低电平有效的引脚翻译成内部的高电平信号:S=S′‾=1S=\overline{S'}=1⁠,I3=1I_3=1⁠,I1=1I_1=1⁠,其余Ik=0I_k=0⁠。

  • Y2′=(I4+I5+I6+I7)S‾=0⋅1‾=1Y_2'=\overline{(I_4+I_5+I_6+I_7)S}=\overline{0\cdot1}=1⁠;
  • Y1′Y_1'⁠:括号里I3I4‾ I5‾=1⋅1⋅1=1I_3\overline{I_4}\,\overline{I_5}=1\cdot1\cdot1=1⁠,所以Y1′=1⋅1‾=0Y_1'=\overline{1\cdot1}=0⁠;
  • Y0′Y_0'⁠:括号里I3I4‾ I6‾=1I_3\overline{I_4}\,\overline{I_6}=1⁠,所以Y0′=1‾=0Y_0'=\overline{1}=0⁠。

得Y2′Y1′Y0′=100Y_2'Y_1'Y_0'=100⁠,和口诀一致。注意Y0′Y_0'括号里的第一项I1I2‾ I4‾ I6‾I_1\overline{I_2}\,\overline{I_4}\,\overline{I_6}此时也等于 1——I1I_1和I3I_3的编码最低位都是 1,所以谁"赢"都不影响Y0′Y_0'⁠,这正是式子可以写得这么短的原因。

这道题告诉我们:考试时用口诀最快;但如果题目给出内部逻辑图让你"分析",就要会这样一项一项代。

3.10 易错点 ⚠️

  • 输出是反码!I5′I_5'有效输出 010,不是 101。这是最常见的失分点。
  • S′S'是低电平使能,S′=0S'=0才工作。
  • YS′Y_S'与YEX′Y_{EX}'别记反:YS′=0Y_S'=0是"没输入",YEX′=0Y_{EX}'=0是"有输入"。记忆法:EX 是 "EXist"(存在输入)。
  • 芯片工作时(⁠S′=0S'=0⁠),YS′Y_S'和YEX′Y_{EX}'总是一个 0 一个 1;芯片禁止时两者都为 1。

四、用两片 74HC148 扩展成 16 线-4 线优先编码器

4.1 大白话:两个科室接力分诊

一个护士只能管 8 个床位。现在有 16 个病人怎么办?请两个护士:高优先级的 8 个(⁠A8′∼A15′A_8'\sim A_{15}'⁠)归护士 1,低优先级的 8 个(⁠A0′∼A7′A_0'\sim A_7'⁠)归护士 2。规则是:只要护士 1 那边有病人,护士 2 就不许插手;护士 1 那边空了,才轮到护士 2。

4.2 连接方法(教材例 4.5.1)

目标:16 个低电平有效输入A0′∼A15′A_0'\sim A_{15}'⁠,A15′A_{15}'优先级最高,输出 4 位原码 Z3Z2Z1Z0Z_3Z_2Z_1Z_0(0000~1111)。

  1. 分配输入:A15′∼A8′A_{15}'\sim A_8'接片(1) 的I7′∼I0′I_7'\sim I_0'⁠;A7′∼A0′A_7'\sim A_0'接片(2) 的I7′∼I0′I_7'\sim I_0'⁠。
  2. 片(1) 的S′S'接 0:片(1) 永远工作。
  3. 片(1) 的YS′Y_S'接片(2) 的S′S':片(1) 没有输入时YS′=0Y_S'=0⁠,正好让片(2) 工作;片(1) 有输入时YS′=1Y_S'=1⁠,把片(2) 封锁(片(2) 输出全 1)。这就实现了"高优先级组压住低优先级组"。
  4. 最高位Z3Z_3:由片(1) 的YEX′Y_{EX}'取反得到。片(1) 有输入(编号 8~15)时YEX′=0Y_{EX}'=0⁠,Z3=1Z_3=1⁠;否则Z3=0Z_3=0⁠。
  5. 低三位:Zi=Yi(1)′⋅Yi(2)′‾Z_i=\overline{Y_{i(1)}'\cdot Y_{i(2)}'}(⁠i=2,1,0i=2,1,0⁠),用 3 个与非门。
用两片74HC148接成16线-4线优先编码器的连接示意图 片(1) 74HC148 A15'~A8' I7'~I0' 片(2) 74HC148 A7'~A0' I7'~I0' S'=0 YS' → S' YEX' Z3 Y2' Y2' Z2 Y1' Y1' Z1 Y0' Y0' Z0 片(1)有输入时封锁片(2);Z3Z2Z1Z0 输出原码

图 3:两片 74HC148 接成 16 线-4 线优先编码器。橙色线:片(1) 的YS′Y_S'控制片(2) 的S′S'

为什么第 5 步用与非门?因为任何时刻至多只有一片在编码,不编码的那一片(被封锁或没输入)输出 111。与非门X⋅Y‾\overline{X\cdot Y}等价于X‾+Y‾\overline{X}+\overline{Y}⁠:先把两片的反码输出各自取反变回原码,再相或。另一片贡献的是1‾=0\overline{1}=0⁠,不影响结果。

4.3 例题 6:验证两个情况

情况一:A11′=0A_{11}'=0⁠、A5′=0A_5'=0⁠,其余为 1。

  • 片(1):A11′A_{11}'接片(1) 的I3′I_3'(因为11−8=311-8=3⁠),优先编码 3 → 反码Y2′Y1′Y0′=100Y_2'Y_1'Y_0'=100⁠;YEX′=0Y_{EX}'=0⁠,YS′=1Y_S'=1⁠。
  • 片(2):S′=YS′=1S'=Y_S'=1⁠,被封锁,输出 111(⁠A5′A_5'被无视)。
  • Z3=0‾=1Z_3=\overline{0}=1⁠;Z2=1⋅1‾=0Z_2=\overline{1\cdot1}=0⁠;Z1=0⋅1‾=1Z_1=\overline{0\cdot1}=1⁠;Z0=0⋅1‾=1Z_0=\overline{0\cdot1}=1⁠。
  • 结果Z3Z2Z1Z0=1011Z_3Z_2Z_1Z_0=1011⁠,即 11。正确:11 号的优先级比 5 号高。

情况二:只有A5′=0A_5'=0⁠。

  • 片(1) 无输入:Y2′Y1′Y0′=111Y_2'Y_1'Y_0'=111⁠,YS′=0Y_S'=0⁠,YEX′=1Y_{EX}'=1⁠。
  • 片(2):S′=0S'=0工作,编码 5 → 反码 010。
  • Z3=1‾=0Z_3=\overline{1}=0⁠;Z2=1⋅0‾=1Z_2=\overline{1\cdot0}=1⁠;Z1=1⋅1‾=0Z_1=\overline{1\cdot1}=0⁠;Z0=1⋅0‾=1Z_0=\overline{1\cdot0}=1⁠。
  • 结果 0101,即 5。正确。

以上连接已用程序对216=655362^{16}=65536种输入组合全部穷举:每种情况输出都等于"最高优先有效输入的编号"。

4.4 易错点 ⚠️

  • 扩展后的输出ZZ是原码(经过与非门、非门翻转回来了),而单片 74HC148 的输出是反码,别混。
  • 级联方向:高优先级片的YS′Y_S' → 低优先级片的S′S',不能反过来。
  • 全部 16 个输入都无效时,Z=0000Z=0000⁠,与"对A0′A_0'编码"相同;此时可以用片(2) 的YS′=0Y_S'=0来区分(表示整个编码器无输入)。

五、顺带认识:二-十进制优先编码器 74HC147

74HC147 把I1′∼I9′I_1'\sim I_9' 9 个低电平输入编成 BCD 码(第 01 讲下讲过 8421 BCD 码),输出Y3′Y2′Y1′Y0′Y_3'Y_2'Y_1'Y_0'也是反码,I9′I_9'优先级最高。I1′∼I9′I_1'\sim I_9'全为 1 时输出 1111,隐含表示对I0′I_0'编码(所以它没有I0′I_0'引脚)。

例:I7′=0I_7'=0⁠、I3′=0I_3'=0⁠,其余为 1:优先编 7,7 的 BCD 码是 0111,取反输出Y3′Y2′Y1′Y0′=1000Y_3'Y_2'Y_1'Y_0'=1000⁠。

它常用于十个数字键的键盘:按下哪个数字键,就输出这个数字的 BCD 码(反码)。


六、自己设计一个小优先编码器

例题 7:4 线-2 线优先编码器

题目:输入I0∼I3I_0\sim I_3高电平有效,I3I_3优先级最高。输出Y1Y0Y_1Y_0为最高优先有效输入的编号(原码)。没有输入时输出 00(不考虑这种情况,可作无关项)。求最简式。

解:按优先规则列表(× 表示不管):

I3I_3 I2I_2 I1I_1 I0I_0 编码对象 Y1Y_1 Y0Y_0
1 × × × 3 1 1
0 1 × × 2 1 0
0 0 1 × 1 0 1
0 0 0 1 0 0 0
  • Y1=1Y_1=1⁠:编码 3 或 2,即I3=1I_3=1⁠,或I3=0I_3=0且I2=1I_2=1⁠。I3+I3‾I2=I3+I2I_3+\overline{I_3}I_2=I_3+I_2(吸收律A+A‾B=A+BA+\overline{A}B=A+B⁠),所以Y1=I3+I2Y_1=I_3+I_2⁠。
  • Y0=1Y_0=1⁠:编码 3 或 1,即I3+I3‾ I2‾I1=I3+I2‾I1I_3+\overline{I_3}\,\overline{I_2}I_1=I_3+\overline{I_2}I_1⁠。
Y1=I3+I2,Y0=I3+I2‾I1Y_1=I_3+I_2,\qquad Y_0=I_3+\overline{I_2}I_1

对比普通编码器Y0=I1+I3Y_0=I_1+I_3⁠:优先编码器的Y0Y_0多了一个I2‾\overline{I_2}⁠,意思是"I1I_1有效,但比它高的I2I_2没有效才算"。这就是"优先"在式子里的体现(已用卡诺图程序核对)。


七、应用:病房呼叫系统(把功能表用起来)

7.1 题目

某病区有 8 间病房,每间有一个呼叫按钮,按下时输出低电平。病情越重的病房编号越大(7 号最重)。要求:(1)护士站显示"当前应优先处理的病房号"(3 位二进制,原码);(2)只要有任何病房呼叫,护士站的提示灯就亮(灯高电平点亮)。用 74HC148 和必要的门实现。

7.2 思路与解答

  1. 输入:7 号病房按钮接I7′I_7'⁠……0 号接I0′I_0'⁠。按钮按下为低电平,正好符合 74HC148 低电平有效;编号大的优先级高,正好符合I7′I_7'最高。S′S'接地(0),芯片一直工作。
  2. 病房号显示:74HC148 输出的是反码,所以Y2′Y_2'⁠、Y1′Y_1'⁠、Y0′Y_0'各接一个非门,得到原码Y2Y1Y0Y_2Y_1Y_0送去显示。
  3. 提示灯:需要"有呼叫"时为 1。YEX′=0Y_{EX}'=0正好表示"有输入在编码",所以把YEX′Y_{EX}'接一个非门驱动提示灯:L=YEX′‾L=\overline{Y_{EX}'}⁠。

7.3 检验

  • 5 号和 2 号同时呼叫:优先编 5,反码 010,经非门得 101,显示"5";YEX′=0Y_{EX}'=0⁠,灯亮。
  • 只有 0 号呼叫:反码 111,经非门得 000,显示"0";YEX′=0Y_{EX}'=0⁠,灯亮。
  • 没人呼叫:反码 111,显示也是"0",但YEX′=1Y_{EX}'=1⁠,灯灭——护士靠灯就能分清"0 号在呼叫"和"没人呼叫"。

这道题把S′S'⁠、反码、YEX′Y_{EX}'三个考点都用上了,是华师这类"读懂器件 + 简单连线"题的典型样子。

7.4 易错点 ⚠️

  • 别忘了反码要加非门才是"病房号"。
  • 提示灯也可以直接接YS′Y_S'⁠:本题S′S'恒为 0,此时YS′=1Y_S'=1恰好表示"有呼叫"。但如果以后想用S′S'把芯片关掉,S′=1S'=1时YS′Y_S'同样为 1,灯会误亮;所以一般用YEX′‾\overline{Y_{EX}'}更稳妥,它在芯片禁止时为 0,不会误报。
  • 病房号和优先级的对应关系要先想清楚:如果题目改成"编号越小越重",就要把 0 号病房接I7′I_7'⁠、7 号接I0′I_0'⁠,输出的代码还要再换算,不能照搬。

速记卡

项目 要点
编码器 2n2^n个输入 → nn位代码
普通编码器 只许一个输入有效;8 线-3 线:Y2=I4+I5+I6+I7Y_2=I_4+I_5+I_6+I_7⁠,Y1=I2+I3+I6+I7Y_1=I_2+I_3+I_6+I_7⁠,Y0=I1+I3+I5+I7Y_0=I_1+I_3+I_5+I_7
优先编码器 多个输入同时有效时只编最高优先级
74HC148 8 线-3 线;输入、输出低电平有效;I7′I_7'最高;输出反码
S′S' 选通输入,0 工作、1 禁止(输出全 1)
YS′Y_S' 0 = 工作但无输入
YEX′Y_{EX}' 0 = 工作且有输入
读输出口诀 从I7′I_7'往下找第一个 0 → 编号写成 3 位二进制 → 每位取反
两片扩展 高片YS′Y_S'→低片S′S'⁠;Z3=YEX(1)′‾Z_3=\overline{Y_{EX(1)}'}⁠;Zi=Yi(1)′Yi(2)′‾Z_i=\overline{Y_{i(1)}'Y_{i(2)}'}
74HC147 10 线-4 线 BCD 优先编码器,输出反码,I9′I_9'最高

自测练习

1. 8 线-3 线普通编码器(高电平有效)中,若只有I6=1I_6=1⁠,输出Y2Y1Y0Y_2Y_1Y_0是多少?若I2I_2⁠、I4I_4同时为 1 呢?

答案与提示

只有I6=1I_6=1⁠:110。I2I_2⁠、I4I_4同时为 1:Y2=1Y_2=1⁠,Y1=1Y_1=1⁠,Y0=0Y_0=0⁠,输出 110——错误地变成了"6",说明普通编码器不允许多个输入同时有效。

2. 74HC148 中S′=0S'=0⁠,I6′=I2′=0I_6'=I_2'=0⁠,其余为 1。求Y2′Y1′Y0′Y_2'Y_1'Y_0'⁠、YS′Y_S'⁠、YEX′Y_{EX}'⁠。

答案与提示

优先编 6,6 = 110,取反 001。Y2′Y1′Y0′=001Y_2'Y_1'Y_0'=001⁠,YS′=1Y_S'=1⁠,YEX′=0Y_{EX}'=0⁠。

3. 74HC148 中S′=1S'=1⁠,I4′=I2′=0I_4'=I_2'=0⁠。求所有输出。

答案与提示

芯片禁止,全部输出为 1:Y2′Y1′Y0′=111Y_2'Y_1'Y_0'=111⁠,YS′=1Y_S'=1⁠,YEX′=1Y_{EX}'=1⁠。

4. 74HC148 输出Y2′Y1′Y0′=111Y_2'Y_1'Y_0'=111有哪三种可能?如何区分?

答案与提示

(1)S′=1S'=1芯片禁止:YS′=1Y_S'=1⁠,YEX′=1Y_{EX}'=1⁠;(2)工作但无输入:YS′=0Y_S'=0⁠,YEX′=1Y_{EX}'=1⁠;(3)对I0′I_0'编码:YS′=1Y_S'=1⁠,YEX′=0Y_{EX}'=0⁠。

5.(华师真题风格)用两片 74HC148 接成的 16 线-4 线优先编码器(接法同本讲图 3)中,若A14′=A9′=0A_{14}'=A_9'=0⁠,其余输入为 1,写出两片各自的输出和最终的Z3Z2Z1Z0Z_3Z_2Z_1Z_0⁠。

答案与提示

A14′A_{14}'⁠、A9′A_9'都在片(1),分别接I6′I_6'⁠、I1′I_1'⁠,优先编 6 → 片(1) Y2′Y1′Y0′=001Y_2'Y_1'Y_0'=001⁠,YEX′=0Y_{EX}'=0⁠,YS′=1Y_S'=1⁠。片(2) 被封锁,输出 111。Z3=1Z_3=1⁠,Z2=0⋅1‾=1Z_2=\overline{0\cdot1}=1⁠,Z1=0⋅1‾=1Z_1=\overline{0\cdot1}=1⁠,Z0=1⋅1‾=0Z_0=\overline{1\cdot1}=0⁠,Z=1110=14Z=1110=14⁠。已用程序核对。

6. 设计 4 线-2 线优先编码器,但规定I0I_0优先级最高、I3I_3最低(输入高电平有效,输出原码,无输入的情况作无关项)。写出Y1Y_1⁠、Y0Y_0⁠。

答案与提示

规则:I0=1I_0=1编 00;I0=0I_0=0⁠、I1=1I_1=1编 01;I0=I1=0I_0=I_1=0⁠、I2=1I_2=1编 10;只有I3I_3编 11。Y1=I0‾ I1‾(I2+I3)=I0‾ I1‾Y_1=\overline{I_0}\,\overline{I_1}(I_2+I_3)=\overline{I_0}\,\overline{I_1}(利用无输入为无关项:I0=I1=0I_0=I_1=0时I2I_2⁠、I3I_3必有一个为 1);Y0=I0‾I1+I0‾ I1‾ I2‾I3Y_0=\overline{I_0}I_1+\overline{I_0}\,\overline{I_1}\,\overline{I_2}I_3⁠,再用无关项化简为Y0=I0‾I1+I0‾ I2‾Y_0=\overline{I_0}I_1+\overline{I_0}\,\overline{I_2}⁠。提示:把 0000 当无关项后,I0‾ I1‾ I2‾\overline{I_0}\,\overline{I_1}\,\overline{I_2}只剩I3=1I_3=1一种情况。

7. 74HC147 中I9′=1I_9'=1⁠、I8′=0I_8'=0⁠、I5′=0I_5'=0⁠,其余为 1,输出Y3′Y2′Y1′Y0′Y_3'Y_2'Y_1'Y_0'是多少?

答案与提示

优先编 8,8 的 BCD 码 1000,取反 0111。


下一讲预告

第 09 讲(下)讲编码的反操作——译码器:读懂 74HC138 的功能表和三个片选端,学会用它扩展、用它"凑"出任意逻辑函数,并认识驱动数码管的 BCD-七段显示译码器。

👉 点击进入下一讲:第09讲(下)|译码器

评论

还没有评论。 来写第一条。

留下一条评论

选填,不会公开

纯文本,链接会自动识别。