您可以在没有计算机的情况下对微控制器进行编程吗?

电器工程 集会 编译器
2022-01-27 01:58:40

假设您有一个相当简单且小型的微控制器,并且没有接口、没有计算机、没有调试器、编译器或汇编器。你能用汇编编写代码,将其(手动)转换为机器代码,然后使用电压源为适当的引脚供电吗?

我知道您需要适当的 I/O 和内存才能真正任何事情,但是如果您愿意并且有时间,您可以这样做吗?我想,从历史上看,当没有计算机/编译器/汇编器开始时,这是如何完成的?随时将我链接到外部资源。谢谢!:)

4个回答

你能在汇编中编写你的代码,将它(手动)转换为机器代码,

是的!
如果您愿意,可以用二进制“想办法”编写代码。
很久(很久很久)以前,这就是我开始使用(当时)微处理器的方式。
我和朋友会用汇编语言编写代码,手动编译成机器码(经过一些练习,你可以“通过检查”来做),然后通过各种方式将其输入处理器。在我们构建的一个系统上,我们将在二进制(开关)开关上设置地址或使用处理器的自动增量功能,在二进制开关上输入 8 个数据位,然后按下“时钟”开关将数据输入内存。

使用串行 SPI 编程在现代微控制器上使用更少的开关即可实现等效功能 - 见下文。

...然后使用电压源为适当的引脚供电?

是的!
但是这样做会非常慢!
许多现代微控制器允许使用“SPI”接口进行编程。
这通常包括输入和输出数据线以及“时钟”线,通常还有复位线。

许多处理器允许 SPI 时钟和数据是“静态的”,这意味着在位之间设置数据所需的时间没有限制。您可以使用由手动开关驱动的数据线和时钟线对这样的处理器进行编程。时钟线需要“无反弹”——您需要能够在每次操作的单个转换中将其设置为高或低——因此最小接口可能需要包括施密特触发门。您可能只“摆脱”一个 RC 延迟和一个按钮开关,但施密特触发输入更安全。数据线不需要无反弹,因为它的状态只在时钟边沿读取。

一些接口是交互式的——数据在编程过程中由处理器输出(例如,数据输出 = MISO = AVR 处理器上的主输入串行输出)。要阅读此内容,您需要添加例如一个 LED 和一个电阻器(如果驱动能力非常低,可能还需要一个缓冲器或晶体管)。


MC6800:

来自半褪色的记忆(将近 40 年!)

LDI A, $7F ...... 86 7F ...... 1000 0110 0111 1111
STA, $1234...... B7 12 34 ... 1011 0111 0001 0010 0011 0100
LDI X, $2734.. . CE 27 34 ... 1100 1110 0010 0111 0011 0100
...

最初,在可编程机器中,程序是手动打入纸带或卡片中的。后来他们使用一种打字机来打孔,甚至更晚的时候,计算机(当时人们已经知道)可以打自己的纸带。

从字面上看,它就是拿着一张卡片坐在那里,手动在上面打洞。

在此处输入图像描述

每列是一条指令或数据位,由 CPU 的状态机解释以执行任务。

现在,如果它当然都是闪存,是的,首先将数据放入其中通常需要一台计算机来完成。但这并不是严格意义上的 100% 正确。

毕竟,计算机和硬件程序员除了在正确的时间设置 IO 引脚的状态外,还能做什么呢?因此,如果您真的足够自虐,您可以构建一个系统,允许您以正确的方式将正确的指令发送到微控制器的编程引脚,以将一些指令安装到闪存中以执行。

也许涉及很多开关、一些移位寄存器、时钟发生器等的东西。

我记得在大学时,我们有一个基于 Z80 的新型编程系统——一个带有 Z80 的手提箱大小的单元、少量 RAM、一堆 7 段 LED 显示器和一大排开关。通过使用开关手动将指令加载到 RAM 中对其进行编程。

您说“小型微控制器,没有接口,没有计算机,没有调试器,编译器或汇编器。”。好吧,您可以在没有计算机、调试器、编译器或汇编器的情况下度过难关,但您必须有某种接口来连接微控制器才能加载程序。

首先,忘记任何高级语言,如 C。那么最简单的方法是用汇编语言编写程序,但不要使用汇编程序将其翻译成机器代码。相反,在编程手册中查找每个汇编指令,找到它们等效的十六进制编码,然后写下来。

您必须分配自己的变量,以便在指令的操作数部分填写适当的地址。也忘记使用堆栈和堆,太多的工作。完成后,您将拥有一个可以直接加载到微控制器闪存中的机器程序——也不需要链接器。

由于几乎所有微控制器都缺少外部地址和数据总线(因为它们会占用 I/O 端口和外围设备所需的太多引脚),几乎所有微控制器都通过如下特殊接口进行编程:

在此处输入图像描述

通常,左侧的“程序员”将连接到 PC,PC 将下载由编译器/链接器生成的机器文件。

但是,如果程序员有键盘,如下所示:

在此处输入图像描述

然后可以将手动生成的程序的十六进制代码直接输入编程器,并在不需要编译器、链接器或 PC 的情况下对设备进行编程,而这正是您所询问的。(键盘还用于编辑 hex 文件和生成校验和。)

诚然,很少有程序员拥有这样的键盘。这个不适合业余爱好者,因为它可能要花费几千美元。

这个特殊的程序员在将零件放入电路板之前对其进行编程;接口和插座可用于多个 PIC 以及 Atmel AVR 等。

实际上,手动切换 JTAG 引脚之类的操作非常容易出错。输入任何体面大小的程序都需要数千次切换。但从理论上讲,这是可能的。

如果允许您提前准备微控制器(或为其编写引导 ROM),您可以轻松实现早期大型机上使用的外部拨动开关之类的东西。如果您允许外部逻辑,您甚至可以使用十六进制键盘来加快速度。

最后,虽然现在它并不常见,但您可以购买一个基于 ROM 的微控制器,其中包含自定义代码。您必须预先提供一些资金并保证一定数量,但我看到客户这样做是为了节省大批量生产的资金。在这种情况下,根本不需要外部信号来对微控制器进行编程。代码将内置到芯片的物理布局中。

当然,您也可以使用从外部存储器接口运行代码的微控制器,但这是作弊。:-)