第 156 篇
考研数电·零基础讲义 第16讲(下)|任意进制计数器:置零法、置数法、多片级联
考研数电·零基础讲义 · 第 16 讲(下)|任意进制计数器:置零法、置数法、多片级联 学完这一讲,你能用 74HC161/160 接成任意进制的计数器:会算该译哪个状态、该置什么数,分得清"过渡状态"和"稳定状态",会用两片芯片做大于 16 的进制,并能完整写出 2026 回忆题第 8 题(两片 74HC161 设计模 28 计数器)的四种解法。预计用时 120–150 分钟。
本讲地图
- 核心问题:手里只有 N 进制芯片(161 是 16,160 是 10),要做 M 进制。
- M < N(一片够用):置零法(复位法)、置数法(置位法)。关键是"异步置零译、同步置数译"。
- M > N(要多片):先分解用并行/串行进位;或者先把两片接成一个大计数器,再整体置零、整体置数。
- 华师怎么考:2026 回忆题第 8 题原题——"用两片 74HC161 设计模 28 计数器,用两种不同方法"。本讲第五节给出完整解答(整体置零、整体置数,再补充 7×4 分解法和"置入 228"法),每种都画了连接图并用 Python 逐拍模拟验证。
- 教材对应:第 6 章 6.3.2 节"三、任意进制计数器的构成方法"(例 6.3.2、6.3.3、6.3.4)。
前置知识
- 74HC161/160 的功能表:异步清零 、同步置数 、EP/ET 使能、进位 C(见第 16 讲(中))。这一讲完全建立在它上面,没吃透请先回去看。
- 二进制与十进制、BCD 码互换(见第 01 讲)。
- 与非门:输入全 1 时输出 0(见第 02 讲)。
- 状态转换图的画法(见第 14 讲)。
一、问题是什么:从 N 进制得到 M 进制
1.1 大白话
想象一个 16 格的环形跑道(161 的 16 个状态),你只想跑 12 格就回起点。办法有两个:
- 置零法:跑到第 12 格时,瞬间传送回起点(清零)。第 12 格只踩了一脚就被传走了。
- 置数法:在某一格提前举手,下一步不往前走,而是跳到指定的格子(置数)。
不管哪种,本质都是:在 N 个状态的循环里跳过 N−M 个状态,只留下 M 个。
1.2 两个关键前提(再强调一次)
对 74HC161/160:
| 功能 | 方式 | 后果 |
|---|---|---|
| 清零 | 异步:立即生效,不等时钟 | 被译码的那个状态只"闪一下"——过渡状态 |
| 置数 | 同步:等下一个 CLK 上升沿 | 被译码的那个状态会完整保持一个时钟周期——稳定状态 |
整节课所有"该译哪个状态"的问题,都从这张表推出来。
二、置零法(复位法)
2.1 大白话
从 0 开始数,数到 M 的那一刻,用一个门电路"认出"这个状态(译码),输出低电平去拉,计数器立刻回到 0。
2.2 原理(异步置零)
设计数器从(全 0)开始,接收 M 个脉冲后进入。把译码产生,计数器立刻回到。
- 稳定的循环:,正好 M 个;
- 只在极短的瞬间出现(几十纳秒),不算在循环里,叫过渡状态。在状态转换图上通常用虚线画出它。
口诀:异步置零,译。
如果芯片是同步置零(例如 74LS162、74LS163),清零要等下一个时钟,就要译,而且是稳定状态。
2.3 例题 1:74HC161 用置零法接成十二进制
解:
第 1 步,确定译码状态:异步置零,译。12 的 4 位二进制是。
第 2 步,写译码式。中为 1 的位是、,用与非门:
为什么只取"为 1 的位"就够了? 计数器从 0 往上数,在到达 12 之前(0~11),没有任何一个状态同时满足且(最小的是 12 本身)。所以""第一次出现就一定是 12,不需要再把、也接进去。这样门的输入少、电路简单。
第 3 步,其余接法:(不用置数),,D 端任意。
第 4 步,状态循环(Python 模拟):,稳定状态 12 个,12()是过渡状态。✔
2.4 置零法的缺点
- 可靠性差:置零信号随计数器被清零而立刻消失,持续时间极短。如果几个触发器复位速度有快有慢,慢的那个可能还没清完,信号就没了,导致出错。教材给出的改进办法是加一个 SR 锁存器,把置零信号"拉长"到和计数脉冲高电平一样宽。
- 进位输出不好取:循环里不包含 1111,芯片自带的 C 永远不会出现;而译码门的输出脉冲又太窄,不宜当进位信号,往往要从另外译码。
⚠️ 易错点:异步置零译,不是 ;同步置零才译。考试先看清芯片是哪种。
三、置数法(置位法)
3.1 大白话
在循环中的某个状态提前"举手"(),下一个时钟到来时,计数器不再加 1,而是直接跳到你预先放在上的那个数。跳过了中间若干个状态,就得到了想要的进制。
置数可以从任何状态开始、跳到任何状态,所以方案很灵活。
3.2 原理(同步置数,适用 161/160)
- 从译码产生;
- 下一个 CLK 到来时置入数据;
- 包含在稳定循环里(它完整停留了一个周期)。
如果置入的数是、译码的状态是(加法计数,),那么循环是,状态个数为:
口诀:同步置数,译,个数 = 译码值 − 置入值 + 1。
对异步置数的芯片(如 74HC191/190),一出现就立刻置入,所以要从译码,只是过渡状态。
3.3 例题 2:74HC161 用置数法接成十二进制(两种方案)
方案甲:置入 0000,译
- 由得,即。
- 为 1 的位:、、。在 0~10 中没有同时满足这三位为 1 的状态,所以。
- ,,。
- 循环:,12 个稳定状态,没有过渡状态。✔
方案乙:用进位 C 置数,置入 0100
- 让计数器正常数到 1111,此时 C=1。把 C 经反相器接:在 1111 时,下一拍置入。
- 要 12 个状态:,即置入。
- 循环:,12 个状态。✔(Python 模拟核对)
- 好处:不用自己搭译码门(只要一个反相器),而且 C 本身就是现成的进位输出。
3.4 例题 3:74HC160 接成六进制(教材例 6.3.2 的三种接法)
| 接法 | 译码 | 置入 | 循环 | 能否用 C 作进位 |
|---|---|---|---|---|
| 异步置零 | (6,过渡态) | — | 0~5 | 不能(没有 1001) |
| 同步置数 | (5) | 0000 | 0~5 | 不能 |
| 同步置数 | (4) | 1001 | 0,1,2,3,4,9 | 能(1001 在循环里) |
第三种接法很巧:从 4 跳到 9,循环,仍是 6 个状态,而 1001 在循环里,所以每圈 C 出现一次(三种都已用 Python 模拟核对)。
⚠️ 易错点:
- 同步置数译的是,循环里包含 ;不要按置零法的习惯多加 1。
- 置数法的"六进制"不一定是 0~5,任意连续或跳跃的 6 个状态都行,看 D 和译码怎么配。
- 置入的数要接到上(接 0 就是接地、接 1 就是接高电平),别忘了画。
四、M > N:多片组合
4.1 能分解时:
如果 M 能拆成两个都不超过 N 的因数之积,就先把两片分别接成进制和进制,再用并行进位或串行进位连起来(第 16 讲(中)第五节)。
例如两片 160 直接并行进位 = 10×10 = 100 进制(教材例 6.3.3)。
注意:当某一片被改成了进制时,它的状态循环里往往没有 1111(或 1001),芯片自带的 C 不会出现。这时要用自己的译码信号去控制下一片的 EP、ET(并行)或 CLK(串行)。第五节方法三就是这种情况。
4.2 不能分解或想更省事:整体置零、整体置数
整体置零:先把两片按最简单的方式(例如并行进位)接成进制的"大计数器",计到 M 时译出,两片同时清零。原理和一片的置零法完全一样,只是状态变成了两片合起来的数。
整体置数:同样先接成进制,在选定状态译出,两片同时置入适当的数据。原理和一片的置数法一样。
当 M 是大于 N 的质数(如 29)时,只能用这两种方法;M 不是质数时当然也可以用。
4.3 关键一步:把十进制数换成"两片的状态"
这是最容易错的地方!
- 两片 161 并行:整体是 8 位二进制,状态值 = 高位片 × 16 + 低位片。例如 28 = 1×16 + 12 → 高位片 0001、低位片 1100。
- 两片 160 并行:整体是两位 BCD,状态值 = 高位片 × 10 + 低位片。例如 28 → 高位片 0010(2)、低位片 1000(8)。
同一个 28,用 161 和用 160 译码的位完全不同!
为书写方便,下面用表示高位片(第 2 片)的输出,表示低位片(第 1 片)的输出。
五、2026 回忆题第 8 题:两片 74HC161 设计模 28 计数器
2026 回忆题第 8 题:用两片 74HC161 设计模 28 计数器,用两种不同方法。
5.0 审题与准备
- 74HC161 是十六进制,28 > 16,所以必须两片。
- 28 = 4 × 7,能分解;也可以用整体置零、整体置数。题目要"两种不同方法",最稳妥的组合是整体置零 + 整体置数(教材正统方法),想多拿印象分可以再写分解法。
- 两片先并行进位接成 256 进制:两片 CLK 接同一脉冲,低位片 EP=ET=1,低位片 C 接高位片 EP、ET。
- 换算(161,状态值 = 高×16 + 低):
| 十进制 | 高位片 | 低位片 |
|---|---|---|
| 27 | 0001 | 1011 |
| 28 | 0001 | 1100 |
5.1 方法一:整体置零法(异步)
第 1 步:选译码状态。 74HC161 是异步置零,译 = 0001 1100。
第 2 步:写译码式。 为 1 的位是、、:
检查"只取为 1 的位"是否安全:在 0~27 中,高位片为 0001 的是 16~27,其低位片为 0000~1011,没有一个同时满足;高位片为 0000 时。所以这三位同时为 1 第一次出现就是 28。(Python 穷举确认 0~27 中没有满足这三位全 1 的状态。)
第 3 步:其余接法。 与非门 G 的输出同时接两片的;两片;D 端不用;低位片 EP=ET=1;低位片 C 接高位片 EP、ET;CLK 共用。
图 1:方法一,整体置零法。G 认出 28(0001 1100)后立刻把两片同时清零
第 4 步:工作过程。 从 0 开始,低位片每拍加 1;低位片到 1111(15)时 C=1,下一拍高位片加 1、低位片回 0,整体变成 16;继续数到 27(0001 1011);再来一个脉冲进入 28(0001 1100),G 输出 0,立刻清零回到 0。
第 5 步:验证(Python 逐拍模拟)。 稳定循环,共 28 个状态;28 是过渡状态。此外从 256 个可能的上电初态出发,全部都会进入这个循环(能自启动)。
第 6 步:说明不足。 置零信号极短,可靠性较差;循环中高位片不会出现 1111,两片的 C 都不能作进位输出。如果要一个宽度为一个时钟周期的进位信号,需另外从 27 译码。
5.2 方法二:整体置数法(同步)
第 1 步:选译码状态和置入值。 置入 0(两片 D 全接 0),由得 = 0001 1011。
第 2 步:写译码式。 为 1 的位是、、、:
检查:0~27 中满足这四位全为 1 的只有 27 本身(Python 穷举确认)。
第 3 步:其余接法。 与非门 G 的输出同时接两片的;两片;两片;并行进位与 CLK 接法同方法一。
图 2:方法二,整体置数法。G 认出 27(0001 1011),下一个时钟两片同时置入 0000
第 4 步:工作过程。 数到 27 时 G 输出 0,,但此时还不变;第 28 个脉冲的上升沿到来,两片同时装入 0000,回到 0。注意:在 27 时低位片是 1011,不是 1111,所以 C(1)=0、高位片在这一拍不会被"计数"打扰——不过就算 C(1)=1 也没关系,因为置数优先于计数。
第 5 步:验证。 稳定循环 0~27,共 28 个状态,没有过渡状态;从任意初态出发都能进入循环。
第 6 步:优点。 置数是同步的,已稳定地保持了一整个周期,不存在置零法"信号太短"的问题;而且 G 的输出在 27 时为低、宽度正好一个时钟周期,可以直接作为进位输出(每 28 个脉冲一个负脉冲)。
5.3 方法三(补充):分解为 7 × 4
28 = 7 × 4。让低位片接成七进制、高位片接成四进制,再"并行"连起来:
低位片(七进制,0~6):同步置数,置入 0000,译 = 0110。为 1 的位、,在 0~5 中没有同时为 1 的,所以:
(这个与非门记作 G1。)
进位(低位片"满 6"时让高位片计一下):低位片永远到不了 1111,它的 C 用不上。改用 G1 的输出取反:
(G1 后面接一个反相器 G2 就得到 Y。)
把 Y 接高位片的 EP 和 ET。只有低位片停在 6 的那一拍,Y=1,高位片才在下一个上升沿加 1——此时低位片同时被置回 0。
高位片(四进制,0~3):也用同步置数置 0。但要注意:高位片应在"自己是 3 并且低位片是 6"那一拍回 0(否则高位片一到 3 就立刻回 0,3 只停留一拍)。所以:
(这个三输入与非门记作 G3。)
两片,D 全接 0,CLK 共用,低位片 EP=ET=1。
图 3:方法三,低位片七进制、高位片四进制,G2 输出的 Y 起"进位使能"作用
验证(Python 逐拍模拟,记作"高位片,低位片"):
一共 4 × 7 = 28 个不同状态后回到起点,是模 28 计数器。✔ 注意:这种接法下两片合起来的 8 位并不是 0~27 的自然二进制(例如第 7 拍是"高 1、低 0"即 0001 0000),但作为计数器/分频器,它每 28 个脉冲循环一次,完全满足"模 28"。G3 的输出在 (3,6) 时为低,可作为进位输出。
5.4 方法四(补充):用进位 C 置数,置入 228
两片 161 并行进位是 256 进制。仿照例题 2 的方案乙:让它正常数到 255(两片都 1111),此时高位片 C(2)=1(因为高位片全 1,而 ET(2)=C(1)=1)。把 C(2) 经反相器接两片的,下一拍置入:
即高位片,低位片。
图 4:方法四,C(2) 在 255 时为 1,反相后令两片同时置入 228
验证:循环,共 255 − 228 + 1 = 28 个状态。✔ 优点是一个译码门都不用,只要一个反相器;C(2) 本身就是现成的进位输出。小缺点:如果上电时计数器在 0~227 之间,要先数到 255 才进入循环(最多 228 拍,Python 从 0 出发正是第 228 拍到达 228),所以通常在开机时先用或置数把它放进循环。
5.5 四种方法对比
| 方法 | 译码 / 控制 | 稳定循环 | 过渡态 | 进位输出 | 评价 |
|---|---|---|---|---|---|
| 一 整体置零 | 0~27 | 28 | 需另译 27 | 简单,可靠性较差 | |
| 二 整体置数 | ,D=0 | 0~27 | 无 | G 输出即可 | 推荐 |
| 三 7×4 | G1、G2、G3 三个门 | 28 个 (高,低) 组合 | 无 | G3 输出 | 门多,体现分解思想 |
| 四 置 228 | C(2) 反相接 | 228~255 | 无 | C(2) | 元件最少 |
以上四种接法全部用 Python 按 74HC161 功能表逐拍模拟过,循环长度都是 28(验算脚本 verify/16c-anymod.py)。
5.6 考场答题模板
写这类题,按下面的顺序写,步骤分一分不丢:
- 分析:161 为十六进制、异步清零、同步置数;28 > 16,需两片;先并行进位接成 256 进制。
- 方法一(整体置零):异步置零译 = 0001 1100,;说明 28 为过渡态,有效循环 0~27。画图。
- 方法二(整体置数):同步置数译 = 0001 1011,,D 全 0;有效循环 0~27。画图。
- 每种方法都写一句状态循环(可画简化状态图:0 → 1 → … → 27 → 0,方法一在 27 后虚线经 28 回 0)。
- 画图时每个端子都要交代:、、EP、ET、CLK、D 端、C,不用的端子接 1 或标"任意"。
六、易错点汇总 ⚠️
- 异步置零译,同步置数译()。最常见的错误是把两者搞反。
- 两片 161 用 ×16 换算,两片 160 用 ×10(BCD)换算。用 160 做 28 要译 0010 1000(置数时译 27 = 0010 0111),不是 0001 1100。
- 整体置零/置数时,译码门输出要同时接两片;只接一片会出错。
- 只取"为 1 的位"作译码时,要确认在到达该状态之前没有别的状态也满足;不放心就把全部位(含取反的位)都接上。
- 片被改成小于 N 进制后,芯片自带的 C 可能永远不出现,进位要自己译。
- 不用的控制端(、、EP、ET)要接确定的电平,不能空着不画。
速记卡
| 场景 | 做法 |
|---|---|
| 161/160 异步置零 | 译;为过渡态;可靠性差 |
| 74LS162/163 同步置零 | 译 |
| 161/160 同步置数 | 译,置,;无过渡态 |
| 191/190 异步置数 | 译(过渡态) |
| 用 C 置数(161) | C 反相接,置(两片:) |
| M = N1×N2 | 分别接成 N1、N2 进制,再并行/串行进位 |
| M 为质数或任意 | 整体置零 / 整体置数 |
| 模 28(两片 161) | 置零:;置数:,D=0 |
| 换算 | 161:高×16+低;160:高×10+低(BCD) |
自测练习
1. 一片 74HC161,、,把、接到一个两输入与非门,输出接。这是几进制计数器?
答案与提示
第一次出现在 1001(9),异步清零,9 为过渡态,循环 0~8,九进制(Python 模拟确认)。
2. 用一片 74HC161 的进位 C 经反相器接,构成九进制计数器。D 端应接什么?循环是哪些状态?
答案与提示
,即。循环,共 9 个状态。
3. 用两片 74HC161 以整体置数法(置入 0)构成五十进制计数器。写出的表达式。
答案与提示
译:49 = 3×16 + 1 = 0011 0001。为 1 的位:、、,0~49 中只有 49 满足这三位全 1(Python 确认)。,两片 D 全接 0。
4. 用两片 74HC161 以整体置零法构成六十进制计数器。写出表达式,并指出过渡状态。
答案与提示
译:60 = 3×16 + 12 = 0011 1100。,过渡状态 60,有效循环 0~59(Python 模拟循环长度 60)。
5. 用两片 74HC160 构成二十九进制计数器(教材例 6.3.4 同型)。分别写出整体置零和整体置数(置入 0)时的译码式。
答案与提示
160 用 BCD 换算。整体置零译 29 = 0010 1001:;整体置数译 28 = 0010 1000:(0~28 中只有 28 满足这两位为 1)。两种接法 Python 模拟循环长度均为 29。
6. 74HC191 是异步置数的十六进制计数器。若要用"置入 0000"的方法接成十进制(加法计数),应从哪个状态译码?循环中有没有这个状态?
答案与提示
异步置数要从译码:有效循环 0~9,应译 1010(10),。1010 只是过渡状态,不在稳定循环中(模拟:循环 0~9,过渡态 10)。
7.(华师真题同型) 用两片 74HC161 设计一个模 28 计数器,要求用整体置数法,并使进位输出信号宽度为一个时钟周期。写出译码式,说明进位从哪里引出。
答案与提示
(译 27 = 0001 1011),两片 D 全 0。与非门输出在 27 期间为低电平,持续一个时钟周期,可直接作进位输出(低电平有效);也可以再加一个反相器得到高电平有效的进位脉冲。
下一讲预告
第 17 讲(上)我们把方向反过来:不再"分析"电路,而是从一句文字要求出发设计同步时序电路——逻辑抽象、画状态转换图、状态化简、状态分配。
👉 点击进入下一讲:第17讲(上)|同步时序电路设计:状态化简与编码
评论
还没有评论。 来写第一条。