-项目概述-

最开始学习51的时候,总是“冷启动”,手动按动开关重启,下载一次程序重启一次,觉得很麻烦

而且另一方面,我的最小系统板是有自带电源的,那么这根数据线也显得有些多余了,于是打算做一个“无线自动烧录器”。

目的:

  • 程序发送特定重启指令实现“热启动”。
  • ESP-01S作为无线串口使用。
  • 烧录器端口指定。

材料清单:51系统板一块(STC8G1K08),ESP-01S模块两个(收发),CH340G下载模块

注意:我用的是51单片机是STC8G系列,对于老版本的STC89C52能否使用特定指令重启,需要自己去查看数据手册,具体位置下面会提到。

-成品预览-

-项目框架-

这个项目硬件逻辑很简单,主要在于特定指令重启这一块,查阅文档很麻烦,整体流程如下:

-硬件资料,代码-

  • ISP软复位方法:

    根据STC8G芯片文档(下文文末):

  

    一共有四种方法,这里我选择串口特定指令检测复位,其余方法可以自己查阅文档调试。

    关键代码:

  • IAP_CONTR = 0x60; //复位到系统区
  • #include "reg51.h"
    #include "intrins.h"
    #define FOSC 11059200UL
    #define BR115200 (65536 - FOSC / 4 / 115200)
    sfr IAP_CONTR = 0xc7;
    sfr AUXR = 0x8e;
    sfr P3M0 = 0xb2;
    sfr P3M1 = 0xb1;
    char stage; /*
    每一次读取一个字符,当当前字符满足要求,(每一个case的if语句作用)
    就判断下一位是否满足要求,如果全部满足,(每一行stage作用)
    就执行跳转指令。如果当中有一位不满足,
    就从新跳转到第一位,重新进行判断。(go to 语句作用)
    */
    void UartIsr() interrupt 4 //串口中断服务程序
    {
    char dat;
    if (TI)
    {
    TI = 0;
    }
    if (RI)
    {
    RI = 0;
    dat = SBUF;
    switch (stage)
    {
    case 0:
    default:
    L_Check1st:
    if (dat == 'S') stage = 1;
    else stage = 0;
    break; case 1:
    if (dat == 'T') stage = 2;
    else goto L_Check1st;
    break; case 2:
    if (dat == 'C') stage = 3;
    else goto L_Check1st;
    break; case 3:
    if (dat == 'I') stage = 4;
    else goto L_Check1st;
    break; case 4:
    if (dat == 'S') stage = 5;
    else goto L_Check1st;
    break; case 5:
    if (dat == 'P') stage = 6;
    else goto L_Check1st;
    break; case 6:
    if (dat == '$') //当检测到正确的用户下载命令时
    IAP_CONTR = 0x60; //复位到系统区
    else goto L_Check1st;
    break;
    }
    }
    }
    void main()
    {
    P3M0 = 0x00;
    P3M1 = 0x00;
    SCON = 0x50;
    TMOD = 0x00;
    AUXR = 0x40;
    TH1 = BR115200 >> 8; //设置串口波特率为 115200
    TL1 = BR115200;
    TR1 = 1;
    ES = 1;
    EA = 1;
    stage = 0;
    while (1)
    {
    }
    }

  

项目全部文件:

个人博客下方私信领取

http://potatoworld.top:5800/

最后,下载成功,非常nice ~

-项目槽点-

  • 对于STC新系列的单片机,串口寄存器相关的配置还是交给软件去做吧,想要自己配置练练手的拿STC89系列就够了

      切记。新系列需要配置AUXR寄存器,具体配置方式查看数据手册,也可以STC烧录器自带的

    

  • 注意电平转换,5V转3.3V ,电平转换电路如下

  

最新文章

  1. 关于印发利用DEM确定耕地坡度分级技术规定(试行)的通知
  2. STM32F4读写内部FLASH【使用库函数】
  3. 【原】Linux Raid 实验
  4. CentOS6.5菜鸟之旅:安装rpmforge软件库
  5. MySQL远程访问授权
  6. C#学习笔记(第1周作业)
  7. 如何计算IP地址及CIDR(收藏)
  8. MySQL ibdata1撑爆占满磁盘空间
  9. java实现.net中的枚举
  10. .NET基础拾遗(3)字符串、集合和流3
  11. SaltStack Job管理
  12. [Bayesian] “我是bayesian我怕谁”系列 - Gaussian Process
  13. 【笔记】nodejs读取JSON,数组转树
  14. 对Javascript到底了解多少,一测便知道
  15. 使用原生JS定位网页元素
  16. SpringCloud系列——SSO 单点登录
  17. 转:图解C#的值类型,引用类型,栈,堆,ref,out
  18. MySQL免安装版错误解决方案
  19. cp显示进度条
  20. VS2013 未找到与约束。。。

热门文章

  1. vue+spirngboot 分离技术实现图书信息的增删改查(改造这学期的课程设计【1】)
  2. 22.-CSRF攻击
  3. Windows7下驱动开发与调试体系构建——1.驱动开发的环境准备
  4. 十七、Job与Cronjob
  5. 中小型企业综合项目(Nginx+LVS+Tomcat+MGR+Nexus+NFS)
  6. Appscan安全扫描问题-会话检测失败
  7. Asp.Net Core6.0中MediatR的应用CQRS
  8. 如何正确遵守 Python 代码规范
  9. tomcat报Address localhost:1099 is already in use
  10. Aspose.Cells设置单元格背景色不生效