51單片機軟件(程序)復位
POP ACC ; pop return address
POP ACC
;彈出PC
MOV SP,#30H ;復位后SP為07H ,這樣就會(huì )復位椎棧
MOV PSW,#00H ;清寄存器
CLR A ; push 0 as new
PUSH ACC ; return address to stack
PUSH ACC
;重置PC=0并壓到椎棧中
RETI ; execute return of interrupt
;程序又開(kāi)始從0000H處開(kāi)始運行,但寄存器內的值不確定!
用C51實(shí)現軟件復位
方法1:
void(*SoftReset)();
SoftReset=0;
SoftReset();
解釋?zhuān)豪煤瘮敌椭羔?,使函數型指針指向的函數的入口地址?。
方法2: 嵌入匯編
#pragma asm
LJMP 0FFF0h;//ljmp 0000h
#pragma endasm
方法3: 在C51編程過(guò)程中,用一個(gè)不存在函數,引起復位。
如下程序,編譯正常,但執行到 reset()處即復位了。其時(shí)匯編代碼為
LCALL C:0000。
extern void rest(void); //實(shí)際并不存在。
void main()
{
rest(); //復位
}
方法4:如果有用看門(mén)狗,使用看門(mén)狗復位。
51單片機相關(guān)文章:51單片機教程
評論