STC单片机的IAP 实现不掉电下载程序

发布者:EtherealBeauty最新更新时间:2015-10-28 来源: eefocus关键字:STC单片机  IAP  不掉电下载 手机看文章 扫描二维码
随时随地手机看文章
  下面介绍不掉电载程序的实现过程。先要了解一点基础知识。单片机的复位,下载流等等。。。
  首先说一下复位。STC89C52有的复位有两种,一种是上电复位,也就是冷启动,复位后检测串口那里有没有下载流,有的话跑去下载程序那里。还有一种是平时的按键复位,高电平有效那种的,不检测是否有下载流。
  下载流是什么?就是串口发送给单片机要烧写程序的信息。STC89C52的下载流是0x7F,连续12个好像(官方公布是大于16 )。如果我们上位机点下载,它就通过一直发送0x7F给单片机。如果这是有上电复位,就烧写程序进去单片机。
  我们的程序里面就是要用到这些,再介绍一下基本思路。我们需要单片机正常运行过程中检测是否有下载流(0x7F),如果有下载流就跳进上电复位。只要实现了这个功能,就是实现了不掉电下载程序了~~~检测下载流不难,我这里使用的是串口中断,中断里面检测是否有下载流信息,有的话就跳进上电复位那里。主要是跳到上电复位,怎么跳?上电复位在哪??
  跳转方面,有学过微机的同学就能好理解。只要修改 PC 指针就行了,让它指向上电复位那段程序。还有一个问题是,上电复位那段程序在哪里?这个要找芯片数据手册了。官方公布的是0xEC00, 但是我们不是直接跳转过去的, 而是通过使能IAP, 也就是设置IAP控制寄存器。官方公布的IAP控制寄存器地址是0xE7, 设置成0x60就使能了IAP. 来到这里相信同学们都理解了,可以着手写一下程序了。
把必要的东西弄上。文件包含,宏定义,寄存器声明等等。
#include
 
#define IAP_ENABLE 0x60      //IAP允许
sfr IAP_CNTR = 0xE7;        //IAP控制寄存器
 
void mian(void)
{
  UART_Init();                //串口初始化
  while(1)                    //死循环,等待串口中断
  {
   
  }
}
 
void UART_Init()
{
  TMOD|=0x20; //定时器1提供串口波特率
  TH1=0xf3;     //波特率2400, 晶振为12M
  TL1=0xf3;     //波特率2400, 晶振为12M
  EA=1;         //打开总中断
  TR1=1;        //定时器1开始计数
  ES=1;         //允许串口中断
  SCON=0x50;    //方式0, 允许串口接收
}
 
void UART_IRQHandler(void)interrupt 4
{
  unsigned char rev;             //临时变量, 保存SBUF
  if(RI)                         //检查是否接收到数据
  {
    RI = 0;                      //软件清除接受标志位
    rev = SBUF;                  //读取接受缓冲区
    if(0x7F == rev)              //判断是否为下载流信息
    {
      IAP_CNTR IAP_ENABLE;  //允许IAP, 也就是直接进入下载程序
    }
  }
}
 
  (编译通过,下载程序,测试能否在线下载。成功!!!!!!!!!!!!那是感动啊~~~~[转载]STC单片机的IAP <wbr> <wbr>实现不掉电下载程序)
  有了上面程序的话,以后下载程序就直接打开上位机,也就是STC_ISP那个软件,选择好对应的.hex文件,点击下载,就开始下载程序了。以后再也不用先关电源,再上电了下载,那是方便啊(事实证明,我已经对频繁对电源开关,感觉非常繁琐了)。多年来的梦想啊(虽然接触51,貌似不到1年。。。),让我曾经一度非常妒忌AT的单片机,因为它支持在线下载程序。。。
关键字:STC单片机  IAP  不掉电下载 引用地址:STC单片机的IAP 实现不掉电下载程序

上一篇:基于STC15L104E单片机模拟PWM调光小夜灯
下一篇:单片机接口分析与存储器扩展

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

STM32F103CB IAP+APP BIN文件合并烧写
J-Flash工具 选择第一个文件 Merge第二个文件 设置起始地址
[单片机]
STM32F103CB <font color='red'>IAP</font>+APP BIN文件合并烧写
STM32F030C6 IAP功能APP中断向量表重映射
1、IAP中断向量表重映射 1.1、Coretext-M3与Coretext-M4: SCB- VTOR = 0X08000000|0X20000; __set_PRIMASK(0); 在System Control Block中存在一个向量表偏移量寄存器 VTOR(0xE000ED08),系统产生中断后,内核通过这个寄存器的值来找到中断向量表的地址,进而执行中断例程代码, M3/M4的这个VTOR寄存器一开始时它的值也是为默认值0,只不过在程序运行到SystemInit()函数后,在代码中明确对其进行了修改 1.2、Coretext-M0: __enable_irq(); memcpy((void*)
[单片机]
ARM片外Flash存储器IAP解决办法
  以 ARM 芯片为处理器核的 嵌入式 应用系统,以其小体积、低功耗、低成本、高性能、丰富的片内资源以及对操作系统的广泛支持,得到了人们越来越多的青睐。在应用编程IAP(InAppl ic atAiONProgram)就是这样的自修改程序。它先在RAM存储器中写人数据值,然后使PC指向该存储段,把该段作为程序段来执行。很多ARM7芯片自带IAP处理器,应用其自带的IAP处理器可以方便地对其片内集成的Flash存储器进行在应用编程,但几乎所有的ARM核芯片均不支持片外IAP处理,因为片外Flash存储器是用户选型的,芯片生产厂家无法先知先觉,而不同Flash存储器其编程时序也不尽相同,导致芯片生产厂家无法提供通用的IAP代码。那么
[电源管理]
ARM片外Flash存储器<font color='red'>IAP</font>解决办法
STC单片机内置ADC的使用方法
STC系列单片机中的STC89LE516AD/X2提供了8路8位精度的高速A/D转换器,位于P1口上,从而省去了片外ADC的麻烦。这8路ADC为电压输入型,可做按键扫描,电池电压检测,频谱检测等。ADC转换过程需要17个机器周期。通过对相关功能寄存器的适当配置,就可以控制其工作。下面就对相关功能寄存器进行介绍。 A/D转换寄存器总表: 寄存器 地址 名称 7 6 5 4 3 2 1 0 初始初
[单片机]
在PIC18单片机中使用BootLoader在线升级
引 言   PIC单片机的BootLoader属于需要自己写程序的那种,可以根据自己的需要写出各种功能的BootLoader程序来。目前,比较常见的BootLoader程序有Microchip公司的C18版本和著名的PICC编译器厂商HI-TECH公司(以下简称HI-TECH)的PICC18版本。它们的相似之处在于都占用了系统的0x00~0x1FF的程序空间。Microchip的版本是用纯汇编写的,而HI-TECH的版本是用C语言编写的。   在PIC系列单片机中,只有PIC18系列和PIC16F87X系列的单片机才有IAP功能,才能够使用BootLoader功能。下面只介绍PIC18的BootLoader,PIC16F87X的
[单片机]
在PIC18单片机中使用BootLoader在线升级
STM32F103代码远程升级(二)基于串口IAP的简单实现
一、确定需要解决的问题 这里我就记录一下我的学习过程。 首先确定几个问题: 实现IAP编程需要着手编写两个程序,一个是Bootloader程序,一个是APP应用程序。 需要对STM32的Flash进行擦除和写入操作。 需要根据APP应用程序开始地址设置中断向量表的偏移 需要改变代码存放的地址空间(因为BootLoader要存放在0x08000000处,用户程序要存放在0x08005000处,而默认的代码存放的地址空间为0x08000000)。 在下载完更新文件之后需要进行PC指针的强制跳转,跳转时需要做什么 串口接收的用户代码数据是什么样的代码数据,是一种什么样的文件,该如何得到该格式文件 然后我开始一个一个解决问题。 二
[单片机]
STM32F103代码远程升级(二)基于串口<font color='red'>IAP</font>的简单实现
ISP和IAP的区别
ISP:in system programming IAP:in applicatin programming 但两者的操作方式,结果和应用场合有什么区别呢?继续看你就会明白了。 什么是ISP: 用写入器将code烧入,不过,芯片可以在目标板上,不用取出来,在设计目标板的时候就将接口设计在上面,所以叫 在系统编程 ,即不用脱离系统; 什么是IAP: 在应用编程,有芯片本身(或通过外围的芯片)可以通过一系列操作将code写入,比如一款支持Iap的单片机,内分3个程序区,1作引导程序区,2作运行程序区,3作下载区,芯片通过串口接收到下载命令,进入引导区运行引导程序,在引导程序下将new code内容下载到下载区,下载完毕并校验
[单片机]
STM32 IAP升级遇到的问题总结
一,串口通信问题 1,串口通信两端的TTL电平要一致,看选用的芯片,要么都是3.3V要么都是5V。。当两端电平不一致时通常是收不到数据的。。当检测程序等都没有问题但是依然收不到数据时,考虑检测一下两端的电平是否一致。。可用 示波器 查看收发数据时的电平 2,在写IAP是使用的官方的库函数,结果串口一直收不到正确的数据。不管我发什么,收到的都是0x58或者0xF6,而且我发5个字节只能收到2个。。确定自己的程序逻辑没问题,然后怀疑是使用的库函数有问题。使用beyond compare挨着对照了一下以前写过的正确的程序。。发现系统初始化时外部晶振没有改。。在SystemInit();时就是为了/* 配置系统时钟为168M 使用
[单片机]
STM32 <font color='red'>IAP</font>升级遇到的问题总结
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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