复位程序怎么写( 二 )


置位和复位不需要连续使用,复位可以根据你设定的条件,达到一定条件后再执行 。比如置位M0线圈驱动时间继电器T,然后时间继电器T计时到后,再使M0线圈复位 。
不同品牌的PLC指令会有所不同,但用法都差不多 。有些品牌的PLC有区域复位的指令,比如一次性将M1-M10这10个线圈复位,而有些牌子的就没有,指令多写几个就是了 。
4. 单片机如何用C程序复位 可以使用下面的程序跳到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寄存器组 。
以上文章由龙啸九天翻译自KEIL FAQ,可能有疏漏,欢迎提出 。
【复位程序怎么写】

复位程序怎么写

文章插图