STC不断电下载

来源:互联网 发布:mind map软件 编辑:程序博客网 时间:2024/05/16 00:30

STC每次烧录都要重新断开电源再次打开,十分麻烦,于是想要实现不断电下载。我们知道,STC单片机中有两个数据存储区,一个是固化好的ISP程序数据区,另一块是用户数据区。STC是通过ISP来下载。ISP的作用就是将上位机发送来的数据写到用户区,即将上位机发来的程序写到ROM中。stc启动分为两种一种是冷启动就是从断电在上电,另一种就是普通的复位启动。第一种启动是从单片机出场就固化好的ISP启动区来启动程序,如果此时串口没有检测到有合法的下载流就会跳到用户代码区如果检测到合法的下载流就会执行ISP开始下载程序。

/*    通过串口来烧录程序。开启串口中断,实时监测上位机是否有发送合法的下载流,如果收到合法的下载流就跳到ISP去开始执行ISP程序*/#include "reg51.h"#define FSOC    11059200L#define BAUD    115200#define RELOAD  (65536 - FSOC / 4 / BAUD)#define ISPPROGRAM()    ((void (code*)())0xf000)sfr AUXR = 0x8e;void uart() interrupt 4 using 1{    static char cnt7f = 0;    if(TI) TI = 0;    if(RI)    {        if(SBUF == 0x7f)//检测下载流,上位机不断向串口发送0x7f,如果检测到多次,那么就可以下载        {            if(++cnt7f >= 16)            {                ISPPROGRAM();            }        }    }}void main(){    SCON = 0X50;    AUXR = 0X40;    TH1 = RELOAD >> 8;    TL1 = RELOAD;    TR1 = 1;    ES = 1;    EA = 1;    while(1)    {        //User Code    }}/*通过复位按键来烧录程序。ISP_CONTR有一个位是用来表示是否复位到ISP,还是用户区的,通过设定ISP_CONTR来选择复位时从哪里启动程序。*/#include "reg51"sfr ISP_CONTR=0xe7;         //软复位寄存器声明void main(void){    //复位后执行程序,当执行到这句时,就会跳到ISP区域,这样就可以直接烧录程序了    ISP_CONTR = 0x60;  //软复位,从ISP监控区启动    while(1)    {             //用户程序    }}
0 0
原创粉丝点击