Active High 和 Active Low 信号如何在嵌入式系统中工作?

电器工程 微控制器
2022-01-24 21:29:46

这是关于微控制器的一般工作方式。

我们所做的编程由编译器转换为 1 和 0,然后将这些机器可理解的代码加载到微控制器中。

微控制器对此有何反应。我的意思是这些 1 和 0 是否由 DAC 转换为相应的逻辑电压(5v 和 0)?如果是这样,那么这小块硅片如何决定如何处理这些 5v 和 0v 的各种组合?

我知道每一个 IC 都是由逻辑门组成的,这些门是由晶体管组成的。那么这些晶体管如何响应 5v 和 0v 的各种组合呢?

是什么让他们寻找这些逻辑......我的意思是他们在开机时如何监控这些指令?

所以肯定有一个操作系统加载到MCU中,告诉它处理以及如何处理这些指令,不是吗?

接下来是..考虑一个计时器..它只是一个在每个时钟周期后递增一个的寄存器..操作系统不是再次指示MCU在每个时钟后递增吗?我对吗?在那种情况下,操作系统的所有代码都是用什么语言编写的?

我可以继续我的工作,为不同的任务对 mcu 进行编程,但今天我很想知道这台机器是如何理解我的代码的。

抱歉,我的问题读起来很长。请帮助我学习这些基本知识。

提前致谢..

4个回答

无需使用 DAC。按照惯例,电压用于表示 1 和 0,任何低于 0.8V(AKA '低')的东西都是零,任何超过 2.4V(AKA '高')的东西都是 1。构建在这些代表性电压上执行逻辑的电路相对简单。

例如,如果任一输入超过 2.4V,或者低于 0.8V,并且您有一个或门,则电路可以输出 2.4V 到 5V 范围内的东西来表示“1”。如果它需要两个输入都代表 1 才能输出 2.4V,则您有一个与门。当输入为低时,反相器仅输出高,反之亦然。您可以用很少的晶体管构建像这样的简单门,并执行组合布尔逻辑。通过使用比特组来表示数字,您甚至可以构建电路以使用组合逻辑来添加数字,而无需软件。

一旦你使用了门,你就可以构造触发器,并从中构造寄存器和计数器。触发器允许您从一个时间点存储 1 和 0,并在以后使用它们。寄存器和计数器是在代表数字的位组上执行功能的电路。寄存器保存一个数字,直到您将一个新数字加载到其中。计数器就像一个寄存器,但有另一个输入会导致存储的数字增加。(减量也是可能的)。这使您进入状态机和时序逻辑领域,仍然不需要软件。

内存系统是一种存储大量比特的方法。在组件级别,一些内存就像一个巨大的触发器集合,但更常见的是另一种技术(DRAM),虽然不完全是触发器,但做同样的事情。

作为进一步的步骤,您可以构建一个顺序和组合逻辑系统,该系统可以根据存储在内存系统中的位执行操作,包括将新值写回该内存系统。现在你已经到了处理器的层次,处理器所做的一切都只是执行许多简单任务的硬件。(尽管有微程序内核)。此时,您放入内存系统的特定位组合可以被视为机器语言软件。

获取Charles Petzold 的《代码:计算机硬件和软件的隐藏语言》一书。它很棒,易于阅读,并且会回答许多这些问题。

如果您买不起 Petzold 的书,请查看Roger Young 的“计算机如何工作”它涵盖了许多相同的内容,并且 HTML 和 PDF 版本是免费的。

考虑 NPN BJT;一个晶体管。最早发现的之一。

现在你把它连接起来,使集电极连接到可变逻辑输入,发射极连接到另一个逻辑输入,并串联一个电阻。然后,从发射极到地的电阻。

               logic
                 |
         10k   |/
logic --/\/\/--|  NPN
               |>
                 +-- output
                 |
                 /
                 \ 10k
                 /
                 |
                ---
                 -

您刚刚构建了一个与门。仅当两个输入都为高时,输出才为高。它无论如何都不是完美的,因为它取决于收集器的输入,并且因为它不能很好地扇出,但它让您了解如何使用晶体管来计算函数。

然后,你也可以构造一个非门;

                5V
                 |
                 /
                 \  10k
                 /
                 +-- output
                 |
         10k   |/
logic --/\/\/--|  NPN
               |>
                 |
                ---
                 -

将它添加到刚刚构建的 AND 门的输出中,我们得到了一个 NAND 门,您可能知道使用 NAND 门可以构建任何形式的逻辑。它还具有信号被缓冲的优点,增加了扇出和链接能力。

真正的处理器很少使用 BJT,而是使用 CMOS 逻辑,但同样的原理也适用。

也许您应该查找一些数字系统参考资料或研究 VHDL 之类的东西。MCU基本上是用构建块设计的,它可以是各种逻辑门和(更小的)构建块。最终,这一切都归结为确实由晶体管组成的逻辑门。像 PIC18F 之类的典型简单 MCU 或其他东西不运行操作系统。您加载到其中的程序是 PIC 连续运行的一堆机器指令。所有的处理都是由硬件完成的。

一个通用处理器通常有一个 ALU(计算某条指令的结果)和围绕它的更多块,用于加载指令、管理堆栈和管理内存。proccesor 有一些寄存器可以自己使用,主要用于加载输入和存储结果。你可能在 C 或其他语言中看不到很多,但在汇编中看到很多。

ALU 处理带有特定操作码和输入的指令。例如,一条典型的指令可以是 ADD 12 1 ,这意味着 12+1 = 13。结果存储在处理器本身的寄存器中。

根据架构,ALU 例如为 8 位宽。一个简单的 8 位加法器可以由捆绑在一起的 8 个 1 位加法器组成(使用块来构建更大的块)。使用布尔代数可以轻松地将 1 位加法器写入逻辑门。仅使用逻辑门手动编写整个 8 位加法器将是一项疯狂的工作。这就像编写一个程序而根本无法使用任何函数或子例程。

为了使数字系统正常工作,大多数模块都设计为基于时钟的。每个数字系统都需要一定的时间才能达到其最终状态。这是由于晶体管的切换延迟和影响其他状态的状态。时钟信号是你应该熟悉的东西,处理器运行的速度。计时器可以是一个非常简单的设备,它有一个小加法器块,每次得到时钟滴答时就递增 1。