达华电子器材 >> 怎样实现C51单片机源程序中的软件复位?
澳门银河娱乐官网_澳门银河在线娱乐网站_我们不一样
  设为首页 | 加入收藏 | 联系我们
客服QQ:931368189 电话:13156132613     
  澳门银河娱乐官网 公司简介 澳门银河在线娱乐网站 技术转让 澳门银河在线官方网址 成功案例 企业招聘 付款方式
 首页 >> 怎样实现C51单片机源程序中的软件复位?
怎样实现C51单片机源程序中的软件复位?
发布时间: 2013-10-14 9:17:31 被浏览次数: 1309 
 

  在设计源程序时,怎样进行软件复位呢?使用函数指针指向0000H地址,将程序跳到0000H可实现软件复位,此方法不能在中断子程序中调用,因为无法返回,所以只能在主函数中调用。用汇编函数方法可以在中断程序或主程序中使用,该函数将0x0000压栈,然后通过“RETI”出栈,这将清除中断环境并让程序从0000H重新开始运行。

  关键字:C51 单片机 源程序 编程

  问:在C51单片机源程序中怎样实现软件复位?

  答:您可以使用下面的程序跳到0000H实现软复位,下面的程序实际上是一个函数指针,指针指向了0000H地址。

  ((void (code *) (void)) 0x0000) ();

  下面的例子将实现软件自复位void reset (void)

  {

  ((void (code *) (void)) 0x0000) ();

  }

  void main (void)

  {

  reset ();

  }

  你可能注意到以上的软复位程序并不能清除8051的中断系统和某些8051的外围设备,当您在中断程序中调用上面的软件复位程序后,中断将再不能触发。因此,以上的软复位程序不能在中断子程序中调用。

  下面的小段汇编函数可以在中断程序或主程序中调用,该函数将0x0000压栈,然后通过“RETI”出栈,这将清除中断环境并让程序从0000H重新开始运行。

  ?PR?RESET SEGMENT CODE

  RSEG ?PR?RESET

  ; C prototype: void reset (void);

  PUBLIC reset

  reset: POP ACC pop return address

  POP ACC

  CLR A push 0 as new

  PUSH ACC return address to stack

  PUSH ACC

  RETI execute return of interrupt

  END

  以上程序在选择bank 0寄存器组时工作良好,假如选择的不是bank0寄存器组,那么可能无法获得预料的结果。你应该在以上的程序或启动代码中加上“MOV PSW, #0”来选择bank 0寄存器组。

 
热点推荐 
单片机开发-智能电子诱鱼器产品系列
智能电子诱鱼器产品系列
会员价:499元
批发价:450元
单片机开发-温度自动控制调节器(B型)
温度自动控制调节器(B型)
会员价:120元
批发价:110元
单片机开发-85C1型指针式电压表头
85C1型指针式电压表头
会员价:12元
批发价:11元
澳门银河在线娱乐网站:单片机开发-承接碳纤维电热采暖器项目开发
承接碳纤维电热采暖器项目开发
会员价:5000元
批发价:5000元
单片机开发-温度自动控制调节器(B型)
温度自动控制调节器(B型)
会员价:120元
批发价:110元
单片机开发-智能无线防盗报警器
智能无线防盗报警器
会员价:1元
批发价:1元
公司简介 | 付款方式 | 招商合作 | 企业招聘 | 联系我们 | 友情链接 | 网站地图

Copyright©2007-2020 澳门银河娱乐官网 All Rights Reserved 

本站关键词:承接单片机开发 |电子产品开发 |电路板抄板 |芯片解密 |温度控制器 |电子诱鱼器 |电热采暖器 |电热供暖炉 |温湿度控制器 |防撬电控锁 |智能墙壁开关 |远程防盗报警 |仪器仪表 |新特产品项目开发