新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)軟件程序復(fù)位

51單片機(jī)軟件程序復(fù)位

作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏
51單片機(jī)軟件復(fù)位匯編代碼

POP ACC ; pop return address

本文引用地址:http://m.butianyuan.cn/article/201611/318163.htm

POP ACC
;彈出PC

MOV SP,#30H ;復(fù)位后SP為07H ,這樣就會(huì)復(fù)位椎棧
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)始運(yùn)行,但寄存器內(nèi)的值不確定!



用C51實(shí)現(xiàn)軟件復(fù)位



方法1:



void(*SoftReset)();



SoftReset=0;



SoftReset();



解釋:利用函數(shù)型指針,使函數(shù)型指針指向的函數(shù)的入口地址為0。



方法2: 嵌入?yún)R編



#pragma asm


LJMP 0FFF0h;//ljmp 0000h



#pragma endasm



方法3: 在C51編程過(guò)程中,用一個(gè)不存在函數(shù),引起復(fù)位。



如下程序,編譯正常,但執(zhí)行到 reset()處即復(fù)位了。其時(shí)匯編代碼為

LCALL C:0000。







extern void rest(void); //實(shí)際并不存在。



void main()



{



rest(); //復(fù)位




}

方法4:如果有用看門(mén)狗,使用看門(mén)狗復(fù)位。



評(píng)論


技術(shù)專區(qū)

關(guān)閉