数字电子技术基础(四十五)——减法器

目录

1 减法器

1.1 半减器

1.2 全减器

1.3 多位减法器


1 减法器

在数字电路中,除了有加法器还有减法器。减法器是一种执行减法运算的数字电路和逻辑器件,主要是用于计算两个二进制数之间的差。与加法器类似,减法器也可以分为半减器和全减器。

1.1 半减器

半减器是处理两个1位二进制的差,并且处理借位。半减器不能处理来自低位的借位,因此仅适用于最低位的减法。

考虑使用电路来实现一位减法,输入的两个二进制数A和B,其中A为被减数,B为减数。输出两个二进制数S和C,其中S表示A减去B的结果,C表示是否向高位借位。

  • 当A=0,B=0时,S=0,C=0。
  • 当A=0,B=1时,S=1,需要向高位借位,C=1。
  • 当A=1,B=0时,S=1,C=0。
  • 当A=1,B=1时,S=0,C=0。

根据上述内容可以列出真值表得:

表1 半减器的真值表
ABSC
0000
0111
1010
1100

根据真值表可以推出逻辑式为:

                                                                    S=A\bigoplus B

                                                                    C=A'B 

电路图如下所示:

图1 半减器的电路结构

运行该电路,当A=0,B=1时,电路如下所示:

图2 当A=0、B=1半减器的输出情况

通过电路可以看到S为1,CO为1,符合半减器的真值表。

当A=1,B=0时,电路如下所示:

图3 当A=1、B=0半减器的输出情况

通过电路可以看到S为1,CO为0,符合半减器的真值表。

将其保存为半减器文件,可以作为全减器的子电路。如下所示:

图4 将半减器电路进行保存

1.2 全减器

全减器是计算两个二进制之间的差,并且考虑低位的借位。全减器输出减法的结果并且处理借位。

考虑如何使用电路来时实现一位全减器,输入了三个变量A、B、CI,其中A为被减数,B为减数,CI为来自低位的借位,输出三个变量,其中S为相减后结果,CO为是否要向高位借位。真值表如下所示:

表2 全减器的真值表
ABCISCO
00000
00111
01011
01101
10010
10100
11000
11111

利用子电路半减器来实现全减器的电路图如下所示:

图5 利用半减器来实现全减器的电路

运行该电路,当A=0,B=0,有低位的借位,即CI=1,此时电路如下所示:

图6 当A=0、B=0、CI=1全减器输出情况

输出结果为S=1,CO=1,符合全减器运算结果。

当A=1,B=0,无低位的借位,即CI=0,此时电路如下所示:

图7 当A=1、B=0、CI=0全减器输出情况

输出结果为S=1,CO=0,符合全减器运算结果。

当A=1,B=1,有低位的进位,即CI=1,此时电路如下所示:

图8 A=1、B=1、CI=1全减器输出情况

输出结果为S=1,CO=1,符合全减器的运算结果。

将其保存为全减器文件,可以作为多位减法器的子电路。如下所示:

图9 将全减器进行保存

另一种构建全减器的方式是直接使用Digital软件中的组件,点击组件选项栏中的运算器,之后点击运算器中减法器,然后将引脚A、B和CI分别连接输入,引脚S和CO连接输出。如下所示:

图10 利用Digital软件中减法器组件实现的电路

当A=0,B=1,有低位的借位,即CI=1,如下所示:

图11 当A=0、B=1、CI=1减法器输出情况

输出S为0,CO为1,符合减法器运算结果。

当A=1,B=1,无低位的借位,即CI=0,如下所示:

图12 当A=1、B=1、CI=0减法器输出情况

输出S为0,CO为0,符合减法器运算结果。

1.3 多位减法器

多位减法器是一种能够对多位二进制数进行减法运算的数字电路。

与多位加法器类似,可以使用Digital软件来实现多位减法器,选择全减器作为子选择器,输入变量A和B连接分裂器,分裂器连接四个隧道,输出变量S连接合并器,合并器连接隧道,如下所示为各个元器件示意图:

图13 多位减法器各个元器件

首个的全减器的引脚CI接地,将引脚CO接下一个全减器的引脚CI,依次连接,然后最后一个全减器的引脚CO接输出CO。

连接电路如下所示:

图14 利用全减器实现多位减法器

当A输入为4,B输入为2,电路如下所示:

图15 当A=4、B=2,减法器的输出情况

可以看到S=2、CO=0,符合减法运算。

当A=7、B=2时,电路如下所示:

图16 当A=7、B=2多位减法器的输出情况

可以看到S=5,CO=0,符合减法运算。

 当A=13(十六进制的D)、B=6时,电路如下所示:

图17 当A=13、B=6多位减法器的输出情况

可以看到S=7,CO=0,符合减法运算。

 当A=3,B=6时,电路如下所示:

图18 当A=3、B=6多位减法器的输出情况

可以看到S=13(十六进制的D),CO=1,产生了向高位借位,符合减法运算。

当A=6、B=8,电路如下所示:

图19 A=6、B=8多位减法器的输出情况

可以看到S=14(十六进制的E),CO=1,产生了高位借位,符合减法运算。

当 A=10(十六进制的A)、B=14(十六进制的E)时,电路如下所示:

图20 当A=10、B=14多位减法器的输出情况

可以看到S=12(十六进制的C),CO=1,产生了高位借位,符合减法运算。 

或者可以使用Digital软件中组件中的全减器来实现多位减法器。打开Digital软件,点击组件选项栏中的运算器,然后点击运算器选项栏中的减法器,最终电路如下所示:

图21 使用Digital软件实现的多位减法器

运行该电路,当A=4,B=2时,电路的输出情况如下所示:

图22 当A=4、B=2多位减法器的输出情况

可以看到S=2,CO=0,符合减法运算结果。

当A=5、B=11(十六进制的B),电路如下所示:

图23 当A=5、B=11多位减法器的输出情况

 可以看到S=10(十六进制的A),CO=1,产生了高位借位,符合减法结果。

<think>好的,我需要回答用户关于单片机中实现减法器电路的设计与原理的问题。首先,我得回忆一下单片机的基本结构,尤其是如何进行算术运算的部分。记得单片机内部有ALU(算术逻辑单元),负责处理加减乘除等运算,所以减法器可能是通过ALU实现的。 接下来,用户提到的减法器电路设计,可能需要考虑硬件层面的实现,比如使用逻辑门电路或者通过单片机的外部扩展。但大部分情况下,单片机内部的ALU已经能够处理减法操作,所以设计减法器可能更多是通过软件编程来实现,比如使用C语言中的减法指令。 然后,我需要查阅相关的引用资料。引用3提到单片机加减法的C语言实现,以及逻辑判断的宏调用,这可能涉及到如何通过编程实现减法运算,并处理进位或借位标志。引用2提到了电路设计图和连接,可能涉及到外部的减法电路设计,比如使用全减器或者半减器芯片,通过单片机控制这些外部电路。 另外,引用4和5讨论了51单片机和STM32的内部结构及程序流程,这可能帮助解释单片机如何通过内部指令集执行减法操作。例如,51单片机有SUBB指令,用于带借位的减法,需要处理标志寄存器中的借位位。 用户的问题可能分为两部分:硬件电路设计和软件实现原理。硬件方面,可能需要设计外部减法电路,使用如74LS系列的全减器芯片,通过单片机的IO口控制输入和读取输出。软件方面,则是利用单片机的指令直接进行减法运算,处理相关标志位。 需要注意的是,单片机通常内部已经具备减法功能,所以外部减法器电路的设计可能是在特定需求下,比如需要更高速度、更复杂的运算或者扩展位数时才考虑。否则,直接使用内部ALU更为高效。 最后,生成相关问题时要围绕减法器的实现方式、硬件设计、软件编程、优化方法以及应用场景等方面提问,帮助用户进一步深入理解。</think>### 单片机减法器电路设计与原理分步说明 #### 1. **硬件实现方案(基于外部逻辑电路)** 若需通过外部电路实现减法器,可采用全减器芯片(如$74LS382$)或组合逻辑门电路(异或门、与门、非门)构建。设计步骤如下: 1. **输入接口**:将单片机I/O口(如$P1.0-P1.7$)连接到减法器的被减数、减数输入端[^2]。 2. **逻辑电路设计**: - **半减器**:输出差位$D = A \oplus B$,借位$B_{out} = \overline{A} \cdot B$ - **全减器**:扩展借位处理,公式为 $$D = (A \oplus B) \oplus B_{in}$$ $$B_{out} = (\overline{A} \cdot B) + (\overline{A \oplus B} \cdot B_{in})$$ 3. **输出接口**:将差值和借位信号通过I/O口回传单片机,需添加电平转换或锁存器(如$74HC573$)确保信号稳定[^4]。 #### 2. **软件实现方案(基于单片机内部ALU)** 单片机内部通过指令直接完成减法运算,无需外部电路: - **汇编指令**:51单片机使用`SUBB A, #data`指令实现带借位减法,运算结果影响PSW寄存器中的CY(借位标志)和AC(辅助进位标志)[^3]。 - **C语言实现**: ```c uint8_t a = 0x25, b = 0x17; uint8_t result = a - b; // 直接调用ALU ``` 编译器自动处理借位和标志位更新。 #### 3. **混合模式(硬件加速)** 针对多精度减法(如16/32位),可结合硬件与软件: 1. 使用外部加法器芯片实现补码运算(减法转为加法)。 2. 单片机控制高低位分段计算,通过循环处理借位[^5]。 --- ### 设计要点对比表 | 方案 | 优点 | 缺点 | 适用场景 | |--------------|-----------------------|-----------------------|---------------------| | 外部逻辑电路 | 并行计算,速度快 | 占用I/O资源,复杂度高 | 高速专用减法场景 | | 内部ALU | 资源占用少,开发简单 | 依赖单片机算力 | 通用嵌入式系统 | | 混合模式 | 平衡速度与灵活性 | 需软硬件协同设计 | 多精度/大数运算 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每月一号准时摆烂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值