51单片机-在Mac搭建环境sdcc+stcgal

搭建开发环境

Mac系统版本: MacOS Catalina
USB转串口: CH340/341
单片机型号: STC90C52RC

安装SDCC

简介

SDCC是什么?其实sdcc就是一个提供优化标准 C (ANSI C89, ISO C99, ISO C11) 的编译器套件。知道这么多已经够了,内部兼容多种单片机的编译。

在Mac使用包管理工具安装sdcc

192:~ ichabodcrane$ brew install sdcc

安装完成后可以用以下命令查看:

192:~ ichabodcrane$ sdcc -v
SDCC : mcs51/z80/z180/r2k/r3ka/gbz80/tlcs90/ez80_z80/ds390/pic16/pic14/TININative/ds400/hc08/s08/stm8/pdk13/pdk14/pdk15 4.0.0 #11528 (Mac OS X x86_64)
published under GNU General Public License (GPL)

如果出现以下版本信息则安装成功。

安装stcgal

stcgal是一款烧录工具,还有一个叫stcflash,但是我们使用stcgal就行了,stcgal比stcflash更强大。

安装stcgal需要依赖Python 3.2以上版本,所以需要先安装Python 3.x,安装完后,我们就可以使用以下命令安装stcgal

pip3 install stcgal

安装USB转串口驱动CH341_MAC

这个就非常简单了,下载地址点击进入即可CH341SER_MAC_ZIP,解压后,按照README.pdf操作即可。

安装完成后,用USB连接电脑,使用以下命令查看是否有串口出现

ls /dev/cu.wchusbserial*或 ls /dev/cu.*

192:~ ichabodcrane$ ls /dev/cu.*
/dev/cu.Bluetooth-Incoming-Port	/dev/cu.wchusbserial1410
/dev/cu.usbserial-1410

注意:在10.15.x以上版本可能会出现安装驱动后,连接USB使用以上方法查看不到串口的情况。如果出现这种情况请根据以下方法操作,如果正常可以忽略

  1. 按住电源键重启,立即按住Command+R进入Recovery模式。
  2. 在菜单上选择,打开Terminal控制台。
  3. 运行命令: csrutil enable --without kext
  4. 输入:reboot
  5. 系统重启后,访问CH341SER_MAC_ZIP下载驱动、安装即可。

上面搭建环境都弄好后,我们就可以编码了,然后使用sdcc编译此代码看看效果。

实例代码Demo_Cycle.c

#include <8052.h>

#define uint_8 unsigned int

uint_8 len = 8;
void delay_ms(uint_8 ms);

void main()
{

    uint_8 i;

    while (1)
    {
        P0 = 0xff;
        for (i = 0; i < len; i++)
        {
            P0 = P0 >> 1;
            delay_ms(100);
        }

        P0 = 0xff;
        for (i = 0; i < len; i++)
        {
            P0 = P0 << 1;
            delay_ms(100);
        }
    }
}

void delay_ms(uint_8 ms)
{
    uint_8 i, j;
    for (i = ms; i > 0; i--)
        for (j = 110; j > 0; j--)
            ;
}

编译代码

如果编译没有任何报错,就代表编译通过了。

sdcc Demo_Cycle.c

然后在文件相同路径下会多出几个以下文件,我们主要用到的是.ihx.hex的文件

Demo_Cycle.asm Demo_Cycle.lst Demo_Cycle.map Demo_Cycle.mem Demo_Cycle.rel Demo_Cycle.rst Demo_Cycle.sym Demo_Cycle.lk Demo_Cycle.ihx

烧录程序

stcgal -P stc89 -p /dev/cu.wchusbserial1410 Demo_Cycle.ihx

终端会在这里等待,直到你把单片机重新上电后,会继续执行烧录工作。重新上电后效果:

~ ichabodcrane$ stcgal -P stc89 -p /dev/cu.wchusbserial1410 Demo_Cycle.ihx
Waiting for MCU, please cycle power: done
Target model:
  Name: STC90C52RC
  Magic: F022
  Code flash: 8.0 KB
  EEPROM flash: 6.0 KB
Target frequency: 11.950 MHz
Target BSL version: 4.3C
Target options:
  cpu_6t_enabled=False
  bsl_pindetect_enabled=False
  eeprom_erase_enabled=False
  clock_gain=high
  ale_enabled=True
  xram_enabled=True
  watchdog_por_enabled=False
Loading flash: 230 bytes (Intel HEX)
Switching to 19200 baud: checking setting testing done
Erasing 2 blocks: done
Writing flash: 640 Bytes [00:00, 1585.57 Bytes/s]                                                                                   
Setting options: done
Disconnected!

Makefile编写

因为命令行每次都要输入比较麻烦,我们可以编写Makefile文件使用make命令做编译、烧录和清理。这里不对Makefile语法做相关介绍,有兴趣可以到网上查询相关信息,以下是一个简单的单文件Makefile文件:

CC = sdcc # 编译工具
CLEAN_SUFFIXS = .asm .lst .map .mem .rel .rst .sym .lk .hex .ihx # 生成的后缀文件,烧录完后清除

stctool = stcgal # 烧录工具
protocol = stc89 # stc89型号
upload_port = /dev/cu.wchusbserial1410 #串口
badu = 9600 #波特率

# 编译
%.rel: %.c
	$(CC) -c $<

# 编译输出.hex文件
%.hex: %.rel
	@echo "编译中......"
	$(CC) $< -o $@
	@echo "开始烧录程序......"
	$(stctool) -b $(badu) -P $(protocol) -p $(upload_port) $@
	@echo "清除文件...."
	make clean

#清理编译文件
clean:
	RM $(foreach i, $(CLEAN_SUFFIXS), *$(i))

只需要使用以下命令就能开始编译、烧录和清理的工作

make Demo_Cycle.hex

效果

~ ichabodcrane$ make Demo_Cycle.hex
sdcc  -c Demo_Cycle.c
编译中......
sdcc  Demo_Cycle.rel -o Demo_Cycle.hex
开始烧录程序......
stcgal  -b 9600  -P stc89  -p /dev/cu.wchusbserial1410  Demo_Cycle.hex
Waiting for MCU, please cycle power: done
Target model:
  Name: STC90C52RC
  Magic: F022
  Code flash: 8.0 KB
  EEPROM flash: 6.0 KB
Target frequency: 11.952 MHz
Target BSL version: 4.3C
Target options:
  cpu_6t_enabled=False
  bsl_pindetect_enabled=False
  eeprom_erase_enabled=False
  clock_gain=high
  ale_enabled=True
  xram_enabled=True
  watchdog_por_enabled=False
Loading flash: 230 bytes (Intel HEX)
Switching to 9600 baud: checking setting testing done
Erasing 2 blocks: done
Writing flash: 640 Bytes [00:00, 1001.76 Bytes/s]                                                                                   
Setting options: done
Disconnected!
清除文件....
make clean
RM  *.asm  *.lst  *.map  *.mem  *.rel  *.rst  *.sym  *.lk  *.hex  *.ihx

最终运行后,在单片机上看到的是一个循环亮灯的效果,从高位开始到低位,再从低位到高位循环点亮。最后给出我的个人公众号:Micro码上有,不定时更新分享程序开发相关的一些知识,时间过得特别快,又是时候讲拜拜咯`。

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: 学习51单片机C语言编程,可以帮助我们更深入地理解嵌入式系统的原理和工作方式。对于初学者来说,掌握一份适合自己的学习资料非常重要。 要学习51单片机-C语言版,可以阅读《手把手教你学51单片机-C语言版pdf》这本电子书,这本书内容丰富,讲解详细,配合实例编程,非常适合初学者自学。以下是学习本书的几个关键点: 第一,掌握基本的硬件知识,包括单片机的结构和特性,尤其是各种寄存器的作用和配置方法。 第二,了解C语言编程基础,尤其是语法、数据类型、运算符、控制结构、函数等,这是编写单片机程序的基础。 第三,通过实例编程加强对知识的理解和运用能力。例如,可以尝试写一些简单的IO控制、定时器中断、串口通讯等程序。 第四,可以搭配相应的开发板和开发环境进行实践学习。例如,可以使用STC89C51开发板和Keil或SDCC开发环境。 总之,《手把手教你学51单片机-C语言版pdf》这本电子书是一个不错的学习资料,但也需要具备一定的基础知识和耐心,可以结合其他资料和实践不断提高自己的能力。 ### 回答2: 学习51单片机-c语言版, 需要基础的C语言编程知识。在学习前,先要熟悉C语言的数据类型、循环、判断及函数等语法结构,并掌握C语言的编写方法。 在学习51单片机-c语言版之前,需要准备好学习环境,如下载并安装Keil软件, 安装并关联好相应的单片机模拟器。Keil软件中有类似于记事本的编辑窗口用来编写C语言代码, 以及编译,调试和下载程序到单片机等功能。 在学习时,可以选择一些简单的例程开始学习,逐步理解其代码逻辑,了解基本的寄存器操作和中断等知识。可以从LED灯等简单的实验开始,逐渐增加难度和功能的复杂度。 同时,可以参考一些权威的学习资料如《单片机原理与应用》、《51单片机学习与应用》等相关书籍,或结合网络资源进行学习。在学习过程中,需要勤加练习,多编写代码进行实践,同时多与他人交流学习体会和技术问题。通过坚持不断的学习和练习,便可以逐步掌握51单片机-c语言版编程技巧,提高自己的单片机应用开发能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MatchSir

你的鼓励将是我创作最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值