8051 通用开发环境搭建(全平台)

8051 通用开发环境搭建(全平台)

Keil 工具链只能在Windows下安装使用,对于 MacOS,Linux等平台,可以参考本文搭建通用的开发环境(同样也支持Windows)

编译器 - SDCC

官网地址:SDCC - Small Device C Compiler

从官网下载对应平台的安装包,安装到系统。

image-20241225134234522

也可以使用包管理器进行安装,如 Arch Linux可使用 pacman 安装:

1
sudo pacman -S sdcc

安装完成后,确认 sdcc 在系统 PATH 里,可以通过以下命令确定

1
2
3
$ sdcc --version                   
SDCC : mcs51/z80/z180/r2k/r2ka/r3ka/sm83/tlcs90/ez80_z80/z80n/r800/ds390/pic16/pic14/TININative/ds400/hc08/s08/stm8/pdk13/pdk14/pdk15/mos6502/mos65c02 TD- 4.4.0 #14620 (Linux)
published under GNU General Public License (GPL)

项目管理工具

项目管理工具可以选用 Make,CMake 等。写51大部分情况是写 C 或汇编,使用 Make 方便一些。

使用包管理器或下载安装 Make

1
sudo pacman -S make

烧录工具

烧录工具也有很多选择:stcflash, bossa, stcgal等。我们选用 stcgal

Arch Linux 可以从 AUR 安装,其他系统可以从 GitHub 下载 grigorig/stcgal

这样一套开发环境就搭建完成了,下面讲一下如何使用


配置 51 单片机开发项目(C语言)

新建一个文件夹用来存储项目文件,并创建一个简单的项目结构

1
2
3
4
mkdir -pv ~/workspace/51project
cd ~/workspace/51project
mkdir -pv src/{core,periph/{inc,src}} build
touch Makefile

完成后,项目结构如下:

1
2
3
4
5
6
7
8
9
10
11
$ tree                                  
.
├── build
├── Makefile
└── src
├── core
└── periph
├── inc
└── src

7 directories, 1 file

core 文件夹存储主程序,periph 下存储相关外设的封装库,Makefile 是项目的构建配置

编辑 Makefile:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# 编译器使用 sdcc
CC := sdcc
FLASH := stcgal

# 项目名称和生成目标名称
PROJECT_NAME := project
TARGET_NAME := target

CFLAGS := -mmcs51 -Isrc/core -Isrc/periph/inc
LDFLAGS := -mmcs51

# 构建目录和构建程序文件
BUILD_DIR := build
OBJ_DIR := $(BUILD_DIR)/obj
HEX_FILE := $(BUILD_DIR)/$(TARGET_NAME).hex

# 源码
SRC_DIR := src
# 用户程序源码
CORE_DIR := $(SRC_DIR)/core
# 外设驱动目录
PERIPH_DIR := $(SRC_DIR)/periph
# 外设源码
PERIPH_SRC := $(PERIPH_DIR)/src
# 外设头文件
PERIPH_INC := $(PERIPH_DIR)/inc

# 源码文件通配
CORE_SOURCES := $(wildcard $(CORE_DIR)/*.c)
PERIPH_SOURCES := $(wildcard $(PERIPH_SRC)/*.c)
ALL_SOURCES := $(CORE_SOURCES) $(PERIPH_SOURCES)

OBJ_FILES := $(patsubst %.c, %.rel, $(ALL_SOURCES))

all: $(HEX_FILE)
@echo Build completed

%.rel: %.c $(OBJ_DIR)
@echo Compiling $<
@$(CC) $(CFLAGS) -c -o $(OBJ_DIR)/$@ $<

$(HEX_FILE): $(OBJ_FILES)
@echo Linking
@$(CC) $(LDFLAGS) $(OBJ_FILES:%=$(OBJ_DIR)/%) \
-o $(OBJ_DIR)/$(TARGET_NAME).ihx
@cp $(OBJ_DIR)/$(TARGET_NAME).ihx $(HEX_FILE)

flash:
@if [ -e /dev/ttyUSB0 ]; then \
if [ -e $(HEX_FILE) ]; then \
@$(FLASH) -P stc89 $(HEX_FILE) -D; \
@echo Flash completed. ;\
else \
@echo Not built yet!; \
fi \
else \
echo "没有找到 USB 串口,停止烧录!"; \
fi


$(BUILD_DIR):
@mkdir -pv $@

$(OBJ_DIR): $(BUILD_DIR)
@mkdir -p $@
@mkdir -p $@/$(CORE_DIR)
@mkdir -p $@/$(PERIPH_DIR)
@mkdir -p $@/$(PERIPH_SRC)

clean:
@rm -fr $(BUILD_DIR)

.PHONY: clean all flash

之后就可以写代码了


测试

写程序测试

image-20241225175216109

使用 make编译

image-20241225175238925

最后把单片机连接到电脑,make flash 进行测试。


总结

使用SDCC进行配置,对于大部分51的学习已经足够,对于协会培训内容而言绝对足够。配置完成后,在任何平台不需要额外进行项目的配置,只需要 make 工具就可以在Windows,Linux,MacOS,甚至其他架构的计算机上编译烧录51程序,非常地方便。


示例工程以发布于 GitHub:https://github.com/neoluxis/SDCC_89C52