☰
从零开始:51 单片机点灯流程(SDCC + Notepad++ + STC-ISP/普中ISP)
2026/10/10 6:16:30 网站建设 项目流程

前言

网上大多数 51 单片机教程都基于 Keil C51,但 Keil 是商业软件,评估版有 2KB 代码限制,公司电脑用还有合规风险。我用SDCC(开源免费)+ Notepad++ + STC-ISP/普中ISP这套完全免费、合法的工具链,跑通了 51 单片机点灯,记录一下完整步骤。

工具链

工具作用
SDCC开源 8051 C 编译器,免费、跨平台
Notepad++轻量级文本编辑器,写代码用
objcopy把 SDCC 的 .ihx 转成标准 Intel HEX
STC-ISP / 普中ISP烧录软件,通过串口下载程序

SDCC安装

下载安装包

  • 访问官网:https://sdcc.sourceforge.net/
  • 或GitHub Releases:https://github.com/sdcc/sdcc/releases

下载 sdcc-x.x.x-x64-setup.exe 2. 运行安装向导
一直下一步就行了,应用会自动配置环境变量

sdcc -v打印如下说明安装成功

第一步:写代码

目录: D:\project\STC51\01_led_test Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2026-09-28 18:29 149 led.c <-

用 Notepad++ 新建 led.c:

#include<mcs51/8051.h>// 引入 8051 寄存器定义,P0~P3 都在这里voidmain(void)// 主函数,程序从这里开始执行{while(1)// 死循环,让程序一直运行不退出{P2=0xFE;// 往 P2 寄存器写 0xFE(二进制 11111110)// P2.0 输出低电平,点亮接在 P2.0 的 LED// 其他 P2.1~P2.7 输出高电平,对应的 LED 灭}}

为什么是 0xFE?
0xFE = 二进制 11111110,最低位(P2.0)是 0,其余是 1。
51 单片机的 LED 通常是低电平点亮,所以 P2.0 输出低电平,灯亮。

第二步:编译

在代码目录下打开命令行(PowerShell 或 CMD),执行:

sdcc-mmcs51--model-small--iram-size 256--xram-size 0--code-size 8192 led.c

命令参数解释:

参数含义
-mmcs51编译目标为 8051 架构
–model-small使用小内存模型(默认,适合大多数 51 芯片)
–iram-size 256内部 RAM 大小 256 字节
–xram-size 0外部 RAM 大小 0(没有外扩 RAM)
–code-size 8192程序代码最大 8192 字节(8KB)
led.c要编译的源文件

执行成功后,目录下会生成 led.ihx 文件。

目录: D:\project\STC51\01_led_test Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2026-10-08 18:42 8769 led.asm -a---- 2026-09-28 18:29 149 led.c -a---- 2026-10-08 18:42 543 led.ihx <- -a---- 2026-10-08 18:42 253 led.lk -a---- 2026-10-08 18:42 23979 led.lst -a---- 2026-10-08 18:42 17101 led.map -a---- 2026-10-08 18:42 1192 led.mem -a---- 2026-10-08 18:42 4167 led.rel -a---- 2026-10-08 18:42 24369 led.rst -a---- 2026-10-08 18:42 39624 led.sym

第三步:转标准 HEX

SDCC 默认输出的 .ihx 格式,很多烧录软件(尤其是普中 ISP)不认。用 objcopy 转成标准 Intel HEX:

objcopy-I ihex-O ihex led.ihx led_std.hex

命令参数解释:

参数含义
-I ihex输入格式为 Intel HEX(SDCC 的 .ihx 属于此类)
-O ihex输出格式为标准 Intel HEX
led.ihx输入文件
led_std.hex输出文件(标准 HEX,烧录软件能识别)

如果普中 ISP 报“传入的 hex 文件格式错误”,就是这一步没做,或者用了 packihx 但格式仍不标准。

目录: D:\project\STC51\01_led_test Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2026-10-08 18:42 8769 led.asm -a---- 2026-09-28 18:29 149 led.c -a---- 2026-10-08 18:42 543 led.ihx -a---- 2026-10-08 18:42 253 led.lk -a---- 2026-10-08 18:42 23979 led.lst -a---- 2026-10-08 18:42 17101 led.map -a---- 2026-10-08 18:42 1192 led.mem -a---- 2026-10-08 18:42 4167 led.rel -a---- 2026-10-08 18:42 24369 led.rst -a---- 2026-10-08 18:42 39624 led.sym -a---- 2026-10-08 18:47 595 led_std.hex <-

第四步:烧录

方式一:STC-ISP

  • 用 USB 线连接开发板,确认设备管理器里能看到串口(CH340 或 CP2102)。

  • 打开 STC-ISP,选择:

    • 芯片型号:如 STC89C52RC(和芯片丝印一致)
    • 串口号:设备管理器里看到的 COM 口
    • 程序文件:选中led.ihx或者led_std.hex
  • 冷启动:

    • 点击“下载/编程”按钮
    • 看到“正在检测目标单片机…”
    • 给板子断电再上电(用电源开关,不是拔 USB 线)
  • 等待下载完成,板子上的 LED 就会亮起。

方式二:普中 ISP

操作流程基本一致,同样需要:

  • 选对芯片型号
  • 选对 COM 口
  • 加载led_std.hex
  • 冷启动(先点下载,再断电上电)

普中 ISP 和 STC-ISP 我都用过,感觉都还可以。 两者功能相近,选哪个看个人习惯。普中 ISP 是开发板配套的,界面可能更贴合普中的板子;STC-ISP 是 STC 官方的,更新更及时。

踩坑记录

问题原因解决
卡在“正在检测目标单片机”芯片被锁死(程序关闭了下载功能)换新芯片(网上单买芯片挺便宜的)
HEX 格式错误SDCC 的 .ihx 不被 ISP 识别用 objcopy 转标准 HEX
灯不亮LED 接在别的端口查看端口原理图
串口回环测试只收到 .跳线帽没接对检查 P3.0/P3.1 短接(芯片坏导致)
拔掉芯片串口还在CH340 独立于芯片,只证明串口芯片正常不能用来判断 51 芯片好坏
P1.0/P1.1 焊盘有 1.5V/2V板载 LED/数码管/74HC595 分压正常现象,不是短路
ALE 测到 5V万用表测脉冲信号不准或许可以用示波器或 LED 串电阻测

总结

这套流程完全免费、合法,不依赖 Keil。核心就是:

SDCC 编译 → objcopy 转格式 → STC-ISP/普中ISP 烧录

第一次配置稍微麻烦,但跑通之后,以后每次点灯就是三步:写代码 → 编译 → 烧录。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询