在之前的文章中,我们详细研究了不同类型的逻辑门,探讨了它们的理论和实际应用。在接下来的部分中,我们将通过使用微控制器(MCU)进行专门的实施,深入到构建逻辑门系统的实践中。这一项目代表了学习中有形的且具有吸引力的一步,它不仅提供了一个将之前学到的理论概念付诸实践的机会,而且还提供了一个加深对真值表理解的有用练习。我们将尤其重点关注逻辑系统的编程,为相关爱好者和学生提供一个发展超越理论的实践技能的难得机会。通过这种综合方法,我们的目标是提供一个关于逻辑门的全面而深入的视角,将理论与实践相结合,以获得更丰富、更有意义的学习。
电子学的应用已经成为我们生活的一部分,没有它们几乎不可能生活。而MCU有助于我们理解逻辑门的功能。通过基于MCU的系统,可以演示逻辑门和布尔代数的运行。此外,您还会发现提供条件和比较操作的编程语言与基于逻辑门的真实系统相差无几。通过使用控制逻辑门的LED和开关进行仿真来了解逻辑门的功能是一种很强大的学习辅助工具。
我们要创建的MCU系统包括OR(或)、AND(与)、NAND(与非)、NOR(或非)、XOR(异或)和NOT(非)逻辑门。高逻辑电平由符号“1”表示,而低逻辑电平由符号“0”表示。“1”符号与5V正电压相关(在本例中),而“0”符号与0V电压相关,接地。MCU和微处理器可以极其轻松地处理这些符号:事实上,它们的运行正是基于这种数字逻辑,并且它们的设计就是为处理这种电压差异而构建的。NOT门有一个输入和一个输出,而其他门可以有两个或多个输入和一个输出。
让我们回顾一下MCU系统中逻辑门的工作原理。OR逻辑门提供两个或多个逻辑信号的输入,并且如果至少一个信号等于“1”则返回值“1”。如果所有信号均为“0”,则输出为“0”。AND逻辑门提供两个或多个逻辑信号的输入,并且仅当所有输入信号都等于“1”时才在输出处返回值“1”;否则,返回值“0”。 NAND逻辑门的操作与AND门等效,但其输出是反相的。NOR逻辑门的操作与OR门等效,但其输出是反相的。XOR逻辑门仅当输入之一为“1”时,异或门才返回逻辑值“1”。最后,NOT逻辑门代表一个反相器,并提供否定的逻辑运算。它接收信号作为输入,并返回其负值作为输出。
逻辑门所有结果的汇总包含在图1的真值表中,该表非常清楚地描述了输入和相关输出的逻辑状态。MCU编程不仅涉及理解与逻辑门相关的真值表,还涉及使用合适的编程语言在MCU中实际实现它。该过程的这一关键阶段可将逻辑门的逻辑转换为可执行指令,确保MCU始终一致且精确地执行编程人员所定义的逻辑运算。
由于我们即将构建的硬件系统,与逻辑门结果的直接交互提供了实际且有形的学习。通过我们的仿真器对电信号的具体操作极大地有助于巩固对理论的理解,使电子和编程爱好者享受到更加有吸引力和有效的教育体验。
图1:MCU系统中使用的逻辑门的真值表
通过一个MCU和几个输入输出端口,可以非常简单地对完整的逻辑门仿真系统进行编程。固件会执行所有必要的检查,分析输入的逻辑状态并计算输出的逻辑值。结果会通过一些LED二极管显示出来,在本例中,这些二极管充当逻辑门的监视器。电路图如图2所示,其特点是非常简单,且是基于PIC 16F876 MCU的。
值得注意的是,根据所选新设备的规格对固件列表进行适当的更改,也可以成功地采用任何其他类型的MCU。MCU必须具有足够数量的数字门才能正确实施项目。从电路图中可以看出,标有字母“A”和“B”的按钮构成了逻辑门的两个输入端。分别按下它们会将MCU端口C0和C1设置为高电平(1)。否则,由于存在10kΩ的下拉电阻,它们将处于低逻辑电平(0)。六个LED二极管与相关限流电阻一起代表OR、AND、NAND、NOR、XOR和NOT逻辑门的输出。NOT门指的是开关“A”的输入,因为它只有一个输入和一个输出。整个系统采用5V连续电压供电。从电路图可以看出,该系统由一个22pF电容器、六个LED二极管、六个220Ω限流电阻、两个10kΩ电阻、一个4.7kΩ电阻器、两个开关或两个常开按钮组成,当然还有一个PIC 16F876 MCU(在本例中)。该系统不使用任何石英振荡器,而是使用简单的RC网络。
图2:带有MCU的逻辑门系统的电路图
图3是整个流程的流程图。当然,可以通过消除所有逻辑条件并减少与简单数学和逻辑运算的比较来简化流程图。假设输入为“A”和“B”,输出为“Y”,可以使用每种编程语言的逻辑属性来完成简化,它们的数学和逻辑功能如下:
固件列表可以使用任何编译器和不同的编程语言进行开发,具有极大的灵活性,使开发人员可以自由选择最适合其技能和偏好的平台。必须通过条件比较或根据需要进行准确反映端口逻辑的数学运算来合并所有输入端口控制。这些控制是仿真器正确执行的基础,通过无限循环实现,确保逻辑运算的连续管理。我们强烈建议您仔细查看作为视觉指南提供的流程图,以便全面了解逻辑过程。
接下来,还建议将这些逻辑转换为与所选MCU兼容的编程语言。这种实践方法不仅有助于理解仿真器的动态,而且还可以在定制和优化固件方面提供更大的灵活性。一旦成功实施,固件就可以加载到MCU中,为逻辑门仿真器供电,并提供一个交互式的教学环境。
图3:MCU逻辑门实现流程图
该设备的使用非常简单。必须向电路供电,以便相应逻辑门的LED二极管根据两个开关(标记为“A”和“B”)的位置和逻辑状态点亮。在图4中,可以观察到所有输入和相关输出的电压电平。该版本的电路包括一些只有两个输入的逻辑门。
图4:所有可能配置的输入和输出逻辑电平
对于具有多个输入的系统,则需要修改固件,当然也需要修改硬件部分,添加更多电子元件。对于那些希望立即使用可执行固件文件的人,可以使用下面提供的二进制代码。使用好的反汇编程序可以获得程序的汇编代码。它可以使用特定硬件直接加载到16F876 MCU中。
:020000040000FA
:060000008A110A12052816
:100008000900952083160313071486120612861119
:10001800061186100610071487140610861006119C
:10002800861106128612F001831203130718F009CD
:100038007008A000F0018718F00920087004A100DA
:10004800211C2828061429280610F0010718F00991
:100058007008A000F0018718F00920087005A100B9
:10006800211C3828861439288610F0010718F00951
:100078007008A000F0018718F00920087005A10099
:10008800211C4828061149280615F0010718F0090F
:100098007008A000F0018718F00920087004A1007A
:1000A800211C5828861159288615F001071CF009CB
:1000B8007008A000F001871CF0097008A100200852
:1000C8002105A200F0010718F0097008A000F0014E
:1000D8008718F0097008A10020082105A30022084C
:1000E8002304A000201C7A2806127B28061607186D
:1000F8007F288616802886126430F200F301872054
:10010800172863008528F30A8E30F1000130F000CB
:10011800F00B8C28F10B8A28F20B8828F30B88281F
:100128000800831603139F13831203131F108316EB
:1001380003139F111F159F141F10831203138501AA
:060148008601870108009A
:02400E00793DFA
:00000001FF
使用光标记查看结果无疑要简单和直接得多。事实上,以视觉或图形形式表达的结果总是比以文本形式表达的结果更清晰、更容易理解。这对于电子和数学的概念也同样适用。通过亲眼观察逻辑门的运行,更容易透彻地理解相关的原理。
该项目对于大学和电子学校的教师和教授都非常有用。使用MCU创建逻辑门仿真器是理解和实验数字电子学基本概念的重要一步。通过这个项目,不仅可以在实践中实现不同的逻辑门,还可以深入了解编程的动态以及与MCU的交互。该仿真器不仅为学生和相关爱好者提供了宝贵的教学工具,也为电子和嵌入式编程领域的进一步探索提供了坚实的起点。
(原文刊登于EDN姊妹网站EEWeb,参考链接:Digital Electronics Course – Part 10: Logic Gates With MCU,由Ricardo Xie编译。)