以單片機為核心的儀器儀表的工作穩(wěn)定性和可靠性往往受工作環(huán)境的影響很大。在電磁干擾較弱(如室內(nèi)))時,可靠性和穩(wěn)定性往往容易達到應用要求,然而,在室外,尤其是工作環(huán)境較惡劣的情況下,就有可能導致儀器儀表工作不正?;蚴ъ`。因此,利用單片機自身的優(yōu)勢和豐富的外圍模塊來提高儀器儀表的抗干擾能力,具有十分重要的現(xiàn)實意義。
目前,解決單片機程序跑飛主要利用開門狗來實現(xiàn)。解決掉電數(shù)據(jù)保護功能時,數(shù)據(jù)存儲介質(zhì)常選用兩類:一類是EEPROM,但寫入時間較長;另一類是帶有后備電池的小容量SRAM來構(gòu)成非易失存儲器,這種方法寫入速度快,但增加了電路的復雜性。
SST公司的FlashFlex51系列單片機具有內(nèi)部看門狗和片內(nèi)Flash存儲器,可以用于解決單片機程序跑飛和重要數(shù)據(jù)的掉電存儲問題。本文是采用SST公司的SST89E58RD2單片機來解決視頻字符疊加系統(tǒng)在惡劣環(huán)境下程序跑飛和疊加字符丟失的問題。
1 視頻字符疊加系統(tǒng)的問題分析
視頻字符疊加系統(tǒng)在室內(nèi)環(huán)境下的字符疊加效果一般都可以滿足應用要求。然而,將該系統(tǒng)應用于室外電磁干擾較為嚴重的環(huán)境時,疊加系統(tǒng)往往會出現(xiàn)疊加字符消失、系統(tǒng)與上位機通信不正常等問題。通過對該問題的分析研究發(fā)現(xiàn),單片機程序跑飛和疊加系統(tǒng)中的字符疊加芯片在受到外界干擾時,其視頻存儲器內(nèi)容被清除是導致系統(tǒng)不能正常運行的真正原因。由于系統(tǒng)的硬件結(jié)構(gòu)一般不便于更改,因此,找到一款與目前AT89C51兼容且能解決系統(tǒng)不穩(wěn)定的單片機是解決問題的*方法。在對AT89C51單片機和其它51單片機進行對比分析后,本文選擇了SST89E58RD2單片機來解決系統(tǒng)穩(wěn)定性和可靠性的問題。
2 SST89E5 8RD2簡介
2.1 SST89E58RD2的主要特性
SST89E58RD2單片機可兼容80C51系列單片機,且內(nèi)置超級FLASH存儲器,5 V工作電壓下的工作頻率為0~40 MHz,與現(xiàn)行的80C52系列單片機硬件PIN-TO-PIN完全兼容,同時軟件、開發(fā)工具也完全兼容;SST89E58RD2帶有1 K字節(jié)的內(nèi)部RAM,并包含32 K字節(jié)的基本存儲塊和8K字節(jié)二級存儲塊的超級FLASH;具有ISP (在系統(tǒng)編程)和IAP(在應用中編程)功能;芯片內(nèi)有SPI(串行外圍接口)和增強型UART、10個中斷源、四個中斷優(yōu)先級以及可編程看門狗定時器(WDT);兼容TTL和CMOS邏輯電平;內(nèi)含PCA(可編程計數(shù)器陣列),具有PWM和捕獲、比較功能;可實現(xiàn)掉電檢測。
2.2 看門狗定時器
SST89E58RD2內(nèi)置的可編程看門狗定時器可用于程序死循環(huán)或程序運行不正常(如程序跑飛)時的自動恢復。為保護系統(tǒng)因程序死循環(huán)等引起的運行不正常,用戶程序需要在其定義的周期內(nèi)刷新看門狗定時器,否則,當WDRE(看門狗復位)有效時,將觸發(fā)內(nèi)部硬件復位。WDT(看門狗定時器)用系統(tǒng)時鐘作為基準時鐘,因此,嚴格的說,看門狗定時器應稱為看門狗計數(shù)器。WDT寄存器每344064個系統(tǒng)時鐘加1??撮T狗數(shù)據(jù)/重載寄存器(WDTD)作為WDT的重載寄存器。WDT的結(jié)構(gòu)框圖如圖1所示??撮T狗可通過兩個特殊寄存器WDTC(看門狗定時器控制寄存器)和WDTD工作。在空閑模式下,WDT運行被臨時掛起,并在接收到中斷信號后從空閑模式恢復為正常工作模式。WDT的計數(shù)周期計算公式如下:
周期=(255-WDTD)x344064x1/Fclk
式中,WDTD是放入WDTD寄存器的重載值,F(xiàn)clk是系統(tǒng)的晶振頻率。
3 FLASH存儲器編程
SST89E58RD2單片機可使用IAP模式對其內(nèi)部的FLASH存儲器進行擦除或?qū)懭霐?shù)據(jù)。當SST89E58RD2單片機的CPU進入IAP模式后,其FLASH存儲器的兩個區(qū)中的一個可在擦除數(shù)據(jù)或?qū)懭霐?shù)據(jù)的同時,另一區(qū)的用戶代碼仍可以被CPU執(zhí)行。即在內(nèi)部FLASH存儲器寫人數(shù)據(jù)的同時,CPU可以從外部存儲器載入代碼。位于單片機內(nèi)部的特殊功能寄存器SFST、SFCM、SFAL、SFAH、SFDT和SFCF用于控制和管理FLASH的擦除和編程執(zhí)行。在IAP模式下,CPU內(nèi)核和FLASH控制單元將關閉外部時鐘,內(nèi)部晶振提供編程和擦除操作的時序參考。內(nèi)部晶振只有在被請求時才打開,而當FLASH操作完成后立刻被關閉。CPU要運行于IAP模式,必須使能IAP使能位(SFCF[6]),否則,F(xiàn)LASH的編程命令將不起作用。所有的IAP命令只有在IAP模式才能執(zhí)行,但當被選擇的存儲器區(qū)域已被安全鎖使能時,IAP命令將無法執(zhí)行。編程命令向存儲器塊寫入新數(shù)據(jù)時,必須保證該存儲器塊處于被擦除狀態(tài),即其值為0xFF。如果存儲器塊沒有被擦除,則應用合適的擦除命令進行擦除操作。尤其不能在CPU正載入代碼的存儲器區(qū)域進行編程或擦除操作,這將導致不可預測的編程并可能導致編程數(shù)據(jù)損毀。
3.1 片擦除
片擦除命令可擦除FLAH存儲器的所有數(shù)據(jù)。該命令只有在EA為0時才有效,其執(zhí)行操作流程如圖2所示。
3.2 塊擦除
塊擦除命令可擦除FLASH存儲器塊(塊0和塊1)中任何一塊的所有數(shù)據(jù),塊的選擇可通過設置SFAH寄存器的值來實現(xiàn)。當SFAH[7]為0時,選擇塊0;當SFAH[7:4]為E,選擇塊時1。塊擦除的操作程序如圖3所示。
3.3 扇區(qū)擦除
扇區(qū)擦除操作可擦除扇區(qū)的所有信息,扇區(qū)的大小是128字節(jié),對哪個扇區(qū)進行擦除操作由SFAH和SFAL寄存器決定,其執(zhí)行操作程序框圖4所示。
3.4 字節(jié)編程
字節(jié)編程命令用于編程一個字節(jié)的數(shù)據(jù),其編程地址由SFAH和SFAL決定,編程的數(shù)據(jù)存于SFDT存儲器,字節(jié)編程的流程框圖如圖5所示。
4 解決方案
在對字符疊加系統(tǒng)出現(xiàn)疊加字符丟失和程序跑飛問題進行深入分析后發(fā)現(xiàn),影響系統(tǒng)正常工作的原因是字符疊加芯片的復位腳被干擾信號復位從而導致視頻疊加信息的丟失;或者是由于干擾單片機的PC指針超出了