STC12单片机实现自动下载程序

本文介绍了STC单片机的启动流程,重点分析了ISP程序区的作用及其与用户程序区之间的交互过程。文章详细解释了在没有外部干预的情况下,单片机如何自动进入编程模式,并通过上位机软件完成用户程序的更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在STC单片机中有两个程序区,用户程序区ISP程序区

单片机上电后(冷启动,并非外部手动复位或看门狗复位),先会运行ISP程序,检测是否有合法的下载命令流,占时几十毫秒到几百毫秒,
如果没有合法的下载命令流,则立即运行用户程序。
如果合法的下载命令流,则ISP监控程序开始与ISP下载软件通信,软件也会进入编程模式,向监控程序发送程序码,监控程序接收程序码,并将其写入用户程序区中。
在编程完毕,对程序校验成功后,用户程序立即生效,开始运行用户程序。

没有在软件通过串口配合上位机对IAP_CONTR寄存器进行设置(比如下面的程序),那么STC-ISP尝试与MCU握手连接的时候,是以“最低波特率”设置项中的波特率不断的从串口发送“0x7F”信号,直到上电冷启(或者软复位至ISP)经几十毫秒到几百毫秒检测下载命令流后,才停止发送“0x7F”信号。
若有进行IAP_CONTR的设置,便进行相应的设置相关命令进行。

#include <stc12.h>

unsigned char RevData;
//void UartInit()   
//{
//  PCON &= 0x7F;   
//  SCON = 0x50;    
//  AUXR &= 0xBF;   
//  AUXR &= 0xFE;   
//  TMOD &= 0x0F;   
//  TMOD |= 0x20;   
//  TL1 = 0xFD; 
//  TH1 = 0xFD; 
//  ET1 = 0;        
//  TR1 = 1;        
//}
void UartInit()
{
    AUXR &= 0xF7;       
    S2CON = 0x50;       
    AUXR &= 0xFB;       
    BRT = 0xFD; 
    AUXR |= 0x10;   
}


void main()
{
    UartInit();
    EA = 1;
    ES = 1;
    P0 = 0;
    while(1);
}


void Uart() interrupt 4
{
    if(RI)
    {
        RI = 0;
        RevData = SBUF;
        if(RevData == 0x0a)
        {

            IAP_CONTR=0x60; 
        }
    }
    if(TI)
    {}
}

这里写图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReCclay

如果觉得不错,不妨请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值