前几天脑袋一热,买了个STC89C52RC芯片的单片机,打算点个灯。
又在wzt的影响下使用vsc和sdcc的编写模式。
2022-08更新
有大佬实现了将c51和头直接转换为sdcc代码的网页,这是链接在网页中,把你的 Keil C51 C 代码转换成 SDCC 格式 - VeriMake
并未测试
sdcc
sdcc这是sdcc64位的安装包的下载链接(国外网站,可能很慢)。
同样,你可以在这里查询所有供windows下载的版本。SDCC - Snapshot Builds (sourceforge.net)
启动安装包,随后一路next安装即可。
安装成功后在命令行输入sdcc
以验证是否安装成功。
vsc配置
安装vsc
为vsc安装插件
- 安装
C/C++
插件 - Chinese (Simplified) Language Pack for Visual Studio Code(可选)
获取sdcc适用的STC89C52RC头文件
实际上,此芯片为8051内核芯片,但是查看头文件中绝对地址后发现其似乎兼容sdcc的include/mcs51/8052.h
头文件。而该头文件内引用了8051头文件。所以,在下面的程序代码我直接引用了8052的头文件。
当然,由于stc-isp软件导出的该芯片的头文件不被sdcc识别,所以我们也可自行转换导出的头文件。
突然要用 STC 写个东西,但是发现没有SDCC头文件,写个工具转… (amobbs.com 阿莫电子论坛)
9楼以将转换器封装为exe可执行文件,可以根据层主使用方法直接使用。
但是可能会在编译步骤在此头文件中报错,可将报错行注释掉。也可自行计算绝对路径地址
程序编写之前
为了让vsc能够识别并辅助编写代码,需要对vsc进行配置。
在vsc界面按下Ctrl+Shift+P
,选择c/c++编辑配置
包含路径项(includePath)
在此项中填写你的SDCC路径\include\msc51
来让vsc直接识别到头文件
例:C:\Program Files\SDCC\include\mcs51
lint.h
这是一个位于SDCC\include\mcs51\lint.h
的兼容头,写在文件中可以让vsc识别sdcc的语法。
第一个程序
新建一个名为helloworld.c
的文件。输入
1 |
|
保存。
在vsc中输入sdcc helloworld.c
来编译它,随后会生成一堆文件。随后使用packihx .\helloworld.ihx >.\helloworld.hex
将ihx文件转化为hex文件。然后在
stc-isp中选中STC89C52RC/LE52RC
芯片,在安装驱动情况下选中串口,点击打开程序文件
,随后点击下载/编程
。开始需要检测mcu选项,需要冷启动。我购买的是完整的开发板,按下刷新开关即可。正常来说,05口已经可以持续输出低电平,连接一个led到vcc和05口,可以发现正常使用。
踩坑
我通过packihx
生成的hex在下载到单片机上后无法发挥作用,在我通过多次测试后发现packihx打包的hex文件不是正常的hex文件,因而无法正常下载。随后发现通过sdobjcopy
打包生成的bin文件可正常通过stc-isp下载,这是指令。
sdobjcopy.exe -I ihex -O binary .\helloworld.ihx .\helloworld.bin