适用对象 :Linux 新手、嵌入式初学者、想用开源工具开发 STC89C52/AT89S51 等 8051 单片机的爱好者
系统环境 :Debian 12 或 Debian 13(也适用于 Ubuntu 22.04+)
目标 :从零搭建一个 免费、开源、命令行友好 的 51 单片机开发环境
为什么选择 SDCC + VSCode?
- 完全免费开源:无需 Keil C51 的 2KB 代码限制
- 跨平台:Linux / Windows / macOS 均可使用
- 轻量高效:命令行编译 + VSCode 智能提示,无臃肿 IDE
- 适合学习:理解编译、链接、烧录全过程
第一步:安装开发工具链
1. 安装 SDCC(Small Device C Compiler)
SDCC 是专为 8 位 MCU(如 8051、Z80)设计的 C 编译器。
bash
sudo apt update
sudo apt install sdcc sdcc-libraries
sdcc-libraries包含8051.h、reg51.h等关键头文件!
验证安装:
bash
sdcc --version
# 应输出类似:SDCC 4.2.0 ...
2. 安装 VSCode
bash
sudo apt install wget gpg
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
sudo install -D -o root -g root -m 644 packages.microsoft.gpg /etc/apt/keyrings/packages.microsoft.gpg
sudo sh -c 'echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/code stable main" > /etc/apt/sources.list.d/vscode.list'
sudo apt update
sudo apt install code
3. 安装烧录工具 stcgal(用于 STC 系列单片机)
由于 Debian 12/13 默认禁止 pip 修改系统 Python,我们使用 pipx 安全安装:
bash
# 安装 pipx
sudo apt install pipx
# 配置 PATH
pipx ensurepath
# 重新加载 shell 配置(或关闭终端重开)
source ~/.profile
# 安装 stcgal
pipx install stcgal
验证:
bash
stcgal --version
# 应输出:stcgal 1.7.0 或更高
🔌 注意:如果你用的是非 STC 芯片(如 AT89S51),需使用其他烧录工具(如 USBasp + avrdude),本教程以 STC 为例。
第二步:配置串口权限
Linux 默认禁止普通用户访问串口设备。运行以下命令将当前用户加入 dialout 组:
bash
sudo usermod -aG dialout $USER
重要 :
-aG中的-a表示"追加",不能省略!否则会移除你所有其他用户组!
然后注销系统并重新登录(或重启),使权限生效。
验证:
bash
groups
# 输出中应包含 "dialout"
第三步:创建项目结构
在任意目录创建你的项目,例如:
bash
mkdir ~/my-8051-project && cd ~/my-8051-project
mkdir src
项目结构如下:
my-8051-project/
├── src/
│ └── main.c
├── Makefile
└── .vscode/
└── c_cpp_properties.json
第四步:编写示例代码
创建 src/main.c:
c
#include <8051.h>
void delay_ms(unsigned int ms) {
unsigned int i, j;
for (i = 0; i < ms; i++)
for (j = 0; j < 114; j++);
}
void main(void) {
P1 = 0x00; // 初始化 P1 口
while (1) {
P1 = ~P1; // 翻转 P1(如接 LED 会闪烁)
delay_ms(500);
}
}
使用
#include <8051.h>(SDCC 官方头文件),也可用#include <reg51.h>(Keil 兼容)
第五步:配置 VSCode 智能提示(关键!)
在项目根目录创建 .vscode/c_cpp_properties.json:
json
{
"configurations": [
{
"name": "8051 (SDCC)",
"includePath": [
"${workspaceFolder}/**",
"/usr/share/sdcc/include/mcs51",
"/usr/share/sdcc/include"
],
"defines": [
"__SDCC__",
"__SDCC_mcs51",
"__sfr=volatile unsigned char",
"__sbit=volatile unsigned char",
"__at(x)=",
"__bit=volatile unsigned char"
],
"compilerPath": "/usr/bin/sdcc",
"cStandard": "c99",
"intelliSenseMode": "linux-gcc-x86"
}
],
"version": 4
}
作用 :让 VSCode 认识
P1、__sfr、__sbit等 8051 特有语法,消除"未定义标识符"错误。
保存后,在 VSCode 中按 Ctrl+Shift+P → 输入 "Reload IntelliSense" 刷新。
第六步:编写 Makefile(自动化编译)
在项目根目录创建 Makefile:
makefile
# Makefile for 8051 with SDCC
TARGET = main
SRC_DIR = src
BUILD_DIR = build
CFLAGS = --model-small --opt-code-speed
$(BUILD_DIR)/$(TARGET).ihx: $(SRC_DIR)/$(TARGET).c
@mkdir -p $(BUILD_DIR)
sdcc $(CFLAGS) -o $(BUILD_DIR)/$(TARGET).ihx $<
flash: $(BUILD_DIR)/$(TARGET).ihx
stcgal -P stc89 -p /dev/ttyUSB0 $(BUILD_DIR)/$(TARGET).ihx
clean:
rm -rf $(BUILD_DIR)
.PHONY: clean flash
⚙️ 根据你的芯片型号调整
-P参数:
- STC89C52 →
-P stc89- STC12C5A60S2 →
-P stc12- STC15 系列 →
-P stc15查看所有支持型号:
stcgal -L
第七步:编译与烧录
1. 编译项目
bash
make
生成文件位于 build/ 目录,主文件为 main.ihx。
2. 烧录到单片机
bash
make flash
烧录操作流程:
- 运行
make flash - 终端显示
Waiting for MCU... - 此时给单片机断电 → 再上电(触发 STC ISP 下载模式)
- 等待自动烧录完成
硬件连接:
- USB-TTL 模块 TX → 单片机 RXD (P3.0)
- USB-TTL 模块 RX → 单片机 TXD (P3.1)
- 共地(GND 接 GND)
常见问题
如何生成 .hex 文件?
bash
packihx build/main.ihx > build/main.hex