-项目概述-

最开始学习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 ,电平转换电路如下

  

ESP-01S无线下载器的更多相关文章

  1. 修复ST-LINK V2下载器 | ST-LINK V2下载器烧录DAPLink固件

    前言 某宝上的STLINK V2下载器偶尔会坏掉,我们尝试修复一下 1.材料 (1)完好的STLINK V2下载器和坏掉的下载器各1个: (2)固件:https://gitee.com/Cai-Zi/ ...

  2. 用python实现的百度音乐下载器-python-pyqt-改进版

    之前写过一个用python实现的百度新歌榜.热歌榜下载器的博文,实现了百度新歌.热门歌曲的爬取与下载.但那个采用的是单线程,网络状况一般的情况下,扫描前100首歌的时间大概得到40来秒.而且用Pyqt ...

  3. .NET破解之图片下载器

    自去年五月加入吾爱后,学习了三个月,对逆向破解产生了深厚的兴趣,尤其是对.NET方面的分析:但由于这一年,项目比较忙,事情比较多,破解这方面又停滞了许久,不知道还要好久. 前些天,帮忙批量下载QQ相册 ...

  4. 用 python 实现一个多线程网页下载器

    今天上来分享一下昨天实现的一个多线程网页下载器. 这是一个有着真实需求的实现,我的用途是拿它来通过 HTTP 方式向服务器提交游戏数据.把它放上来也是想大家帮忙挑刺,找找 bug,让它工作得更好. k ...

  5. .NET破解之太乐地图下载器【非暴破】

    不知不觉,接触破解逆向已经三个月了,从当初的门外汉到现在的小白,这个过程只有经历过才知道其中的苦与乐: 有无知.困惑.痛苦.惊喜.彻悟.欣慰…… 有无助的软件脱壳,茫然的代码分析,有无趣的反复测试, ...

  6. 【图文详解】python爬虫实战——5分钟做个图片自动下载器

    python爬虫实战——图片自动下载器 之前介绍了那么多基本知识[Python爬虫]入门知识,(没看的先去看!!)大家也估计手痒了.想要实际做个小东西来看看,毕竟: talk is cheap sho ...

  7. ISoft(开源)专用下载器

    继 两年的坚持,最后还是决定将ISoft开源 之后,今天再共享一款ISoft专用下载器小工具.这款工具是一年前开发的,也是一直闲置着没去扩展更新.当时开发出来就是仿穿越火线专用下载器的样式来做的,现在 ...

  8. Python实战:美女图片下载器,海量图片任你下载

    Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习 ...

  9. 一个urllib2构建的html下载器的代理组件的实现方案

    调用栈/函数链如下: 情形一:下载器初始化时 __init__ buildOpener#构建opener newProxy4Opener#装备代理 getNewProxy#获取代理 maintainP ...

  10. python-selenium实现的简易下载器,并常见错误解决

    简易下载器的实现 支持代理.失败重试.确保包含指定ID元素(可根据需求自定义修改) # coding: utf-8 from Utils import logging from bs4 import ...

随机推荐

  1. JUC(7)四大函数式接口

    文章目录 1.四大函数式接口(必须掌握) 1.1 function 1.2 Predicate 1.3 Consumer 1.4 Supplier 1.四大函数式接口(必须掌握) 1.lambda表达 ...

  2. 人生苦短,我用 python 之入门篇

    Python 是一种跨平台的,开源的,免费的,解释型的高级编程语言,它具有丰富和强大的库,其应用领域也非常广泛,在 web 编程/图形处理/黑客编程/大数据处理/网络爬虫和科学计算等领域都能找到其身影 ...

  3. 七、Ajax请求

    七.Ajax请求 客户端(浏览器)向服务端发起请求的形式: 地址栏:GET 超链接标签:GET form表单:GET或POST Ajax(重要):GET或POST或PUT或DELETE AJAX(As ...

  4. pod(九):污点taint 与容忍度tolerations

    目录 一.系统环境 二.前言 三.污点taint 3.1 污点taint概览 3.2 给节点添加污点taint 四.容忍度tolerations 4.1 容忍度tolerations概览 4.2 设置 ...

  5. hwlog--limiter.go

    // Copyright(C) 2021. Huawei Technologies Co.,Ltd. All rights reserved.// Package limiter implement ...

  6. c++ const和指针

    const int *p: 定义指针,指向的变量的值不能修改(指向整型常量或普通整型,但值不能通过指针修改) int const *p: 同上 int * const p=&a: 一直指向a, ...

  7. python3小技巧总结(实时更新)

    1.列表解析 如果一个想将一个列表中的大于0的数字过滤,一般可能会用到lambd结合filter,或者就是直接遍历,不过最好的解决办法是这样: b = [1,0,-1,-2] a = [i for i ...

  8. Iris_data_analysis

    SVM调用实例--鸢尾花 任务描述: 构建一个模型,根据鸢尾花的花萼和花瓣大小将其分为三种不同的品种. 数据集: 每一行数据由4个特征值及1个目标值组成,4个特征值分别为:萼片长度.萼片宽度.花瓣长度 ...

  9. C++日期和时间编程总结

    一,概述 二,C-style 日期和时间库 2.1,数据类型 2.2,函数 2.3,数据类型与函数关系梳理 2.4,时间类型 2.4.1,UTC 时间 2.4.2,本地时间 2.4.3,纪元时间 2. ...

  10. form表单里的button 等元素不能使用margin: 0 auto;

    记得把form和button都设为display:block; 就能用margin: 0 auto;水平居中了