标题: STC单片机不断电下载程序 [打印本页]
作者: 无量寿经 时间: 2020-10-8 15:02
标题: STC单片机不断电下载程序
本帖最后由 无量寿经 于 2020-10-8 15:06 编辑
时间长了,居然把这个简单实用的功能忘了,重新整理了下,适用于STC89、STC12、STC15、STC8等所有型号的STC单片机快速高效下载程序。完整工程可查看附件。
STC单片机不断电下载程序.rar
(723.45 KB, 下载次数: 56)
原理:先测试出STC-ISP下载软件下发的串口命令,在程序中开启串口中断,中断接收得到下载命令就执行一条单片机复位命令,程序就自动下载进去了,整个过程不断电,也不需要操作复位按钮,下载过程不需要触碰硬件。
图1 下载最低波特率9600
图2 接收波特率9600
接收波特率9600,接收到的连续数据为7F,接收波特率不同,结果也会不一样。
知道了STC-ISP软件下发的数据,我们程序开启串口接收中断,判断接收的数据如果是这里7F,让单片机执行一条复位命令,程序就下载进去了。
#include "STC15W4K.H" // 包含 "STC15W4K.H"寄存器定义头文件
unsigned char num=0; // 存放接收到的1个字节的数据
void delay500ms(void)
{
unsigned char i,j,k;
for(i=93;i>0;i--) //注意后面没分号
for(j=235;j>0;j--) //注意后面没分号
for(k=125;k>0;k--); //注意后面有分号
}
void UART_init(void)
{
// 下面代码设置定时器2
T2H = 0xFD; //波特率:9600 /22.1184MHZ,1T
T2L = 0xC0; //波特率:9600 /22.1184MHZ,1T
AUXR = 0x15; // 0001 0101,T2R=1启动T2运行,T2x12=1,定时器2按1T计数,S1ST2=1
// 下面代码设置定串口1
SCON = 0x50; // 0101 0000 SM0.SM1=01(最普遍的8位通信),REN=1(允许接收)
// 下面代码设置中断
ES = 1; //开串口1中断
EA = 1; //开总中断
}
void main()
{
UART_init();
P00=0;
delay500ms();
P00=1;
while(1)
{
P01=!P01;
delay500ms();
}
}
void UART1(void) interrupt 4 // 串行口1中断函数
{
if(TI)
{
TI = 0;
}
if(RI)
{
RI = 0;
num = SBUF;
if (num==0x7F)
{
IAP_CONTR = 0x60; //0110,0000 软复位到系统ISP监控区
}
}
}
作者: 51hei团团 时间: 2020-10-8 16:19
这个在调试程序的时候,确实很方便,谢谢版主,牛逼
作者: liuhailan5757 时间: 2020-10-8 17:53
是不是程序里面加上这一段就可以了不断电下载了,调试OK后,再把这段程序删掉 是不是这样?
作者: guysxpf 时间: 2020-10-9 06:46
还有一种方法是通过ne555定时器电路自动断电再自动上电。免去第二片单片机,节省成本
作者: aking991 时间: 2020-10-9 09:10
你这种只适用不带串口通讯的工程或项目,如果有用到串口通讯就不可能用这样就能解决的事,因为在通讯过程中也完全有接到7F这个字符的数据
作者: zhlzhang 时间: 2020-10-9 09:48
在串口通讯程序里面加一个复位程序就可以实现了file:///C:/Users/zhang/Desktop/%E4%B8%8B%E8%BD%BD.png
作者: laopihappy123 时间: 2020-10-9 22:00
您好 您的这种做法是ne555的延时器的应用吗? 这样子不还是要重新上电吗、。。。。
作者: liyezhao2019 时间: 2020-10-16 10:57
这么麻烦干啥 弄个鼠标按键搞定
作者: zmc419 时间: 2021-12-16 21:42
连续重复检测进行计数,可以避免
作者: vscos 时间: 2021-12-17 00:15
只是这方法写的程序老要带多一点代码?
作者: vscos 时间: 2021-12-17 00:18
这个方法老要带点一点没用的代码?芯片烧好程序了,就是多余的了,用来测试倒还有点用
作者: vscos 时间: 2021-12-17 00:27
这个可以发送多个同样的字节就行了,网上有人做出来了,收到十个7f才下启动下载
作者: vscos 时间: 2021-12-17 00:32
有种USB转UART接口的下载器,我测试过了,他们做的是接收到40个7F就自动断电重启的方法下载的
作者: aking991 时间: 2021-12-17 08:22
这种只适用无校验位的程序,如果项目是偶校验或是其它的呢,能实现吗
作者: KTZL 时间: 2021-12-17 09:17
好文章!谢谢分享!
作者: zmc419 时间: 2021-12-18 21:10
验证通不过,IAP_CONTR = 0Xe0也许可以
作者: snsoyang 时间: 2022-3-19 21:59
刚试了一下的确可行.
作者: joyb 时间: 2023-8-26 18:52
第一次需要断电,后续调试方便
作者: cnfloatleaf 时间: 2023-8-26 21:30
好办法,人多力量大,相互学习才能进步
作者: 06123 时间: 2023-11-6 16:23
可行,可字自定义字节内容和字节数
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |