上電復(fù)位和RES復(fù)位是人為的正常復(fù)位,以保證程序計(jì)數(shù)器被清零且程序從頭開始執(zhí)行。要正常進(jìn)行這兩種復(fù)位動(dòng)作,需要外接正確的RES復(fù)位電路,一般來說不同的單片機(jī)的復(fù)位電路稍有不同,單片機(jī)廠商都會(huì)提供標(biāo)準(zhǔn)的復(fù)位電路資料。以HOLTEK IC為例,我們提供的復(fù)位電路是RES腳接100K歐姆的電阻至VDD;RES腳再接10K電阻和0.1uF的電容至VSS。
當(dāng)電源電壓受外部干擾,低于正常工作電壓時(shí),會(huì)造成程序功能運(yùn)行不正常,嚴(yán)重的還可能造成單片機(jī)死機(jī)。此時(shí)對(duì)你所說的發(fā)電機(jī)系統(tǒng)就會(huì)造成嚴(yán)重的后果,我們就需要用低電壓復(fù)位來解決這個(gè)問題。通常我們可以用兩個(gè)方法實(shí)現(xiàn)低電壓復(fù)位:1、外加一個(gè)電壓檢測(cè)芯片(例如7033)加到RES腳上,當(dāng)電源電壓低于某個(gè)臨界值時(shí),電壓檢測(cè)芯片會(huì)給出一個(gè)低電平到RES腳是單片機(jī)復(fù)位,防止單片機(jī)死機(jī)。2、有些廠家的單片機(jī)內(nèi)部會(huì)有一個(gè)低電壓檢測(cè)LVR的功能,例如HOLTEK單片機(jī)。當(dāng)電源電壓低于某一個(gè)臨界值時(shí),單片機(jī)會(huì)自動(dòng)復(fù)位避免死機(jī),外部不需要再連接任何檢測(cè)電壓的電路。
除了外部電源不穩(wěn)定會(huì)造成單片機(jī)復(fù)位,內(nèi)部WDT溢出也會(huì)造成復(fù)位,即內(nèi)部事件復(fù)位。對(duì)于你說的需要長(zhǎng)時(shí)間穩(wěn)定工作的系統(tǒng)來說,看門狗是十分必要的,它可以避免程序跑飛造成的錯(cuò)誤。
當(dāng)復(fù)位發(fā)生時(shí),要保證復(fù)位后能與復(fù)位前的各個(gè)狀態(tài)無縫的連接起來,就需要用軟件來判定復(fù)位前程序執(zhí)行到哪個(gè)程序段。以HOLTEK MCU為例,除了上電復(fù)位之外,通用寄存器復(fù)位前后的值不會(huì)發(fā)生變化。那么就可以設(shè)定一些寄存器記錄程序當(dāng)前運(yùn)行在哪一個(gè)程序功能段。一旦發(fā)生復(fù)位,只需要讀出那些寄存器的值就可以跳轉(zhuǎn)到復(fù)位之前運(yùn)行的程序功能段運(yùn)行。另外HOLTE MCU內(nèi)部有兩個(gè)特殊標(biāo)志位PD和TO,可以根據(jù)此兩位的值來判定具體是什么原因造成的復(fù)位。