51单片机软件程序复位

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

银火虫 发表于06-13 09:13 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

银火虫
银火虫(中将)
金币:5919个|学分:6733个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号