我酷下载
您的位置:首页-> 技术文章-> -> 电子设计-> 怎样在我的源程序中实现软件复位?

阅读排行




怎样在我的源程序中实现软件复位?

作者转贴 来源未知 加入时间:2005-8-31 人气:191
怎样在我的源程序中实现软件复位?
龙啸九天 发表于 2005-7-28 18:51:32

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寄存器组。



相关文章

相关软件

联系我们 广告服务 友情链接 版权说明 软件发布 下载帮助

CopyRight
2005-2016 www.5qcn.net All Rights Reserved 版权所有 【我酷】下载