单片机 reset 的C语言实现

单片机 reset 的C语言实现,第1张

这个是曾经一个天才级的年轻人写的语句

#define

Reset()

((void

(code

*)

(void))

0x0000)

()

你在要复位的的时候,添加Reset()就可以实现软件复位了

可以使用下面的程序跳到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 Apush 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寄存器组。

以上文章由龙啸九天翻译自KEIL FAQ,可能有疏漏,欢迎提出。

方法1:在Vistual Studio 命令提示符下输入devenv /resetuserdata,然后重新打开Visual Studio 将会出现语言选择提示,此时选择C#即可。

方法2:在Visual Studio的菜单中选择【工具】-【导入导出设置】-【重置所有设置】”,然后在系统模版中选C#即可。

方法3:重新安装Visual Studio。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12062275.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-20
下一篇2023-05-20

发表评论

登录后才能评论

评论列表(0条)

    保存