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

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值