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

来源:本站
导读:目前正在解读《在C51单片机源程序中怎样实现软件复位》的相关信息,《在C51单片机源程序中怎样实现软件复位》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《在C51单片机源程序中怎样实现软件复位》的详细说明。
简介:在C51单片机源程序中怎样实现软件复位

问:

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

答:

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

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

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

{

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

}

voidmain(void)

{

reset();

}

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

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

?PR?RESETSEGMENTCODE

RSEG?PR?RESET

;Cprototype:voidreset(void);

PUBLICreset

reset:POPACCpopreturnaddress

POPACC

CLRApush0asnew

PUSHACCreturnaddresstostack

PUSHACC

RETIexecutereturnofinterrupt

END

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

提醒:《在C51单片机源程序中怎样实现软件复位》最后刷新时间 2024-03-14 01:13:51,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《在C51单片机源程序中怎样实现软件复位》该内容的真实性请自行鉴别。