SWRST: ;定義軟件復(fù)位程序的實(shí)際入口地址
CLR EA ;首先關(guān)閉中斷源總使能位
SETB F0 ;設(shè)置一個(gè)軟件復(fù)位標(biāo)志位
MOV P0,#0FFH ;設(shè)定通用端口P0為高阻輸入狀態(tài)
MOV P1,#0FFH ;設(shè)定通用端口P1為高阻輸入狀態(tài)
MOV P2,#0FFH ;設(shè)定通用端口P2為高阻輸入狀態(tài)
MOV P3,#0FFH ;設(shè)定通用端口P3為高阻輸入狀態(tài)
MOV PSW,#00H ;設(shè)定程序狀態(tài)字寄存器為原始值
…… ;(據(jù)實(shí)際需要還可初始化其他SFR)
MOV DPTR,#SWR0 ;為RETI準(zhǔn)備彈出地址,而又不想改變執(zhí)行順序
PUSH DPL ;壓棧低字節(jié),在先
PUSH DPH ;壓棧高字節(jié),在后
RETI ;中斷返回指令,清除高級(jí)中斷激活觸發(fā)器
SWR0: CLR A ;準(zhǔn)備復(fù)位地址
PUSH ACC ;壓棧低字節(jié)00H
PUSH ACC ;壓棧高字節(jié)00H
RETI ;清除低級(jí)中斷激活觸發(fā)器,并跳到0000H
以下幾點(diǎn)需要說(shuō)明:(1)首先關(guān)閉總的中斷使能位,以確保軟件復(fù)位過(guò)程順利完成;(2)其中的核心指令是中斷返回指令RETI,因?yàn)樵谡麄€(gè)指令集中只有該指令能夠清除中斷激活觸發(fā)器;(3)末尾RETI指令的作用還代替了一條3字節(jié)的“LJMP 0000H”指令;(4)由軟件陷阱捕獲的跑飛程序并不一定同時(shí)置位了所有兩個(gè)中斷激活觸發(fā)器,但是該程序仍然適用,并且也沒(méi)有任何負(fù)面影響;(5)軟件復(fù)位標(biāo)志這里利用了PSW中的一個(gè)通用位F0,也可以利用F1、GF0、GF1以及RAM字節(jié)單元或位單元等;(6)軟件復(fù)位是一種不外擴(kuò)任何硬件電路、不導(dǎo)致單片機(jī)發(fā)生狀態(tài)遷移、純軟件的復(fù)位方法。
軟硬件復(fù)位技術(shù)
軟硬件復(fù)位是軟件復(fù)位功能的一種延伸,也是單片機(jī)的一種自主復(fù)位方式,既具有軟件復(fù)位的特點(diǎn)(可以由編程人員按需要來(lái)啟用),又具有硬件復(fù)位的特點(diǎn)(能夠?qū)崿F(xiàn)硬件復(fù)位的全部操作內(nèi)容)。這種復(fù)位方式是本文作者自行規(guī)劃、設(shè)計(jì)和命名的。
?
(a)分立件電路方式
?
(b)IC電路方式
在上述軟件復(fù)位的基礎(chǔ)上很容易實(shí)現(xiàn)這里所說(shuō)的軟硬件復(fù)位方式,不過(guò)需要外擴(kuò)一定的硬件電路的支持。圖2是兩種配合軟硬件復(fù)位的外擴(kuò)電路。其中,圖2 (a)電路是在普通復(fù)位電路的基礎(chǔ)上,添加1只三極管Q1和3只阻容元件而成的,并且其導(dǎo)通與截止由一條并口引腳控制,如P1.0。平時(shí)P1.0維持高電平,Q1截止;當(dāng)內(nèi)部軟件需要實(shí)施該復(fù)位時(shí),從P1.0腳輸出低電平,Q1導(dǎo)通把RST腳拉高,強(qiáng)行復(fù)位單片機(jī)。這里R3、R4和C2起著延時(shí)和限流的雙重作用。圖2(b)電路是在MAX812M對(duì)接80C51電路基礎(chǔ)上添加一條連線而成的,其工作原理與上類似。該連線把MAX812M的人工復(fù)位輸入腳 MR和一條通用I/O腳(如P1.0)連接起來(lái)即可。
如何設(shè)計(jì)“軟硬件復(fù)位程序”呢?其編寫方法如下。
SHRST: ;定義軟硬件復(fù)位程序的入口地址
SET F1 ;設(shè)置一個(gè)軟件復(fù)位標(biāo)志位
CLR P1.0 ;從P1.0輸出低電平,開(kāi)始實(shí)施軟硬件復(fù)位
ORL PCON,#02H;置位PD,令單片機(jī)進(jìn)入停機(jī)狀態(tài),即PD模式;經(jīng)過(guò)延時(shí)后RST被拉高,迫使單片機(jī)進(jìn)入復(fù)位狀態(tài);在復(fù)位操作完成并且喚醒單片機(jī)之后,將重新從0000H開(kāi)始執(zhí)行用戶程序
以下幾點(diǎn)需要說(shuō)明:(1)如果利用這里的“軟硬件復(fù)位程序”代替前面的“軟件復(fù)位程序”,可以簡(jiǎn)化用戶程序并且復(fù)位進(jìn)行得徹底,但是需要增加一些硬件,并且也把可以定制的復(fù)位操作給轉(zhuǎn)化成了固定的復(fù)位操作。(2)在圖2所示的軟硬件復(fù)位的支撐電路,除了可以提供復(fù)位信號(hào)給單片機(jī),還有一個(gè)很大的好處,就是可以為其他外圍電路提供復(fù)位信號(hào),這彌補(bǔ)了傳統(tǒng)80C51的一個(gè)欠缺。
標(biāo)準(zhǔn)80C51的復(fù)位引腳RST是只能輸入的單向結(jié)構(gòu),不能由單片機(jī)主動(dòng)地為外圍芯片提供同步的復(fù)位信號(hào);而MC68HC05和MC68HC08系列、ST公司的ST7系列,以及許多新款51兼容單片機(jī)都把RST引腳設(shè)計(jì)為可輸入/輸出的雙向結(jié)構(gòu),在內(nèi)部看門狗溢出復(fù)位的同時(shí),也從RST輸出一個(gè)高電平脈沖,控制其他外圍芯片與單片機(jī)進(jìn)行同步復(fù)位操作。例如,ATMEL公司的AT89S51/52、T89C51RD2、AT89C51RC等型號(hào)和 Philips公司的P89C51RC、P89C51RA2/RB2/RD2等型號(hào),它們都帶有內(nèi)部看門狗。
評(píng)論
查看更多