STC单片机免掉电下载

发布者:心若清泉最新更新时间:2015-07-22 来源: 51hei关键字:STC单片机  免掉电下载 手机看文章 扫描二维码
随时随地手机看文章
       相信喜欢单片机的朋友都用过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进行软复位下载。
 
相关程序代码如下:
 

/************************************** I LOVE MCU ************************************
* 程序名称:STC单片机免掉电下载
* 程序作者: 郭伟(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
       
********************************* I LOVE MCU ******************************************/
#ifndef _DOWNLOAD_H_   
#define _DOWNLOAD_H_
#include 
#include "delay.h"
/***选择下载方式***/
#define Auto_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 Auto_download
unsigned char Sbuff_isp[8];//申明缓冲区
void Auto_Download()
{
 //定时器1工作在模式2,8Bit自动重装载模式
 TMOD = (TMOD & 0X0F) | 0X20;   /*设置波特率*/
 TH1=0xfd;
 TL1=0xfd;
 RI=0;
 TI=0;
 SCON = 0x50;
 ES = 1;
 EA = 1; 
 TR1 =1;
}

//自动ISP功能函数
void ISP_Check()
{
         unsigned char i=0,k=0;
        unsigned char code isp_comm[8]={0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef};//串口发送数据要与该数组数据相同
          for(i=0;i<8;i++)
         {
              if(Sbuff_isp[i]!=isp_comm[i])
              { k=1;}
        }
    if(k==0)
     {
      EA = 0;
     delay_ms(1000);//等待1秒
      ISP_CONTR = 0x60; //软复位进入ISP下载模式  
    }  
}
//串口接收中断
void Serial_int(void) interrupt 4 using 1
{
 static uchar i=0;
 if (RI)
 {
       Sbuff_isp[i] = SBUF;//将串口数据依次存入缓冲区
       i++;
       RI = 0; 
 }
 if(i==8)
 {
  ISP_Check();
  i=0;
    } 
}
#endif
#endif
 
欢迎喜欢单片机的朋友来多多交流。。。
关键字:STC单片机  免掉电下载 引用地址:STC单片机免掉电下载

上一篇:查表法矩阵键盘
下一篇:义隆单片机中断c语言使用

推荐阅读最新更新时间:2024-03-16 14:25

STC单片机简介及其看门狗的应用
STC单片机是一款增强型51单片机,完全兼容MCS-51,还增加了新的功能,比如新增两级中断优先级,多一个外中断,内置EEPROM,硬件看门狗,具有掉电模式,512B内存等。还支持ISP下载,不用编程器,只要一个MAX232和一些廉价的元件就能写程序,可擦写10万次。因此是一款很好用的单片机。 在这里,简单说明一下其看门狗的使用。STC单片机的看门狗一旦启动,就不能停止,其看门狗溢出时间可以利用STC单片机用户手册计算,其简单举例如下: #i nclude //STC单片机头文件 #define uint unsigned int #define uchar unsigned char sbit led=P1^0; /
[单片机]
STC单片机自适应波特率串口的实现方法
  STC单片机自适应波特率串口的实现方法通常有以下几种:   (1)协议约定通信开始时主机固定发送1 个字符,从机以不同的波特率试探接收,当接收到的数据与约定相同时,确定该波特率即是正确的通信波特率。   (2)协议约定通信开始时主机发送1 串字符,从机以某固定波特率接收,然后通过软件分析接收到的数据,计算出接收数据与发送数据之间的倍数关系,从而确定正确的波特率。   (3)协议约定通信开始时主机固定发送1 个字符,从机用单片机定时器检测RXD 上的信号宽度,通过计算来确定主机的波特率。   以上3 种方法,第一种由于需要多次试探,效率很低;第二种计算量过大,不适合单片机处理;第三种方式单片机有现成的定时器资源,计算也相对简
[单片机]
<font color='red'>STC单片机</font>自适应波特率串口的实现方法
stc单片机IO口输入输出方式
个人感触: 我只想说,有些话,第一遍看根本不知道是什么意思或者记不得, 但是自己在项目中遇到这个问题困扰很久之后,再回来重新看到这句话,就会醍醐灌顶。 最近编PCA9306的驱动,遇到的问题就是片子只能读奇数地址,不能读偶数地址的寄存器,后来采用的办法是写完地址之后,SDIO强制拉高(因为9306的SPI数据线是SDIO双向的,只有1根) 当时不明白为什么,现在回头来看到这篇文章,终于懂了。 以下是转载的正文: 传统51单片机IO接口只可以作为标准双向IO接口,如果用其来驱动LED只能用灌电流的方式或是用三极管外扩驱动电路。 灌电流方式:LED正极接VCC,负极接IO口。IO为高电平是LED两极电平相同,没有电
[单片机]
STC单片机EEPROM的应用和程序
最近,由于工作的需要,用STC89C52来开发新产品,要用天STC的Eeprom的功能,上网也找了一点资料,得到很大帮助,真的非常感谢。程序是我在网上摘录的,调试通过了,不过我产品在用动态扫描显示的,由于在Eeprom擦除时要用几十毫秒,会有一闪烁的。不过这是正常的。 单片机运行时的数据都存在于RAM(随机存储器)中,在掉电后RAM 中的数据是无 法保留的,那么怎样使数据在掉电后不丢失呢?这就需要使用EEPROM 或FLASHROM 等 存储器来实现。在传统的单片机系统中,一般是在片外扩展存储器,单片机与存储器之间通 过IIC 或SPI 等接口来进行数据通信。这样不光会增加开发成本,同时在程序开发上也要花 更多的心思。在
[单片机]
STC单片机学习】第八课:单片机的LED点阵
1.8.1.LED点阵简介 1.8.1.1、什么是LED点阵 点阵显示是后面显示显示器的基础,这节课对显示的理解很有帮助! (1)外观 在板子上什么样呢?每一个圆点是一个LED灯!显示方法和数码管很像,需要提前做好断码表! (2)作用 显示文字、数字、显示图标 (3)内部构造原理图。2.单片机完全学习系列课程课程配套ARM3.0开发板光盘资料步骤3 51例程9 、LED点阵datasheet-相关芯片手册 16*16的LED单色灯! 点阵的优势就是16(J34+J28)个IO口独立控制8*8个LED亮灭 (4)LED点阵如何工作 点亮:纵向和横向结合 8*8的LED点阵可以并联/串联拼成更大的LED点阵! 1.8.1.
[单片机]
【<font color='red'>STC单片机</font>学习】第八课:单片机的LED点阵
STC单片机掉电断电失电瞬间EEPROM数据保存处理办法
  由于客户在请人设计开发一设备,但是设备用户处总停电,造成设备及其周边耗材损耗严重,因此请我司在现有STC为主要芯片的基础上做掉电瞬间EEPROM里的20个参数保存,上电后通过读取EEPROM中的参数回到掉电的状态,基于此,荣致电子科技做了大量的工作,并选用了很多种方案: 1、 通过1法拉大电容做掉电临时备份电池。 2、 通过备份电池或者DS1302里的31个字节ram+电池方案。 3、 通过MAX813L检测掉电,然后通过普通STC10某个引脚读取MAX813L的第五脚高低电平状态。 4、 购买铁电芯片来不停的存储用户数据。 基于以上4种方案,荣致电子科技做了大量的试验与验证工作,最后敲定方案3经济、安全、可靠,并且存储20个
[单片机]
<font color='red'>STC单片机</font><font color='red'>掉电</font>断电失电瞬间EEPROM数据保存处理办法
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved