对STC自动下载的疑惑,困扰很久了
前一阵子,看到一篇"STC89单片机自动下载(免断电)的方法",详细就不说了,文件已经上传了STC89单片机自动下载(免断电)的方法ourdev_655160Y3QMYP.pdf(文件大小:696K) (原文件名:STC89单片机自动下载(免断电)的方法.pdf)
PDF 如是说:
在STC单片机中有两个程序区,用户程序区与ISP程序区。单片机上电后(冷启动,
并非外部手动复位或看门狗复位),先会运行ISP程序,检测是否有合法的下载命令流,占
时几十毫秒到几百毫秒,如果没有合法的下载命令流,则立即运行用户程序。如果有合法的
下载命令流,则ISP监控程序开始与ISP下载软件通信,软件也会进入编程模式,向监控程
序发送程序码,监控程序接收程序码,并将其写入用户程序区中。在编程完毕,对程序校验
成功后,用户程序立即生效,开始运行用户程序。
我用了虚拟串口软件(Configure Virtual Serial Port Driver)观察了发送的码流确实是,图片如下:
图1ourdev_655169TC8DCW.jpg(文件大小:1.61M,只有400K以内的图片才能直接显示) (原文件名:图1.jpg)
于是我照着里面的方法写了一个C文件和一个H文件,程序如下:
C文件:
#include "ados.h"
#include<reg52.h>
void Init_Isp_Download(void)
{
TMOD=0X20;
SM0=0;
SM1=1;
REN=1;
TH1=0XFD;
TL1=0XFD;// 波特率9600
TR1=1;
EA=1;
ES=1;
}
void Receive(void) interrupt 4
{
uchar i;
uint j,k;
if(TI==1)
TI=0;
else
{
RI=0;
i=SBUF;
if(i==FLAG)
{
for(j=1000;j>0;j--)
for(k=112;k>0;k--); //经过试验,此处为延时,程序不能正常工作
ISP_CONTR=0x60;
}
}
}
H文件:
#ifndef _ADOS_H_
#define _ADOS_H_
#include<reg52.h>
#define FLAG 0x7f//启动标志
sfr ISP_CONTR = 0xe7;
void Init_Isp_Download(void);
#endif
然后打开STC的软件右侧有个自定义下载窗口,“自定义下载命令HEX”窗口里面,填写“7f”发送,程序可以实现不断电下载,之后我换了其他的十六进制
命令,点击发送烧写都不成功,但当我用虚拟串口软件观察,发现无论我用什么命令,串口发送出来的都是“7f 7f .... ”码流,图片如下:
http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_655180UVK0PY.jpg
下载命令是7f,串口的数据流 (原文件名:图2.jpg)
http://cache.amobbs.com/bbs_upload782111/files_42/ourdev_655181VXOF5V.jpg
下载命令是:f1(随意选择的),串口的数据流 (原文件名:图3.jpg)
这是何解? 7F 7F的数据是供探测波特率用的,你的进入ISP的第一条指令在最开始的时候发送 回复【1楼】little Monkey
-----------------------------------------------------------------------
太感谢了,一语中的!!
我自己截得图居然没有观察到,
狂汗...... mark研究 了解一下 文章说到:第一次下载进去以后就不用冷启动开始下载了。。。那么以后的程序还需要嵌入自动下载那段代码吗?
想研究研究!! 当然要了!不然谁来复位进入ISP程序? mark STC免手动断电下载器,使用STC15F104E模拟串口 http://bbs.mydigit.cn/read.php?tid=318226&page=1 mark 学习! 这个问题确实是提的不错! 不断电不行吧?
页:
[1]