3548|4

17

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STC IAP 仿真时自动复位程序,是什么原因? [复制链接]

请问,IAP芯片仿真的时候,程序运行一段时间之后会自动复位,仿真没有掉,重新点击全速运行就好了,如此反复,这是什么原因?
此帖出自51单片机论坛

最新回复

  51单片机(STC89C52)下载程序方面的问题,打算以后用stm32做上位机给51下载程序。虽然还不知道怎么弄出个上位机,不过目前实现了不掉电下载程序功能了,在这里跟同学们分享一下嘿嘿~~~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实现不掉电下载程序)   有了上面程序的话,以后下载程序就直接打开上位机,也就是STC_ISP那个软件,选择好对应的.hex文件,点击下载,就开始下载程序了。以后再也不用先关电源,再上电了下载,那是方便啊(事实证明,我已经对频繁对电源开关,感觉非常繁琐了)。多年来的梦想啊(虽然接触51,貌似不到1年。。。),让我曾经一度非常妒忌AT的单片机,因为它支持在线下载程序。。。STC单片机的IAP实现不掉电下载程序   成功了有点小激动,特地发一下新浪博客,分享给有需要的同学们嘿嘿。   拍明芯城电话:400-693-8369   详情 回复 发表于 2018-3-30 17:52
点赞 关注
 

回复
举报

4008

帖子

0

TA的资源

版主

沙发
 
你是不是开狗了呀,要不就是低压复位了
此帖出自51单片机论坛
 
 
 

回复

17

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
huo_hu 发表于 2017-10-31 15:10
你是不是开狗了呀,要不就是低压复位了

没有开狗,有什么方法可以确定是不是电压的原因吗?
此帖出自51单片机论坛
 
 
 

回复

4008

帖子

0

TA的资源

版主

4
 
仿真器没掉说明是受控制的复位,你别的程序也这样吗
此帖出自51单片机论坛
 
 
 

回复

31

帖子

0

TA的资源

一粒金砂(中级)

5
 
  51单片机(STC89C52)下载程序方面的问题,打算以后用stm32做上位机给51下载程序。虽然还不知道怎么弄出个上位机,不过目前实现了不掉电下载程序功能了,在这里跟同学们分享一下嘿嘿~~~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实现不掉电下载程序)

  有了上面程序的话,以后下载程序就直接打开上位机,也就是STC_ISP那个软件,选择好对应的.hex文件,点击下载,就开始下载程序了。以后再也不用先关电源,再上电了下载,那是方便啊(事实证明,我已经对频繁对电源开关,感觉非常繁琐了)。多年来的梦想啊(虽然接触51,貌似不到1年。。。),让我曾经一度非常妒忌AT的单片机,因为它支持在线下载程序。。。STC单片机的IAP实现不掉电下载程序

  成功了有点小激动,特地发一下新浪博客,分享给有需要的同学们嘿嘿。

  拍明芯城电话:400-693-8369
此帖出自51单片机论坛
 
个人签名https://www.iczoom.com
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表