相信喜欢单片机的朋友都用过STC的单片机,用过STC单片机的朋友都有这种感受:实惠、易用、功能强大!就是每次下载都要冷启动特别恶心,相信很多朋友的开发板上的电源键都按烂了。

其实STC单片机可以不用免掉电下载,想要知道怎样才能免掉电下载,我们先要了解STC单片机是怎样实现串口下载的,其实STC单片机出厂时就预置了一段ISP监控程序,我们称作ISP引导码,这段ISP监控程序就好比电脑硬盘的系统引导区。我们对STC单片机上电启动时,单片机首先执行ISP引导码检测串口是否下载程序的命令,如果上位机在对单片机下载程序时,单片机检测到下载数据流就启动ISP下载功能对单片机进行程序下载,这就是我们平时实验时点击下载后按开发板电源键的过程。
        STC单片机在进行冷启动时会从ISP引导码开始执行程序,而进行热启动或按复位键软启动时是从用户程序段开始执行的。然而熟悉STC单片机的朋友知道STC单片机增加了ISP/IAP控制寄存器ISP_CONTR,用来管理ISP/IAP功能和是否软启动,其各位功能大家可参照STC公司相关资料。当我们将ISP_CONTR置为0x60时单片机自动复位从ISP引导码开始执行。由此我们在需要下载程序时将ISP_CONTR置为0x60就可以完成下载了。
    下面来介绍怎样实现
            方法一:通过按复位键来实现,STC单片机上电复位时PCON的POF=1,在按复位键复位时POF=0。所以我们在程序中可以用POF来   控制ISP_CONTR。
            方法二:利用串口,STC下载软件中有个自定义下载,也就是下载前通过串口发送一段自定义代码,单片机收到该代码后来控制单片机
ISP_CONTR进行软复位下载。

/************************************************************************************
* 程序名称:STC单片机免掉电下载
* 程序作者:itas109
* 个人博客:http://blog.csdn.net/itas109
* 程序版本: V1.1
* 编制日期: 2013-08-05
* 编译器:Keil C uVision4
* 调试芯片:STC90C516RD+ 11.0592M晶振
* 占用资源: 1、自定义下载:串口,定时器T1,中断
2、复位键下载:不占用资源
* 特别说明: 1、修改后的程序可以实现复位按键和自定义下载同时进行,也可以根据自己
的需要选择,若用户所写程序用到定时器时,请只是用复位下载。
2、注意使用自定义下载时,尽量不要对P3口的低四位进行操作,否则可能
下载失败。
3、该头文件使用说明:
使用时,将该头文件加入到所编写的程序当中(可以直接添加到Keil的库文件里面),
在main开始调用Auto_Download()函数即可,例如:
#include<xx.h>//你所需的头文件
#include"download.h"//添加免掉电下载头文件
void main()
{
Auto_Download();//调用免掉电下载函数
while(1)
{
//添加你的代码
}
}
4、自定义下载时,波特率为9600,奇偶位为None,数据位为8,停止位为1,自定义
下载指令为AB。以上设置可以自己在程序中修改。
5、程序可以根据自己的喜好修改,不过请标注原作者的信息,谢谢! ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆原作者信息☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
*******源程序地址;http://www.51hei.com/mcu/1405.html*******************************
* 程序作者: 郭伟(QQ:495817787 ,Email:)
* 程序版本: V1.0
* 编制日期: 2012-01-19
* 编译器:Keil C uVision4
* 调试芯片:STC89C52 11.0592M晶振
* 占用资源: 1》自定义下载:串口,定时器T1,中断
2》复位键下载:不占用资源
* 特别说明: 1》使用本程序时需要用宏来选择条件编译程序段
2》使用复位键下载时,只需要在main函数开头调用ResetKey_Download();
3> 使用自定义下载时调用Auto_Download()对串口进行初始化,波特率9600 **************************************************************************************/
#ifndef _DOWNLOAD_H_
#define _DOWNLOAD_H_ sfr ISP_CONTR = 0xE7;//软复位寄存器声明 /***选择下载方式***/
//#define Serial_download//若用户所写程序没有用到定时器,可以去掉注释,使其有效
#define ResetKey_download//使用条件编译选择下载方式,可以只使用一个。
/*****************/
#ifdef ResetKey_download
//复位下载相关函数
void ResetKey_Download()
{
if ((PCON & 0x10) == 0)
{
//POF位=0,单片机软件复位
PCON = PCON | 0x10; //将POF位置1,防止重复进入isp监控区
ISP_CONTR = 0x60; //软复位,从ISP监控区启动,如果没有isp下载流,则重新转向用户区引导
}
else
{
PCON = PCON & 0xef; //将POF清零,以便下次下载
}
}
#endif #ifdef Serial_download
//延时函数
void delay_ms(unsigned int ms)
{
unsigned int i,j;
for(i = ms;i > 0;i --)
for(j=110;j > 0;j --);
} //初始化串口
void Serial_Download()
{
EA=1; //开总中断
ES=1; //允许串口中断
TMOD=0x20; //定时器T1,在方式3中断产生波特率
PCON=0x00; //SMOD=0
SCON=0x50;
TH1=0xfd; //波特率设置为9600
TL1=0xfd;
TR1=1; //开定时器T1运行控制位
} //串行口中断
void Serial_int(void) interrupt 4 using 0
{
unsigned char com_buff;
RI=0;
com_buff=SBUF;
if(com_buff==0xAB)
{
delay_ms(1000);
ISP_CONTR=0X60; //软件复位后,从ISP程序区启动
}
}
#endif
//自动下载调用函数
void Auto_Download()
{
#ifdef Serial_download
Serial_Download();
#endif #ifdef ResetKey_download
ResetKey_Download();
#endif
}
#endif

STC51系列单片机免掉电下载(热启动下载)的更多相关文章

  1. 【iOS系列】-多图片多线程异步下载

    多图片多线程异步下载 开发中非常常用的就是就是图片下载,我们常用的就是SDWebImage,但是作为开发人员,不仅要能会用,还要知道其原理.本文就会介绍多图下载的实现. 本文中的示例Demno地址,下 ...

  2. 《SeleniumBasic 3.141.0.0 - 在VBA中操作浏览器》系列文章之一:SeleniumBasic的下载

    Selenium是一种非常流行的浏览器和网页自动化技术,开发人员可以使用C#.Java.Python等语言来操作Chrome.Firefox等浏览器. VBA语言可以直接操作访问Microsoft I ...

  3. 8、16、32-BIT系列单片机区别与特点

    一.8位单片机 8031/8051/8751是Intel公司早期的产品 1.8031的特点 8031片内不带程序存储器ROM,使用时用户需外接程序存储器和一片逻辑电路373,外接的程序存储器多为EPR ...

  4. MSP430系列单片机特性及应用领域

    概述 MSP430系列单片机是德州仪器1996年开始推向市场的一种16位超低功耗的混合信号处理器,给人们留下的最大的亮点是低功耗而且速度快,汇编语言用起来很灵活,寻址方式很多,指令很少,容易上手.主要 ...

  5. MSP430FR2系列单片机破解芯片解密多少钱?

    MSP430FR2系列单片机破解芯片解密 MSP430FR2xx系列单片机芯片解密型号: MSP430FR2533.MSP430FR2110.MSP430FR2310.MSP430FR2311.MSP ...

  6. STM32L系列单片机内部EEPROM的读写

    STM32L系列单片机内部提供了EEPROM存储区域,但实质上,其FLASH也是EEPROM类型,只不过有一块区域被开放出来专门用作EEPROM操作而已.STM32L的EEPROM使用寿命设计为100 ...

  7. MCS-51系列和80C51系列单片机是否相同

    MCS是Intel公司单片机的系列符号.Intel推出有MCS-48.MCS-51.MCS-96系列单片机. MCS-51系列单既包括三个基本型80C31.8051.8751,以及对应的低功耗型号80 ...

  8. AT89C 系列单片机解密原理

    单片机解密简单就是擦除单片机片内的加密锁定位.由于AT89C系列单片机擦除操作时序设计上的不合理.使在擦除片内程序之前首先擦除加密锁定位成为可能.AT89C系列单片机擦除操作的时序为:擦除开始---- ...

  9. IOS GCD图片数据异步下载,下载完成后合成显示

    关于GCD使用详解,请看我的上一篇blog:http://www.cnblogs.com/xin-lang/p/6278606.html 前段时间遇到个需要异步下载,下载完成后再组合显示的东西.这里我 ...

随机推荐

  1. 轻松学习Linux之进程监视与管理

    前后台进程转换-1 前后台进程转换-2 本文出自 "李晨光原创技术博客" 博客,谢绝转载!

  2. 第三百五十九天 how can I 坚持

    在家待了一天,鼓捣了下linux,总算能连上网了,懂得还是少啊. 晚上去华北电力大学跑了会步,十圈,还挺有成就感呢,就是没带手环,哎. 以后学习一定要记笔记,上了这么多年学,都 没学会怎么记笔记,也是 ...

  3. Django Signals 从实践到源码分析(转)

    原文:http://foofish.net/blog/66/django-signals 当某个事件发生的时候,signal(信号)允许senders(发送者)用来通知receivers(接收者),通 ...

  4. Linux下的cut选取命令详解

    定义 正如其名,cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的.cut是以每一行为一个处理对象的,这种机制和sed是一样的 剪切依据 cut命令主要是接受三个定位方法: 第一,字节(by ...

  5. Codeforces Round #367 (Div. 2) A. Beru-taxi (水题)

    Beru-taxi 题目链接: http://codeforces.com/contest/706/problem/A Description Vasiliy lives at point (a, b ...

  6. Intellij IDEA 杂记

    添加JUnit File > Settings > Plugins > Browse repositories > 搜索junit ,安装JunitGenerator V2 重 ...

  7. hdu 1576 A/B (扩展欧几里德简单运用)

    http://acm.hdu.edu.cn/showproblem.php?pid=1576 A/B Time Limit: 1000/1000 MS (Java/Others) Memory Lim ...

  8. mysql kill操作

    KILL语法 KILL [CONNECTION | QUERY] thread_id 每个与mysqld的连接都在一个独立的线程里运行,您可以使用SHOW PROCESSLIST语句查看哪些线程正在运 ...

  9. 建立ODBC数据源(基于windows)

    1. win+r 2. control 3. 打开数据源 4. 点击添加 5. 选择Oracle in OraClient11g_home1 ,点击完成 6. 填写,查看具体参数信息点击Help 7. ...

  10. 初学VSTO一问,如何添加SheetChange事件

    很多初学者在学习VSTO时,觉得很迷茫,举一个简单的例子,在VBA中,添加SheetChange的事件,非常容易. 如下图所示,只需要在VBE界面,先把SheetChange事件就好了. 而认为在VS ...