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:如果有用看门狗,使用看门狗复位。