vscode+platformio IDE+sdcc搭建51单片机开发环境(win764)

vscode+platformio IDE+sdcc搭建51单片机开发环境,使用的单片机是STC89C52RC,最终我们使用单片机引脚的pwm输出实现两颗led拖尾交替输出,模拟警车上的灯的一个效果。

依然老套路,安装在虚拟机里,为什么呢?为了模拟一个完全从0开始的环境。
首先准备需要的软件
1.

VSCODE,这个安装此处不再赘述,网上有很多教程,基本就是点下一步就完成了。

2.

vscode插件,其中包括 platformIO IDE,这是一个单片机开发的集成环境,内部直接包含编译器,可以帮助我们链接,编译,生成2进制文件,等于把makefile该干的事都干了。虽然它自称是IDE,但它是以插件的形式安装在其他编辑器或IDE上的IDE。

3.

二进制文件下载软件,STC官方提供的一个软件,后面会说明。

首先我们安装vscode需要安装的插件

1.中文插件

vscode+platformio IDE+sdcc搭建51单片机开发环境(win764)_第1张图片

2.C/C++ 语言包,微软官方提供的插件,可以做一些语法检查,智能提示等。

vscode+platformio IDE+sdcc搭建51单片机开发环境(win764)_第2张图片

3.platformIO IDE 这个是重头戏,功能非常强大的一个IDE,我也只是略懂皮毛,有兴趣的小伙伴可以自行百度。反正我们能知道此处他就是帮我们,链接,编译,生成二进制文件就可以了,使用的编译器是sdcc。

vscode+platformio IDE+sdcc搭建51单片机开发环境(win764)_第3张图片

安装的时间可能会有点长,等待右下角的进度条走完,安装完成以后右下角会提示重启vscode,如果还没有切换到中文环境又不认识英文,那么里面有个单词restar,看到这个单词说明装完了,直接重启vscode。

vscode+platformio IDE+sdcc搭建51单片机开发环境(win764)_第4张图片

此处可以看到我圈出来了两个地方,一个是一只蚂蚁的头,一个是房子图标,蚂蚁头是IDE的主界面,房子是创建项目的界面,然后我们点击房子,然后跟着图示操作即可。

vscode+platformio IDE+sdcc搭建51单片机开发环境(win764)_第5张图片
vscode+platformio IDE+sdcc搭建51单片机开发环境(win764)_第6张图片vscode+platformio IDE+sdcc搭建51单片机开发环境(win764)_第7张图片

上图忘记了写项目名,大家可以写一下。

vscode+platformio IDE+sdcc搭建51单片机开发环境(win764)_第8张图片

下面我们编写代码

delay.h

#ifndef __DELAY_H
#define __DELAY_H

#define MAIN_Fosc 11059200L //晶振频率,每秒


void delay_ms(unsigned int ms);
#endif

delay.c


#include 
void delay_ms(unsigned int ms)
{
    unsigned int i;
    do
    {
        i = MAIN_Fosc / 1300000;
        while (--i)
            ;
    } while (--ms);
}

led_out.h

#ifndef __LED_OUT
#define __LED_OUT

#include "mcs51/stc12.h"
#include "mcs51/8052.h"

void led_pwm_out();
void led_out();
void ztim(void) __interrupt 1;

#endif

led_out.c

#include "led_out.h"
#include "delay.h"

#define MAIN_Fosc 11059200L //晶振频率
#define LED1 P1_1           //输出1
#define LED2 P1_2           //输出2

unsigned char CYCLE;  //定义周期该数字X基准定时时间如果是10 则周期是10x 0.1ms
unsigned char PWM_ON; //定义高电平时间

void led_out()
{
    while (1)
    {
        LED1 = 0;
        LED2 = 1;
        delay_ms(100);
        LED1 = 1;
        LED2 = 0;
        delay_ms(100);
    }
}

void led_pwm_out()
{
    __bit ZFlag;
    TMOD |= 0x01; //定时器设置 0.1ms in 12M crystal
    TH0 = (65536 - 45872) / 256;
    TL0 = (65536 - 45872) % 256; //定时0.1mS
    IE = 0x82;                   //打开中断
    TR0 = 1;
    CYCLE = 50; // 时间可以调整这个是10调整8位PWM就是256步
    while (!ZFlag)
    {
        delay_ms(25); //延时时间,从一个亮度到下一个亮度的间隔时间,速度快就能看到连续效果
        PWM_ON++;     //这个使用较长延时,以便能看清楚变化过程
        if (PWM_ON == CYCLE)
        { //这个里可以添加其他程序如到最亮时候控制设备
            ZFlag = 1;
        }
    }
    while (ZFlag) //亮度递减同上,是个相反的过程
    {
        delay_ms(25); //延迟时间为20000*0.4=8000us
        PWM_ON--;
        if (PWM_ON == 0)
        {
            ZFlag = 0;
        }
    }
}

void ztim(void) __interrupt 1
{
    static unsigned char count;
    TH0 = (65536 - 100) / 256;
    TL0 = (65536 - 100) % 256; //定时0.1mS
    if (count == PWM_ON)
    {
        LED1 = 1;
        LED2 = 0; //灯灭
    }
    count++;
    if (count == CYCLE)
    {
        count = 0;
        if (PWM_ON != 0) //如果开启时间是0 保持原来状态
        {
            LED1 = 0;
            LED2 = 1; //灯灭
        }
    }
}

main.c

#define MAIN_Fosc 11059200L
#define LED1 P1_1
#define LED2 P1_2
#include "led_out.h"

void main()
{
    //led_out();

    led_pwm_out();
}

最后我们编译程序 在英文输入法下ctrl+shift+b会看到如下界面

vscode+platformio IDE+sdcc搭建51单片机开发环境(win764)_第9张图片

可以看到没有出现问题,编译成功

vscode+platformio IDE+sdcc搭建51单片机开发环境(win764)_第10张图片

然后我们找到二进制文件,将其复制到桌面

vscode+platformio IDE+sdcc搭建51单片机开发环境(win764)_第11张图片

使用这个程序将文件下载到单片机,我这里就不在虚拟机里演示了,直接在我主机上演示,虚拟机没有安装ch340驱动,懒得折腾了,装完虚拟机又得恢复了。

vscode+platformio IDE+sdcc搭建51单片机开发环境(win764)_第12张图片
vscode+platformio IDE+sdcc搭建51单片机开发环境(win764)_第13张图片

总结:

相较于stm32环境的搭建这个还是很简单的,尤其在platformIO IDE的加持下,依然是那个原则,能用开源免费的尽量用开源免费的东西,sdcc和vscode都是开源免费的,paltformIO IDE不太清楚,有兴趣的小伙伴可以查查。相较于keil sdcc最大的好处就是没人查水表,让律师函见鬼去吧,当然它也不是没有缺点,网上例程少,语法和keil略有出入,头文件名字和keil不一样,编译出的文件体积要大一些(据说是因为sdcc严格的检查机制)。

下载器用的是isp淘宝随便搜一下一大把。

遇到的问题主要还是头文件的问题,网上的例程大多是基于keil,sdcc的头文件,语法和keil c51略有出入,但不是太大,稍微有点编程功底的人应该都能解决这些问题。

最后放一张演示图

你可能感兴趣的:(vscode,ide,单片机)