我刚开始接触电子产品,已经很着迷了。在过去几天玩过 Arduino 之后,我知道二进制是不同电压的表示 - 例如 +5V 表示1
和 GND 表示0
。
我一直在尝试发现微控制器如何在物理层面上将二进制转换为这些电压。我似乎无法在任何地方找到描述。任何人都可以分享他们的知识或向我指出一本描述其工作原理的地方/好书吗?
我刚开始接触电子产品,已经很着迷了。在过去几天玩过 Arduino 之后,我知道二进制是不同电压的表示 - 例如 +5V 表示1
和 GND 表示0
。
我一直在尝试发现微控制器如何在物理层面上将二进制转换为这些电压。我似乎无法在任何地方找到描述。任何人都可以分享他们的知识或向我指出一本描述其工作原理的地方/好书吗?
我想以稍微不同的方式重述 KellenJB 的部分答案:
没有从二进制 1 和 0 到 5 V 和 0 V 等电压的转换。微控制器或任何物理电路仅在这些电压上运行。
当我们在脑海中形成一个关于电路如何工作的简化模型时,这些电压在我们的头脑中被“转换”为二进制 1 和 0。
并没有真正发生“转换”。二进制 1 和 0 只是底层电压的虚拟表示。事实上,在许多系统中,高电压可能意味着 0,而低电压意味着 1。这样做是有一些原因的,但可能比您更早地深入研究这一点更重要。
要了解逻辑中发生了什么,最好查看晶体管。晶体管可以用于许多事情,但在简单的层面上,您可以将其视为开关。从概念上讲,您可以将其视为墙上的电灯开关,但不是通过物理移动开关来控制它,而是通过电流变化来控制。您可以将灯打开视为 1,将灯关闭视为 0。现在您可以开始将这些开关组合成不同的集合以创建不同的逻辑元素(如 AND、OR、NOR 等)。
我知道我的回答不是很详细,但我希望它能回答你的问题。如果您需要更多解释,我愿意添加更多细节,只是不想让您不知所措。
简短的回答是它不会“转换”,电压是二进制(或它的表示)。就像你在一些纸上写一个数字,标记是数字的表示,或者在算盘上算,石头的位置是数字的表示。
二进制是一个数字系统,就像十进制(或八进制、十六进制等)
而十进制(base-10)有 10 个符号(0123456789)二进制(base-2)只有两个(01)
任何底数中的 10 表示底数的第一次幂,因此十进制的 10 表示 10^1 = 10,二进制表示 2^1 = 2。接下来,十进制的 100 表示 10^2 = 100,并且二进制表示 2^2 = 4。依此类推。
使用电子表示十进制是可能的,但很复杂,所以他们选择了二进制,可以用简单的 0 和 1(或开/关)表示
。这方面有一些变化,比如三元(3 个状态)系统,当然还有模拟计算。在晶体管之前,有机械打卡机(谷歌知道很多,如果你有时间,一些非常有趣的读物)
最早的二进制数字计算机是用真正的开关(电子继电器)制成的。Zuse Z3 ( 1941) 就是一个例子:
在此之后,使用真空管代替继电器(可以在没有移动机械部件的情况下更快地切换),它代替继电器执行切换。ENIAC是用真空管制成的早期计算机的一个例子 。
然后在 60 年代晶体管问世,IC 之后不久。晶体管的功能与早期机器中的继电器/阀门相同,但体积更小、速度更快且功耗更低。
二进制计算机电路基本工作方式背后的实际理论根本没有改变,就像我们没有改变我们在数学中处理数字的方式一样——算法有所改进,但基本规则保持不变。
因此,如果您知道二进制是如何工作的,并且您有一个能够将 1 或 0 存储为两个不同电压电平(例如 5V 和 0v)的简单电路,以及可以执行简单逻辑功能(如 AND 和 OR)的其他简单电路,那么您可以将它们全部组合起来做更复杂的事情。
由于所有这些二进制电路本质上只是开关,因此您可以使用可以在机械/继电器/阀门/晶体管/?等两种状态之间交替的任何东西来实现相同的目的。
举一个用二进制存储数字的例子,假设我们有 8 个开关(它们是什么类型并不重要)
1 用 5V 表示,0 用 0V 表示。
我们要存储数字 123。
十进制是 123 = (1 X 10^2) + (2 * 10^1) + (3 x 10^0)
二进制是 01111011 = (0 x 2^7) + (1 x 2^6) + (1 x 2^5) + (1 x 2^4) + (1 x 2^3) + (0 x 2^2) + (1 x 2^1) + (1 x 2^0)
所以所有我们所做的是将开关 0、1、3、4、5、6 设置为 5V,将开关 7 和 2 设置为 0V。这以二进制“存储”数字 123。这种设置将被称为“寄存器”。
如果您想了解更多关于如何组合开关以形成更复杂电路的信息,请给自己找一本关于数字逻辑的好书或询问谷歌。
这个网站似乎并没有太糟糕开始。
您正在运行的程序使用代表 1 和 0 的电压。关于该数字部分的一切都是接近接地或接近电源电压(在您的示例中为 5V)的电压。当您使用 0xFF 加载处理器寄存器时,假设您正在芯片的某处创建 8 个单独的 5Volt 信号。然后,当您将该寄存器值存储在与输出端口相关的控制寄存器中时,设备上的输出引脚处理器寄存器中的 5V 信号会导致创建连接到设备外部引脚的其他 5V 信号.