前言
相比于Windows,macOS 在搭建软件编程环境上十分便捷。但是例如 51 单片机等硬件相关的开发资源,却常常只针对于Windows。使用 Windows 编译 51 单片机,可以使用被广泛使用的集成开发软件 Keil。在 macOS 上,除了安装 Windows 的虚拟机以外,可以使用支持 macOS 的 SDCC 作为编译器。本文将会针对使用 macOS 实现对 51 单片机进行编程。
开发环境的搭建
安装Homebrew
在我们开始安装 SDCC 之前,我们需要在 macOS 中安装 Homebrew。
Homebrew是一款 macOS 中的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。使用简单的指令,就可以实现包管理,而不用关心各种依赖和文件路径的情况,十分方便快捷。我们安装 SDCC 就将会使用 Homebrew 进行。
首先打开 macOS 中的终端,将下方的命令直接复制进去,就可以自动安装 Homebrew。
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
稍等一下,即可完成安装。
安装 SDCC
接下来我们将进行 SDCC 的安装。继续打开刚刚使用的终端,将下方的安装命令复制进去。
brew install sdcc
Homebrew 就会帮助我们自动下载并安装好 SDCC。
安装驱动程序
为了能够将我们的单片机成功连接到电脑,我们还需要在电脑里安装相应的驱动程序。
点击这里进入WCH的官方驱动下载界面,安装CH340系列和CH341系列的SB转串口 macOS 驱动程序。
解压好下载的压缩文件,运行其中的ch34xInstall.pkg,根据提示完成安装,最后重启电脑即可完成。
检查驱动程序
为了检查驱动安装是否正常和匹配,我们可以进行检查。
完成重启后,将单片机连接至电脑,同时打开终端,输入:
ls /dev/tty.wchusbser*
如果终端中出现:
/dev/tty.wchusbserial14110
那么就说明驱动安装成功,单片机已经成功连接。其中14110代表成功连接的单片机型号,根据单片机的不同可能出现差异。如果安装失败,可以重新下载安装。
安装烧录工具
为了将我们的程序烧录至单片机内,我们需要额外安装烧录工具。在 macOS 上使用广泛的烧录工具是 stcgal。在安装 stcgal 前,我们首先需要确保电脑中已经安装好 Python 3。如果确认已经安装好 Python 3,就可以跳过以下步骤。如果电脑中使用的是 Python 2 ,或不确定自己安装的 Python 版本,可以使用以下方式进行检查和安装。
检查 Python 版本
因为 macOS 中会自带 Python,所以绝大多数情况下都需要额外安装 Python 3。如果你不确定自己电脑中 Python 的版本,可以使用如下方式进行检查。
打开终端,输入:
python
如果显示的是 python 2.X,那么说明需要额外安装。
安装 Python
安装 Python 较为简单,只需要点击这里进入 Python 的官网,下载对应的版本即可。
安装完成后,重新打开终端,输入:
python3
如果出现 Python 3.X,那么就说明安装成功了。
安装好 Python 3 以后,我们就可以顺利安装 stcgal了。
打开终端,输入:
./setup.py build
完成构建后,再输入:
sudo ./setup.py install
即可完成安装。
至此,我们已经成功完成了所有编译环境的搭建。
与 Keil 的区别
需要注意的是,在使用 C 编写代码的时候,SDCC 与 Keil 存在一些差异,根据文档,具体在语法上的差异有这些:
SDCC | Keil | |
头文件 | 8051.h/8052.h | reg51.h/reg52.h |
IO端口 | P2_0 | P2^0 |
IO口定义 | #define LED P2_0 | sbit LED = P2^0 |
中断函数 | void INT0_ISR() __interrupt 0 | void INT0_ISR() interrupt 0 |
在实际编写过程中,需要注意两款编译器在语法上的不同之处。
编译代码
编写完所需要的代码后,保存为 .c 文件即可。记下代码文件所在文件夹。这里我们假设代码文件为 snowboard.c,文件所在文件夹名为 microcontroller。
打开终端,输入:
cd microcontroller
进入目标文件夹。
这里的 microcontroller 应该被替换为实际操作中所使用的文件夹名称。
继续在终端输入:
sdcc snowboard.c
这里的 snowboard.c 应该被替换为实际操作中的代码文件名称。
完成后,我们进入 microcontroller 文件夹,其中应该会多出很多文件。在这里,我们只需要使用 snowboard.ihx 文件。
回到终端,输入:
ls /dev/tty.wchusbser*
查看单片机的型号。
如果在检查驱动时已经记录下单片机的型号,这一步可以跳过。
在终端再次输入:
stcgal -P stc89 -p /dev/tty.wchusbserial14110 snowboard.ihx
这里的 14110 指的是我们实际连接的单片机型号,应该被替换为实际操作中的单片机型号。snowboard.ihx 应该被替换为实际操作中的代码文件名称。
等待整个过程的结束,如果出现 Waiting for MCU, please cycle power: ,这个时候我们按下单片机的电源键,就可以发现已经成功把代码烧录至单片机中了。