PIC微控制器 2026/03/31
16F87x PIC 微控制器的 Bootloader
Bootloader 允许将十六进制文件直接下载到 PIC 或其他微控制器的闪存中。Bootloader 通过 PIC 的 UART 接收用户程序,并直接将其写入程序存储器(自编程)。此功能大大加快了开发过程,因为芯片保持在目标电路中,不需要在目标电路和编程器之间移动。
当没有安装 Bootloader 时,PIC 中的所有存储器都可以用于用户程序。对于 16F873,那是 4 K(0x000 到 0xFFF)。安装 Bootloader 意味着部分存储器被 Bootloader 占用。用户可以将他的程序下载到剩余的存储器空间中。图 1 中的 Bootloader 占用 256 字(0xF00 到 0xFFF),即 16F873 存储器的 6%。与快速程序下载和更友好的开发流程相比,损失 6% 存储器的缺点很小。

闪存中的前 4 个字(0x000 到 0x003)包含一个跳转到 Bootloader 的指令。原始的 4 个字在下载过程中被识别并重新分配到 Bootloader 的存储器空间。在启动时,Bootloader 等待 200 ms 以开始下载。如果未检测到下载,Bootloader 激活用户程序,从重新分配的前 4 个字开始,然后跳转到剩余的用户程序。
编程 Bootloader
Bootloader 软件包包含所有需要的软件。我将通过一个示例解释如何将 Bootloader 版本 8.23 编程到 16F873 中。
选择具有正确晶体振荡器频率和所需下载速度的十六进制文件。我为我的 16F873 选择了文件 30419-bootldr-v26-16F873-74-04Mhz-19200bps.hex,其中振荡器为 4 MHz,下载速度为 19200 bps。
将十六进制文件加载到 PIC 编程器中,并在编程前检查熔丝设置。我不希望低压编程开启(在十六进制文件中是开启的)。如果低压编程熔丝开启,PIC 在操作期间可能变得不稳定。我推荐的熔丝设置如图 2 所示。
图 2. 用于将 Bootloader 编程到具有 4 MHz 振荡器的 16F873 中的熔丝设置
编程 Bootloader 时选择的熔丝后来不能被下载的用户程序更改。这是因为 Bootloader 不改变 PIC 的配置字。
下载用户程序
Bootloader 软件包中包含一个 PIC 下载器。PIC 下载器用于将十六进制文件从您的 PC 传输到目标芯片中的 Bootloader。将 Bootloader 编程到 PIC 后,通过下载一个合适的程序到 PIC 来测试下载过程。16F873 的 UART 测试程序和 16F873 测试板的描述可以在本网站的其他地方找到。测试程序也包含在 Bootloader 软件包中。
图 3. PIC 下载器向目标 PIC 写入
将十六进制文件加载到 PIC 下载器中(点击 Search 或按 F2),激活下载器(点击 Write 或按 F4)并复位 PIC。复位激活 Bootloader 并使其监听串行端口上的新下载。Bootloader 和 PIC 下载器握手,然后十六进制文件被下载。几秒钟后 - 瞧 - 新的用户程序在 PIC 中运行。
如果下载的程序将使用 PIC 的串行端口,必须关闭 PIC 下载器并启动终端程序(例如 HyperTerminal)。在我的情况下,PIC 下载器和 HyperTerminal 都使用 COM2 - 但从不同时使用!
存储器保留
存储器保留是必要的,以保留 Bootloader 使用的代码空间。对于 16F873,在 CCS C (PCM 3.060) 中,存储器保留这样做:
#org 0x0F00,0x0FFF {} //16F873 bootloader resides here
在 Microchip MPASM 中,对于 16F873,存储器保留这样做:
ORG 0x0000 ;User program starts here
...
ORG 0x0F00 ;Bootloader starts here
NOP
END
如果用户程序超过 0x0EFF,最后几行将生成编译器错误。
提示 #1
Bootloader 重新分配 0x000 和 0x003 之间的程序字。这意味着,用户程序中的前 4 个字必须包含一个指向剩余用户程序的 GOTO(长跳转)指令。在使用编译器时,这通常是这种情况,例如 CCS 的 C 编译器 PCM。如果您使用汇编器,例如 Microchip 的 MPASM,您必须手动插入 GOTO,如下所示:
ORG 0x000
GOTO Begin
ORG 0x004
Begin User program starts here
提示 #2
如果 PIC 的串行端口被下载的程序使用,并且您想下载一个新程序,PIC 下载器可能无法访问 PIC,因为端口上有流量。在这种情况下,您必须首先按住 PIC 的复位按钮,同时在 PIC 下载器上点击 Write(或按 F4)。下载器将开始搜索 PIC。释放 PIC 的复位按钮将开始下载。





这里还没有内容,您有什么问题吗?