使用SDCC在Linux/macOS上开发51单片机程序

前几天看到一个东西叫SSDC(Small Device C Compiler),这是一个可以开源的单片机程序编译器,so,今天介绍下在mac下51单片机程序的开发,linux下的步骤也是一模一样的。

下载地址:https://sourceforge.net/projects/sdcc/files/ 找对应的平台下载。

解压出来的 ssdc-3.6.0 文件夹可以放在 /usr/local 下(路径随意,只要把ssdc-3.6.0/bin这个路径加到环境变量里就OK)。

接下来写一段LED闪烁的程序 main.c:

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
#include <8052.h>

#define led1 P2_0

unsigned char count = 0;

void time0() __interrupt 1
{
TH0 = 0xDC;
TL0 = 0x00;
TR0 = 1;
count++;
if (count == 100) {
if (led1) {
led1 = 0;
}
else {
led1 = 1;
}
count = 0;
}
}

void main(void)
{
TMOD = 0x01;
TH0 = 0xDC;
TL0 = 0x00;
EA = 1;
ET0 = 1;
TR0 = 1;

led1 = 0;

while (1);
}

重点来了:使用SSDC编译单片机程序,跟keil的c代码是有一些差别的

SSDC keil
头文件 8051.h/8052.h reg51.h/reg52.h
IO口 P2_0 P2^0
IO口定义 #define LED P2_0 sbit LED = P2^0
中断函数 void INT0_ISR() __interrupt 0 void INT0_ISR() interrupt 0

然后就是编译了,以下命令:

1
sdcc main.c

然后会生成一堆文件,其中最重要的就是 main.ihx 这是另一种可以烧录的hex文件,后面会讲到,.ihx可以转化为.hex文件

1
packihx main.ihx

最后就是烧录了,将51单片机通过串口连上电脑,可以在 /dev 下看到设备,我的是 /dev/tty.usbserial (如果电脑上就这么一个串口的话就不用管这么多了,后面用到的烧写软件会自动识别)

烧写软件: https://github.com/laborer/stcflash

从github上clone下来就可以了,记得要装好python,使用以下命令烧写:

1
./stcflash.py main.ihx

stcflash支持.ihx .hex .bin文件的烧写。

EOF