第11章 單片機(jī)小知識(shí)(復(fù)位 )
1 外部RST引腳復(fù)位(不斷電下載程序)
2 軟件復(fù)位
3 內(nèi)部低壓檢測(cè)復(fù)位
4 看門狗復(fù)位
復(fù)位將使單片機(jī)內(nèi)核及其它功能部件都處在一個(gè)確定的初始狀態(tài),并從這個(gè)狀態(tài)
開始工作,復(fù)位分為熱啟動(dòng)復(fù)位(斷電復(fù)位)和冷啟動(dòng)復(fù)位(非斷電復(fù)位)兩大 類,它們區(qū)別如表11-1所示。
表11-1 冷啟動(dòng)復(fù)位與熱啟動(dòng)復(fù)位對(duì)照表
復(fù)位種類 | 復(fù)位源 | 復(fù)位后程序啟動(dòng)區(qū)域 |
冷啟動(dòng)復(fù)位 | 系統(tǒng)斷電后再上電引 起的硬復(fù)位 | 熱啟動(dòng)復(fù)位 | 通過RST引腳產(chǎn)生的 硬復(fù)位 | 內(nèi)部看門狗復(fù)位 | 內(nèi)部低壓檢測(cè)復(fù)位 | 通過對(duì)IAP_CONTR寄 存器操作的軟復(fù)位 |
|
| 從系ISP監(jiān)控程序區(qū)開始執(zhí)行程序,如果檢測(cè) 不到合法的ISP下載命令流,將軟復(fù)位到用戶 程序區(qū)執(zhí)行用戶程序 | 復(fù)位到用戶程序區(qū)0000H處。 |
|
0.png (26.4 KB, 下載次數(shù): 191)
下載附件
2016-3-28 03:35 上傳
%E7%AC%AC11%E7%AB%A0--%E5%8D%95%E7%89%87%E6%9C%BA%E5%AE%9E%E7%94%A8%E5%B0%8F%E7%9F%A5%E8%AF%86-2.jpg (40.35 KB, 下載次數(shù): 177)
下載附件
2016-3-28 03:51 上傳
外部RST引腳復(fù)位就是從外部向RST引腳施加大于100uS寬度的高電平復(fù)位脈沖,外
部高電平消失后,單片機(jī)從系統(tǒng)ISP程序下載監(jiān)控區(qū)啟動(dòng),因此可以使用P5.4/RST引腳外 接常開按鍵到VCC的方式實(shí)現(xiàn)不斷電下載程序(先點(diǎn)下載,后按復(fù)位鍵),這樣可提高程序 下載速度。P5.4/RST引腳出廠時(shí)被配置為I/O口,要將其配置為復(fù)位引腳,需要在ISP下 載程序時(shí)設(shè)置(如上圖),需要注意的是在ISP軟件中改變了P5.4口的設(shè)置后,程序下載 到單片機(jī)并不立即生效,需要給單片機(jī)斷電重啟后才生效,ISP軟件中的很多設(shè)置都是這
樣的,測(cè)試過程注意斷電重啟才生效的問題。
2 軟件復(fù)位
從用戶程序區(qū)軟件復(fù)位并切換到用戶程序命令為: IAP_CONTR = 0x20 ; 從用戶程序區(qū)軟件復(fù)位并切換到ISP程序下載監(jiān)控區(qū)命令為: IAP_CONTR = 0x60 ;
實(shí)驗(yàn)代碼如下:
#include "STC15W4K.H" // 注意宏定義后面沒分號(hào)
void delay3s(void)
{
unsigned char i,j,k;
for(i=255;i>0;i--) // 注意后面沒分號(hào) for(j=255;j>0;j--) // 注意后面沒分號(hào) for(k=255;k>0;k--); // 注意后面有分號(hào)
}
void main(void)
{
P00=0; delay3s(); P00=1; delay3s();
IAP_CONTR = 0x20 ; // 選擇用戶程序區(qū)軟復(fù)位。
// IAP_CONTR = 0x60 ; // 選擇ISP區(qū)軟復(fù)位。
while(1);
}
3 內(nèi)部低壓檢測(cè)復(fù)位
為防止電源接通與斷開瞬間系統(tǒng)供電不穩(wěn)定狀態(tài)引起程序功能混亂(部分 外圍器件供電不在要求范圍內(nèi)),在要求比較嚴(yán)格的運(yùn)用中建議使用低壓檢 測(cè)復(fù)位,當(dāng)電源電壓VCC低于內(nèi)部低電壓檢測(cè)門檻電壓時(shí),單片機(jī)產(chǎn)生復(fù)位, 當(dāng)VCC高于內(nèi)部低電壓檢測(cè)門檻電壓時(shí),單片機(jī)解除復(fù)位狀態(tài)并恢復(fù)正常工 作,要使用此功能,前提是在STC-ISP軟件下載程序時(shí),允許低電壓檢測(cè)復(fù) 位,低壓檢測(cè)門檻電壓就是復(fù)位門檻電壓,IAP15W4K58S4單片機(jī)內(nèi)部低壓檢 測(cè)門檻電壓可設(shè)定范圍是:2.03V—4.08V。
// 程序功能:程序運(yùn)行狀態(tài)LED點(diǎn)亮,復(fù)位狀態(tài)LED熄滅。
%E7%AC%AC11%E7%AB%A0--%E5%8D%95%E7%89%87%E6%9C%BA%E5%AE%9E%E7%94%A8%E5%B0%8F%E7%9F%A5%E8%AF%86-3.jpg (31.37 KB, 下載次數(shù): 170)
下載附件
2016-3-28 03:51 上傳
#include "STC15W4K.H" void main(void) {
while(1)
{
P41=0; // 點(diǎn)亮LED
}
}
4 看門狗復(fù)位
%E7%AC%AC11%E7%AB%A0--%E5%8D%95%E7%89%87%E6%9C%BA%E5%AE%9E%E7%94%A8%E5%B0%8F%E7%9F%A5%E8%AF%86-4.jpg (47.19 KB, 下載次數(shù): 181)
下載附件
2016-3-28 03:51 上傳
在工業(yè)控制、汽車電子、航空航天等需要高可靠性的系統(tǒng)中,為了防止系統(tǒng)在異常情況下 受到干擾,CPU程序跑飛,導(dǎo)致系統(tǒng)長時(shí)間異常工作,往往需要在系統(tǒng)中使用看門狗電路,看 門狗電路的基本作用就是監(jiān)視CPU的工作,正常工作時(shí),單片機(jī)可以在規(guī)定的時(shí)間內(nèi)復(fù)位看門 狗(即喂狗),時(shí)間只要不超出看門狗電路的溢出時(shí)間即可,當(dāng)系統(tǒng)進(jìn)入死循環(huán)或者執(zhí)行到無 程序代碼區(qū)造成死機(jī)時(shí),單片機(jī)就會(huì)停止喂狗,超過一定時(shí)間后,看門狗電路就會(huì)強(qiáng)制系統(tǒng) 復(fù)位,使系從新開始運(yùn)行,要使用此功能,需要在STC-ISP軟件下載程序時(shí)開啟看門狗,開啟 看門狗后程序必須不斷地在規(guī)定的時(shí)間內(nèi)喂狗,注意:看門狗一旦開啟,單片機(jī)執(zhí)行任何指 令都無法將其關(guān)閉,必須斷電才能關(guān)閉。狗定時(shí)器溢出時(shí)間由ISP軟件的分頻系數(shù)確定(見下 頁表格)。
%E7%AC%AC11%E7%AB%A0--%E5%8D%95%E7%89%87%E6%9C%BA%E5%AE%9E%E7%94%A8%E5%B0%8F%E7%9F%A5%E8%AF%86-1.jpg (45.82 KB, 下載次數(shù): 160)
下載附件
2016-3-28 03:51 上傳
具有看門狗的程序示例。
#include “STC15W4K.H”
void main(void)
{
… // 其他初始化代碼
while(1)
{
display(); // 顯示程序
keyboard(); // 鍵盤程序
… // 其他代碼
WDT_CONTR = 0x3c; // 喂狗信號(hào),復(fù)位WDT。
}
}