美文网首页单片机学习程序员
Mac下单片机开发环境的搭建

Mac下单片机开发环境的搭建

作者: 緣來 | 来源:发表于2018-08-28 14:05 被阅读9次

    先来简单介绍一下51单片机:

    51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。

    单片机c语言编程是基于C语言的单片机编程。单片机的C语言采用C51编译器(简称C51)。由C51产生的目标代码短,运行速度高,存储空间小,符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言PL/M51语言目标代码混合使用。

    最近自己买了一部单片机开发板用来学习,但是大部分单片机开发环境都是基于windows Keil平台,由于自己使用的是Mac,习惯了Mac编程环境,所以中了一些资料,在Mac平台搭建了单片机的开发环境,下图是我买的单片机开发板:

    image

    下面就来介绍如何在Mac环境来搭建单片机的开发环境!

    环境说明

    操作系统:macOS High Sierra

    这是我电脑系统的版本,理论上支持Mac的所有版本

    烧录代码到单片机

    安装sdcc

    sdcc是用于Intel 8051 Maxim 80DS390和Zilog Z80的ANSI C编译器

    在Mac上可以用过 brew 来安装, brew 是Mac的包管理管理工具,就和 redhat 的 yum 和 Ubuntu 的 apt-get 一样。

    安装命令:

    $ brew install sdcc
    

    安装CH341驱动

    开发板上默认已经集成了usb转串口模块,它上面使用的CH340芯片。但是在CH340官网上面没有找到mac系统的驱动,只找到了CH341版本的mac系统驱动,根据官方文档说明,这个驱动也兼容CH340芯片,所以安装CH341版本的驱动就可以了。

    下载地址:CH341 for mac

    然后将下载好的 zip文件解压打开双击运行目录里面的ch34xInstall.pkg,根据提示一直点击下一步就可以了,最后按照提示重启电脑就可以了。

    怎么确认驱动安装成功了呢???

    将单片机连接到电脑上然后打开iTerm命令行窗口后执行:

    $ ls /dev/tty.wchusbser*
    

    如果输出类似下面的数据就说明驱动安装成功!

    $ ls /dev/tty.wchusbser*
    /dev/tty.wchusbserial1410
    

    安装烧录程序stcgal

    在linux和mac系统下使用得比较多的是stcgal

    下载地址:https://github.com/grigorig/stcgal

    下载好的这个是python脚本,所以我们需要提前安装python,一般情况下mac里面已经默认安装了python,但是最新版本只支持 python3,所以需要安装 python3 版本,我的这篇文章介绍了 python3 的安装,需要的话可以看看: https://www.fkomm.cn/article/2018/7/16/12.html

    下载后解压
    运行 ./setup.py build 以构建并 sudo ./setup.py install 来安装 stcgal。

    这样开发环境就搭建完啦,下面我们来测试一下!!!

    测试单片机跑马灯

    编写测试代码,将保存为pmd.c

    #include <8052.h> // 引用头文件
    
    
    #define ADDR0 P1_0
    #define ADDR1 P1_1
    #define ADDR2 P1_2
    #define ADDR3 P1_3
    #define ENLED P1_4
    
    
    //========= 延时 ============
    void delay_ms(unsigned int s){
    
        unsigned int x;
    
        for(s;s>0;s--){
            x = 98;
            while(x--);
        }
    }
    
    //================ 主函数 ===================
    
    void main(){
    
        unsigned char i;
        
        ENLED = 0;
        ADDR3 = 1;
        ADDR2 = 1;
        ADDR1 = 1;
        ADDR0 = 0;
    
        while(1){ //主循环
        
            P0 = 0xff;
    
            delay_ms(150);
    
            for(i = 0;i<8;i++){
                P0 = P0 <<1;
                delay_ms(150);
            }
    
            P0 = 0xff;
            
            delay_ms(150);
    
            for(i = 0;i<8;i++){
                P0 = P0 >>1;
                delay_ms(150);
            }
        }
    }
    

    使用sdcc编译程序

    sdcc默认会帮我们编译出很多目标文件,这里我们只需要.ihx后缀的文件就可以,其它的文件可以删除。

    $ sdcc pmd.c
    
    $ ls
    pmd.asm pmd.c   pmd.ihx pmd.lk  pmd.lst pmd.map pmd.mem pmd.rel pmd.rst pmd.sym
    

    将代码烧录到开发板中

    下面的参数 -P 表示使用的是stc89型号, -p /dev/tty.wchusbserial1410 表示usb串口设备 , pmd.ihx 是刚刚编译好的程序!

    ➜ $ stcgal -P stc89 -p /dev/tty.wchusbserial1410 pmd.ihx
    Waiting for MCU, please cycle power: done
    Protocol detected: stc89
    Target model:
      Name: STC89C52RC/LE52R
      Magic: F002
      Code flash: 8.0 KB
      EEPROM flash: 6.0 KB
    Target frequency: 11.088 MHz
    Target BSL version: 6.6C
    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: 203 bytes (Intel HEX)
    Switching to 19200 baud: checking setting testing done
    Erasing 2 blocks: done
    Writing flash: 640 Bytes [00:00, 1801.87 Bytes/s]
    Setting options: done
    Disconnected!
    

    这样就可以在单片机上看到你需要的效果啦!!!

    重点

    使用sdcc编译单片机程序,跟windows下面keil的c代码是有一些差别的,列表如下:

    可以看到,这个差别是非常小的。所以对于初学者来说,一定要注意不要用错了头文件的引用,虽然会报错,但还是要注意一下,提高编程的效率。其它的内容,碰到了就注意用对应的语法,碰不暂时就不用管。

    此文章同时同步到我的个人博客緣來來來 » Mac下单片机开发环境的搭建

    相关文章

      网友评论

      • 龙君璃:我也是在Waiting for MCU, please cycle power: done
        这一步 done不显示出来,
        緣來:@龙君璃 我是是rc,可能不兼容吧。。。。
        龙君璃:@緣來 应该是不支持这种芯片,89C52和89C52RC脚针有点区别,
        緣來:看看代码有没有错,我这个是正常使用的
      • 2d1a16afa407:请问下 在 Waiting for MCU, please cycle power: done
        这一步 done不显示出来什么原因呀?
        緣來:@林弘钊 可以用的,我的就是C52
        2d1a16afa407:@緣來 通电了。。一直没反应 查了下stc89c52不能用
        緣來:单片机要上电,就是关一下再开一下,和Keil一样

      本文标题:Mac下单片机开发环境的搭建

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