在Window/Linux跨平台开源环境开发8051应用
Dr.Prof. Li, China Telecom, Oct 22, 2022
日常工作中,我涉及8051单片机(简称51)开发的时候,主要用汇编语言/C语言在Linux上开发。编辑工具是vim,编译工具是sdcc,烧录工具是stcgal,调式工具是sdcc自带的s51。整个环境是开源的,不需要任何版权的购买费用。
近期发现许多年轻学生不习惯Linux这种纯字符界面,似乎更习惯在Windows10上进行单片机开发。但Windows上的常用8051开发工具的正常使用是需要购买版权的。因此撰写这个简单的文章说明如何把上述环境在windows或Linux(以CentOS8举例,下同)上部署。我提供一个MCS51Inst.zip,包含了本文用到的全部需要下载的软件。里面Linux子目录下的install.sh包括了Linux下安装的全部命令,Windows子目录的install.bat包括了Windows下安装的全部命令。
1、准备工作
【Windows】
编辑工具:在windows,任何文本编辑器,如notepad、vscode等都可以,不用特别准备。
【Linux】
在Linux通常使用vim。
Linux下安装sdcc需要预先安装boost、gputils:
yum -y install boost boost-devel
从以下网址下载gputils:
Download gputils from SourceForge.net
执行以下命令安装:
tar -jxvf gputils-1.5.2.tar.bz2
cd gputils-1.5.2
./configure
make
make install
cd ..
2、安装编译工具sdcc
【Windows】
Small Device C Compiler download | SourceForge.net
在windows访问上述网址会下载:sdcc-4.2.0-x64-setup.exe
也可以直接从下面网址下载:
https://udomain.dl.sourceforge.net/project/sdcc/sdcc-win64/4.2.0/sdcc-4.2.0-x64-setup.exe
然后双击执行安装。
【Linux】
Small Device C Compiler download | SourceForge.net
在Linux访问上述网址会下载:sdcc-src-4.2.0.tar.bz2
执行以下命令安装:
tar -jxvf sdcc-src-4.2.0.tar.bz2
cd sdcc-4.2.0
./configure
make
make install
cd ..
3、安装烧录软件stcgal
这个一个python程序,需要python3。若没有安装Python3,请从下面链接下载后安装:
【Windows】
从以下网址下载stcgal:
GitHub - grigorig/stcgal: Open Source STC MCU ISP flash tool
在命令窗口转到stcgal子目录,执行以下命令安装:
python setup.py install
【Linux】
pip3 install --timeout 1000 stcgal
4、测试
我的Test子目录下有一个已经编辑好的Test.c,可用于测试。该程序不断改变P1端口的值,使得连接在P1端口的8个LED轮流点亮。通常市面上的开发板(如亚博智能BST-M51、科睿的KR-51),都是有8个LED连在8051的P1。现在把开发板插入计算机,并确保开发板电源处于关闭状态。
【Windows】
在命令窗口输入:compmgmt.msc
可以看到通过CH340用USB模拟出来的COM口,我的计算机上是COM3。若果看不到,需要安装Ch340的驱动,不过新版本的Windows10是自带这个驱动。安装可参考:2.1 安装CH340驱动
CH340/CH341 Windows串口驱动安装 - 南京沁恒微电子股份有限公司
在命令窗口转到Test子目录。
编译:sdcc Test.c
烧录:stcgal -p COM3 -P stc89a Test.ihx
当看到:Waiting for MCU, please cycle power,打开开发板的电源。
其中COM3要根据你计算机的具体情况修改。
【Linux】
在终端窗口输入:ls /dev/ttyUSB*,可以看到插入了开发板后模拟出来的COM口,通常是ttyUSB0。
编译:sdcc Test.c
烧录:stcgal -p /dev/ttyUSB0 Test.ihx
当看到:Waiting for MCU, please cycle power,打开开发板的电源。
其中/dev/ttyUSB0要根据你计算机的具体情况修改。也可以通过我写的脚本C51来代替上面两行的执行。
附录:
1. sdcc的使用说明可见:
https://sdcc.sourceforge.net/
2. ASxxxx Assemblers 和ASlink Relocating Linker的说明文件可见:
https://shop-pdp.net/ashtml/asxdoc.htm
3. AS8051 Assembler: