打印
[STC单片机]

STC单片机不断电下载程序

[复制链接]
1389|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
时间长了,居然把这个简单实用的功能忘了,重新整理了下,适用于STC89、STC12、STC15、STC8等所有型号的STC单片机快速高效下载程序。完整工程可查看附件。


STC单片机不断电下载程序.rar (723.45 KB)

原理:先测试出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监控区
       }      
    }
}



使用特权

评论回复

相关帖子

沙发
ahongW| | 2020-10-8 20:14 | 只看该作者
STC出厂时如果是自动进引导的话就方便了,这样在烧录第一个程序不需要手动冷启,烧录后再用串口命令控制免冷启烧录。

使用特权

评论回复
板凳
wjhhhh| | 2020-10-9 14:37 | 只看该作者
这样一来用户程序运行的时候,只要串口接收到的数据里面有一个0x7F就要坏事?  外面发给用户程序的数据能躲过7F吗?  很担心.       好像是收到连续几个7F   回答些什么暗号   交互若干次才行吧 ?

使用特权

评论回复
地板
ahongW| | 2020-10-10 09:00 | 只看该作者
wjhhhh 发表于 2020-10-9 14:37
这样一来用户程序运行的时候,只要串口接收到的数据里面有一个0x7F就要坏事?  外面发给用户程序的数据能躲过 ...

STC软件可以设置自定义的命令的,在发送7F之前会先发送定义的命令,虽然没有回复交互,应该也不会有问题了。

使用特权

评论回复
5
coody| | 2020-10-11 22:17 | 只看该作者
STC ISP本身有一个选项“收到用户命令后复位到ISP监控程序区”就是给不断电下载用的,我开发程序一直用的这个功能,收到我自定义的命令字符串后,延时1秒,复位到ISP区,十几年来一直好用。

使用特权

评论回复
6
集成| | 2020-11-18 19:01 | 只看该作者
高,实在是高

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

66

帖子

2

粉丝