stc单片机不断电下载程序

发布者:美梦小狮子最新更新时间:2012-08-04 来源: 61ic关键字:stc单片机  不断电  下载程序 手机看文章 扫描二维码
随时随地手机看文章

stc单片机支持串口isp程序下载,不必使用专用下载器,仅使用串口就能下载程序。但每次下载程序都要断电再上电,比较麻烦。
下面介绍一种不需断电就能下载程序的方法,在程序调试时比较方便。
基本原理:
stc单片机有专用的复位寄存器,通过对该寄存器写入不同的数值可以实现单片机热启动复位。
寄存器功能如下图所示:

点击浏览下一页

由上图可以看出只要满足某个条件,向ISP_CONTR写入0x60,就可以实现从ISP监控区软启动启动
某个条件设置为:当串口接收到0xaa数据时,单片机执行ISP_CONTR=0x60; 指令,从ISP监控区软启动启动。
演示程序如下:

    //*************************STC12C5410AD软启动演示**************************
    //
    //收到0xaa,从ISP监控区软启动,利用该特性,可以实现stc单片机不断电下载
    //收到0x55,从用户程序区启动
    //2010年3月13日21:58:49
    //************************************************************

*************
    #include
    uint c;
    //*************** 函数定义 ******************
    void delay1ms(unsigned int j);
    void senddata(uchar dc);
    //*************** 主程序 ********************
    void main(void)
    {
      ///****************** 
      TMOD|=0x20;
      SCON=0x50;
      TH1=0xfd;         //12T时钟9600bps
      TL1=0xfd;
      TR1=1;  
      ES=1;
      EA=1;
      AUXR=AUXR|0x40;   //定时器1使用1T时钟  9600*12=115200bps   
      ///******************
      delay1ms(30000);
      for(c=0;c<256;c++)
      {
        senddata(c);
        delay1ms(200); 
      }
      while(1)
      {
       
      }
    }
    //***************************发送数据**************************
    void senddata(uchar dc)
    {
      SBUF=dc;
      while(!TI);      //当TI=0时,发送未结束,循环等待
      TI=0;            //当TI=1时,发送结束,用软件将TI清零
    }
    void uart(void) interrupt 4
    {
      uchar cdd;
      if(RI)
      {
        RI=0;
        cdd=SBUF;
        if(cdd==0xaa)
        {
           ISP_CONTR=0x60;    //软复位,从ISP监控区启动
        }
        else if(cdd==0x55)
        {
           ISP_CONTR=0x20;   //软复位,从用户程序区启动
        }
        else
        {
           senddata(cdd);
        }             
      }
      else
      {
        TI=0;
      }
    }
    //*************************延时 n*1ms********************
    void delay1ms(unsigned int j)
    {
      unsigned int i;
      for(;j>0;j--)
      { for(i=0;i<124;i++)
        {;}
      }
    }

[page]

在调试程序中加入串口初始化代码,串口中断代码即可实现不断电下载程序
///****************** 
  TMOD|=0x20;
  SCON=0x50;
  TH1=0xfd;         //12T时钟9600bps
  TL1=0xfd;
  TR1=1;  
  ES=1;
  EA=1;
  AUXR=AUXR|0x40;   //定时器1使用1T时钟  9600*12=115200bps   
  ///******************

void uart(void) interrupt 4
{
  uchar cdd;
  if(RI)
  {
    RI=0;
cdd=SBUF;
if(cdd==0xaa)
{
   ISP_CONTR=0x60;    //软复位,从ISP监控区启动
}
else if(cdd==0x55)
{
   ISP_CONTR=0x20;   //软复位,从用户程序区启动
}
else
{
   senddata(cdd);
}             
  }
  else
  {
    TI=0;
  }
}
 
  在上演示程序中,利用单片机串口收到某个有效数据后,执行从isp引导区软启动的命令(ISP_CONTR=0x60;),实现程序不断电下载。但该方法为实现程序不断电下载,占用了一些单片机资源——串口、中断等,实际应用中有一些不便。下面介绍另一种程序不断电下载方法:
   考虑到单片机开发板在设计时一般都留有一个手动复位按钮,能否利用该按钮实现程序不断电下载呢?答案是肯定的!!!!!

单片机上电复位时,POF=1;单片机手动复位时,POF=0   
单片机上电运行时对POF位进行判断,如果POF位=0,将POF位置1,让单片机从isp引导区软复位。
                                              如果POF位=1,将POF位清0。

将实现以上功能的代码加入到你的程序中,当需要下载程序时,按下复位按钮,此时POF位=0,单片机再次从isp引导区软复位,从而实现程序下载。

该方法只需在用户程序中嵌入一段判断POF标志位的代码就能实现程序不断电下载,无需占用任何单片机内部资源。

 

演示程序:

//*******************stc单片机不断电下载程序******************
#include

sfr ISP_CONTR=0xe7;          软复位寄存器声明
void main(void)
{
 //////////////将这段代码嵌入到程序中////////////////
 if((PCON&0x10)==0) //如果POF位=0
 {
   PCON=PCON|0x10;  //将POF位置1
   ISP_CONTR=0x60;  //软复位,从ISP监控区启动
 }
 else
 {
   PCON=PCON&0xef;  //将POF位清零
 }
 //////////////////////////////////////////////
    
 while(1)
 {
         `

`         用户程序

`

  }
}

操作说明:
1 将演示程序中的红色代码复制到您的程序中,首次使用时应利用断电下载的方式将含有红色代码的程序下载到单片机中
2 将hex文件载入stc单片机isp软件,点击下载按钮
3 按下单片机开发板上复位键,单片机进行is程序下载

关键字:stc单片机  不断电  下载程序 引用地址:stc单片机不断电下载程序

上一篇:LCD1602液晶屏+DS1302时钟芯片的电子时钟
下一篇:12864液晶电子时钟+温度显示

推荐阅读最新更新时间:2024-03-16 13:04

STC单片机学习】第六课:单片机控制第一个外设-LED灯
1.6.1.单片机编程的一般步骤 1.6.1.1、目标分析。我们的目标是点亮开发板上的LED灯。 1.6.1.2、原理图分析 普中51-双核-A7开发板原理图 (1)目标器件(LED)工作原理 LED的工作是有方向性的,只有当正级接到LED阳极,负极接到LED的阴极的时候才能工作,如果反接LED是不能正常工作的。 (2)相关模块电路连接 (3)控制线路分析:相关IO端口是哪些?如何控制才能亮呢? 1.6.1.3、代码编写、编译(主要工作) 1.6.1.4、下载与调试(结果和预期不一致) 1.6.2.原理图与控制方法分析 1.6.2.1、原理图概况浏览 (1)目的1:把原理图的相关部分摘录出来重点看 原理图中
[单片机]
【<font color='red'>STC单片机</font>学习】第六课:单片机控制第一个外设-LED灯
STM32使用JLINK的SWD接口下载程序(keil环境下)
我的keil版本为:V5.24 一、安装Jlink驱动 可移步到网盘下载 传送门 ,提取码:fua6 二、替换dll文件 1、首先找到你安装Keil5的目录,找到ARM这个目录。我的目录如下图,keil的JLINK的dll就在这个目录下。 2、下载dll文件,覆盖上述keil目录下的dll文件 三、设置keil 1、选择jlink驱动 2、选择SW,并配置为5M 3、配置好相应的Flash Download选项(今天忘记勾选Reset and Run导致debug半天!!!)
[单片机]
STM32使用JLINK的SWD接口<font color='red'>下载程序</font>(keil环境下)
Windows下stm32串口下载程序(DOS版本)
每次更新程序都需要用到stlink调试工具,感觉非常不方便,笔记本搬来搬去,帮客户更新程序也不方便使用别人的下载工具。 那么只能自己写一个下载工具了。 刚开始我是想研究一下stm32 BootLoader的官方协议,然后通过协议来写这个程序。 后面找到官方质料AN3155_USART protocol used in the STM32 bootloader_en.pdf(自行百度)。 全是英文,看了一天挺累的,进展也慢。 后面又了解到原来st公司自己写了一个BootLoader的库。根据网上找到的很多质料模仿大神们写了一个。 因为时间原因先完成一个DOS版本的,后面将继续完成MFC版本,方便使用。源码都会
[单片机]
Windows下stm32串口<font color='red'>下载程序</font>(DOS版本)
LPC11UXX ISP 通过 USB 下载程序操作步骤
一.打开你的 Keil 工程,点击 option 图标,如下图红色框图标: 二.使能有效性校验设置步骤,具体操作如下: 1. 点击 User : 2. 勾选RUN#1 3. 点击图标选择 ElfDwT.exe (在 Keil 软件安装目录下:Keil_v5 - ARM - BIN) 4. 双击打开ElfDwT.exe 5. 在 RUN#1框中键入 #L 如: C:\Keil_v5\ARM\BIN\ElfDwT.exe #L ---调用ELFDWT.EXE命令使能有效性校验。 三.生成 bin 文件操作步骤,具体操作如下: 1. 重复上述页面,勾选RUN#2 2. 点击图标选择 f
[单片机]
LPC11UXX ISP 通过 USB <font color='red'>下载程序</font>操作步骤
LPC824 使用FlashMagic 下载程序
1) 使用USB转UART,连接UART的Tx和Rx 注意:板载的CMSIS-DAP的虚拟串口没法用作ISP 2)让芯片进入ISP模式,按住ISP按键,然后对板子复位 3)打开flashmagic,设置好即可下载
[单片机]
LPC824 使用FlashMagic <font color='red'>下载程序</font>
STC单片机控制PCA9554A程序
/****对PCA9554A操作时要特别注意的是在主函数写数据之前,一定要先用函数 PCA9554A_Config(0x00)写0x00,否则收不到数据****/ #include reg51.h #include intrins.h sbit SDA=P2^0; sbit SCL=P2^1; sbit beep=P2^3; void Delay(unsigned int i) { unsigned int j,k; for(j=i;j 0;j--) for(k=110;k 0;k--); } void NOP() { _nop_(); _nop_(); _nop_(); _nop_();
[单片机]
<font color='red'>STC单片机</font>控制PCA9554A程序
STC单片机开发注意事项
ISP烧写程序注意事项 程序无法下载进MCU,可能出错的地方有:如果准备条件充分 (驱动程序安装成功、STC_ISP.EXE安装成功),在下载程序进入MCU的时候,需要对ISP软件进行参数的设置。 Ⅰ:MCU Type选项,我用的是STC89C54RD+。(型号必须匹配) Ⅱ:(CH3415SER.EXE)驱动安装成功后,设备管理器中查看端口(COM和LPT), 其中的USB-SERIAL CH340(COM4)中的COM4是可以和MCU连接的通信端口。其他通讯端口(COM1和COM2) 在没有必要的情况下不要使用。选择COM4,Max Buad参数选默认。 Ⅲ:根据MCU支持的晶振频率选择OSCDN(OSC Con
[单片机]
基于STC单片机的机场车辆超速报警系统
随着民航业的发展,航空器的数量不断增多,地面保障车辆随之增加,加之机场车辆行驶速度过快,导致刮碰飞机的不安全事件时有发生,直接影响了飞机的持续适航,严重危及航空公司的运行安全,同时也造成了一定的经济损失。为了减少此类不安全事件的发生,本设计利用单片机实现车辆的超速报警来提醒司机减速行驶,并将超速情况实时记录下来作为评价车辆驾驶员的依据之一,以便于对员工进行管理。 1 系统的硬件设计 1.1 系统功能 系统实现的主要功能如下: (1)按键调整时间以及实时显示时间; (2)实时显示车辆行驶的速度; (3)当车辆超过规定的速度值时,违规情况以数据形式保存在串行存储器中,并发出声音警报,同时警报灯闪烁; (4)管理人员使用
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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