发 帖  
原厂入驻New
[经验]

STC单片机不断电下载程序

2020-10-8 15:37:18  96 STC单片机
分享
0
时间长了,居然把这个简单实用的功能忘了,重新整理了下,适用于STC89、STC12、stc15、STC8等所有型号的STC单片机快速高效下载程序。完整工程可查看附件。
STC单片机不断电下载程序.rar (723.45 KB, 下载次数: 2)

原理:先测试出STC-ISP下载软件下发的串口命令,在程序中开启串口中断,中断接收得到下载命令就执行一条单片机复位命令,程序就自动下载进去了,整个过程不断电,也不需要操作复位按钮,下载过程不需要触碰硬件。


  1   下载最低波特率9600

2.jpg
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监控
       }      
    }
}






评论

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发经验
关闭

站长推荐 上一条 /8 下一条

快速回复 返回顶部 返回列表