51单片机软件复位汇编代码
POP ACC ; pop return address
POP ACC
;弹出PC
MOV SP,#30H ;复位后SP为07H ,这样就会复位椎栈
MOV PSW,#00H ;清寄存器
CLR A ; push 0 as new
PUSH ACC ; return address to stack
PUSH ACC
;重置PC=0并压到椎栈中
RETI ; execute return of interrupt
;程序又开端从0000H处开端运转,但寄存器内的值不确定!
用C51完成软件复位
办法1:
void(*SoftReset)();
SoftReset=0;
SoftReset();
解说:运用函数型指针,使函数型指针指向的函数的进口地址为0。
办法2: 嵌入汇编
#pragma asm
LJMP 0FFF0h;//ljmp 0000h
#pragma endasm
办法3: 在C51编程过程中,用一个不存在函数,引起复位。
如下程序,编译正常,但碑文到 reset()处即复位了。当时汇编代码为
LCALL C:0000。
extern void rest(void); //实践并不存在。
void main()
{
rest(); //复位
}
办法4:假如有用看门狗,运用看门狗复位。