- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
。
-项目概述- 。
最开始学习51的时候,总是“冷启动”,手动按动开关重启,下载一次程序重启一次,觉得很麻烦 。
而且另一方面,我的最小系统板是有自带电源的,那么这根数据线也显得有些多余了,于是打算做一个“无线自动烧录器”.
目的:
材料清单:51系统板一块(STC8G1K08),ESP-01S模块两个(收发),CH340G下载模块 。
注意:我用的是51单片机是STC8G系列,对于老版本的STC89C52能否使用特定指令重启,需要自己去查看数据手册,具体位置下面会提到.
。
-成品预览- 。
。
-项目框架- 。
这个项目硬件逻辑很简单,主要在于特定指令重启这一块,查阅文档很麻烦,整体流程如下:
。
-硬件资料,代码- 。
根据STC8G芯片文档(下文文末):
。
一共有四种方法,这里我选择串口特定指令检测复位,其余方法可以自己查阅文档调试.
关键代码:
#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 ~ 。
。
。
-项目槽点- 。
切记。新系列需要配置AUXR寄存器,具体配置方式查看数据手册,也可以STC烧录器自带的 。
。
最后此篇关于ESP-01S无线下载器的文章就讲到这里了,如果你想了解更多关于ESP-01S无线下载器的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
回车和有什么区别 push ebp mov ebp, esp sub esp, imm 说明?有性能差异吗?如果是这样,哪个更快,为什么编译器总是使用后者? 与离开和类似 mov esp, eb
我有以下 NASM 汇编程序,运行时间约为 9.5 秒: section .text global _start _start: mov eax, 0 mov ebx, 8 loop:
根据互联网上的许多教程,据说您可以找到以下结构的命令行参数: 然而,在花一些时间测试我为 NASM 编写的汇编代码后,我发现 ESP 的值是一些数字,例如: -144807325 实际参数计数存储在更
1. 设备烧录的程序rainmaker自带gpio示例 2. swaggerapis登录账户 3. 调用Rainmaker封装好的py
文章结构: 项目概述 成品预览 项目框架 硬件资料,代码 项目槽点 -项目
我是一个学习汇编的初学者,在函数调用之前保留 ESP 寄存器时,通过加法或减法来实现是否重要?很难解释,请考虑以下内容 mov esi, esp sub esp, 12 // on 32bit OS
我反汇编了一个小程序,该程序询问用户的姓名,然后输出“Hello + [user's_name]” 这是反汇编的输出: 主要功能: 打招呼功能: 我注意到,对于 main() 函数,ESP 寄存器递减
我正在从事 Visual Studio 项目项目 A(在编译时生成静态库) 有课 using namespace mynamespace; class projectAclass { virtua
从上图中可以看出,函数setAttribute 时发生了错误。从它的调用返回。 有谁知道如何解决图中显示的这个错误?我知道这是调用约定之间的错误,但是如何找出 setAttribute 的调用约定是什
我用 QT 制作了一个 .dll 文件并将其加载到我的应用程序中。当它即将从一个函数返回时,我收到: The value of ESP was not properly saved across a
我找不到答案。从我读到的 %ebp 有 32 位,将 %esp 移动到 %ebp 你仍然有 32 位,然后减去 70 到 32,我不明白其余的。我对此很陌生,所以我不是很精通。请给出详细的解释。谢谢!
我有一个从 c 程序调用的简单汇编函数,我必须使用需要内存操作数的指令( FIDIV )。 将值移动到 [esp - 2] 是否安全并在下一条指令中使用它,或者以这种方式使用堆栈永远不会安全? 我知道
以下陈述有什么区别? mov %eax,%esp mov %eax,(%esp) 我正在努力散布一个二元炸弹,但在处理一些 mov 时遇到了问题。和 leal在程序集的早期命令。 最佳答案 这会将 %
我使用 duinotech XC-3800 在 ESP32 芯片上使用 ESP IDF 测试运行裸机代码,并在图像大小方面获得以下结果。 ESP32 的分析二进制大小 文件夹结构 温度/ 主要的/ C
我正在 OS X(32 位)上执行系统调用,如下所示: push 123 mov eax, 1 sub esp, 4 int 0x80 而且我不太明白 sub esp, 4 间隙。 我在某处读到,BS
当我在 gdb 中反汇编 main() 时,它会重新调整此结果: 0x0804854c : push ebp 0x0804854d : mov ebp,esp 0x0804
我目前正在学习英特尔处理器的汇编。既然堆栈“向下增长”,为什么我们必须添加才能访问特定元素 [ebp + 8] ;; This will access the first param 我知道我们必须跳
我试图了解如何将堆栈与程序集一起使用,在我尝试时,我在 SO 中的一个问题中遇到了以下代码,即: push ecx mov eax, 4 mov ebx, 1 mov ecx, result m
我有这个 C 代码部分: #include void main() { int n, array[1000], c, d, t, e; char step; puts("Enter a number
我不太明白为什么 gcc 在调用函数之前要先将 esp 减去 12。 pushl %ebp movl %esp,%ebp sub $12,%esp socke
我是一名优秀的程序员,十分优秀!