美文网首页
51单片机-在Mac搭建环境sdcc+stcgal

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

作者: Dreams小程序插件 | 来源:发表于2020-05-06 16:36 被阅读0次
    • 主要内容
      • 搭建开发环境
      • 安装SDCC
      • 安装stcgal
      • 安装USB转串口驱CH341_MAC
      • 实例代码Demo_Cycle.c
      • 编译代码
      • 烧录程序
      • Makefile编写

    搭建开发环境

    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码上有,不定时更新分享单片机的一些知识,时间过得特别快,又是时候讲拜拜咯`。

    相关文章

      网友评论

          本文标题:51单片机-在Mac搭建环境sdcc+stcgal

          本文链接:https://www.haomeiwen.com/subject/nfvwghtx.html