引 言
MCS-51單片機是目前國內(nèi)應用最廣泛的一種單片機型,。全球各單片機生產(chǎn)廠商在MCS-51內(nèi)核基礎上,派生了大量的51內(nèi)核系列單片機,,極大地豐富了MCS-51的種群,。其中STC公司推出了STC89系列單片機,增加了大量新功能,,提高了51的性能,,是MCS-51家族中的佼佼者。早期的單片機控制系統(tǒng),,采用單片機加片外EEPROM配合,,來存儲一些需要預置的重要參數(shù),并在數(shù)碼管上顯示出來,。由于單片機控制的整流器要求實時性很強,,而早期EEPROM的寫周期在10 ms左右,因此運行參數(shù)的預置是在整流器待機的情況下進行的,。而很多情況下需要在運行的同時記錄數(shù)據(jù),,如用單片機控制的12脈波汽車電泳整流器要求在運行的同時實時記錄重要數(shù)據(jù),而且在掉電時不丟失,。由于在12脈波整流器中運行的單片機程序,,其周期必須小于1.67 ms(交流電網(wǎng)的1個周期是20 ms,除以12就是l_67 ms),,這就要求實時記錄的時間在1ms以下甚至更短(考慮到程序的執(zhí)行時間),。經(jīng)查閱資料發(fā)現(xiàn),目前很多EEPROM達不到這個要求[1],,即使時間最短的AT89S8252單片機片內(nèi),。EEP-ROM的寫周期也是2.5 ms。本文通過對EEPROM的巧妙應用,,實現(xiàn)了整流器在線記錄數(shù)據(jù)的功能,。
1 尋找符合要求的單片機
設備使用的是Atmel公司的AT89C52(40DIP封裝)單片機和EEPROM芯片2817A。要想在不改變原設備電路板的情況下完成要求的功能,,就只能在兼容的MCS-51系列單片機中想辦法,。AT89S8252片內(nèi)含有2 KB的EEPROM,經(jīng)編程測試發(fā)現(xiàn),,它雖然能實時記錄數(shù)據(jù)并且斷電不丟失,,但是在向片內(nèi)EEPROM中記錄1個數(shù)據(jù)時,,能引起輸出電壓和電流的波動,不能滿足實際運行的需要,。其原因是AT89S8252單片機片內(nèi)EEPROM的寫周期為2.5 ms,,超過了1.67 ms的程序的執(zhí)行周期,從而影響了程序的正常運行,。所以執(zhí)行周期是解決問題的關(guān)鍵,。
由參考文獻[2-3]知:STC89C51RC/RD+系列單片機片內(nèi)含有EEPROM(Data Flash),讀1個字節(jié)/編程1個字節(jié)/擦除1個扇區(qū)(512字節(jié))的時間分別為10/μs/60μs/10 ms,。編程1個字節(jié)的時間為60μs,,遠小于AT89S8252片內(nèi)EEPROM 2.5 ms的編程時間,這為解決問題提供了思路,。
2問題的解決
單片機STC89C55RD+(40DIP封裝),,其引腳、功能完全與AT89C52兼容,,與MCS-51程序也兼容,,片內(nèi)含有20KB的Flash程序存儲器,16KB的EEPROM數(shù)據(jù)存儲器,。把原用于AT89C52中的程序?qū)懙絊TC89C255RD+中,,放到原設備上運行,可長期穩(wěn)定地運行,。經(jīng)修改的在整流器中運行的單片機程序,,實時記錄一些數(shù)據(jù)到STC289C55RD+的EEPROM中,整流器可正常運行,,但不能執(zhí)行扇區(qū)擦除操作,。執(zhí)行扇區(qū)擦除操作將嚴重影響整流器的正常運行,引起輸出電壓和電流的很大波動,。執(zhí)行扇區(qū)擦除操作時,,從示波器來看整流器的輸出間斷了20 ms,電壓電流顯示很大的波動,。用示波器捕捉到了EEPROM寫時的波形,,輸出波形暫停了20 ms,1個周波電壓,,電壓波形如圖1所示,,不執(zhí)行扇區(qū)擦除操作時的波形如圖2所示。從圖中可以看出,,問題得到了很好的解決,。
究其原因,這與EEPROM的特點有關(guān),。STC89C5lRC/RD+系列單片機片內(nèi)的EEPROM,,與普通的EEPROM不同,。普通的EEPROM有字節(jié)讀/寫功能,不需要擦除,,在字節(jié)寫的時候自動擦除,。而STC89C51RC/RD+系列單片機片內(nèi)的EEPROM,具有Flash的特性,,只能在擦除了扇區(qū)后進行字節(jié)寫,寫過的字節(jié)中不能重復寫,,只有待扇區(qū)擦除后才能重新寫,,而且沒有字節(jié)擦除功能,只能扇區(qū)擦除,。
3 EEPROM(Data FIash)的巧妙應用
基于以上EEPROM(Data Flash)不易擦除的特點,,可以寫后先不擦除。利用EEPROM(Data Flash)容易寫,、時間短(字節(jié)寫只有60 μs)的特點,,可以充分利用其寫的功能。根據(jù)汽車電泳整流器的特點:每泳1輛汽車,,整流器的輸出電流就從0逐漸上升到最大電流,,然后又逐漸回到0。從電流的變化可以準確地識別出電泳過的車的數(shù)量,。每識別出1輛車,,就在EEPROM(Data Flash)的1個字節(jié)中(起始地址為0000H)寫入#01H(也可以是其他數(shù),但不能為#OFFH),,然后地址自動加1,,等待識別出下一輛車。這樣就通過EEPROM(Data Flash)字節(jié)地址的方式,,間接記錄了汽車電泳整流器電泳過的車輛總數(shù),,并可在數(shù)碼管上顯示出來。16 KB的EEPROM(Data Flash)可記錄16 384輛車,。待將計滿時,,可按擦除按鈕擦除EEP-ROM(Data Flash)中的所有扇區(qū),再重新計數(shù),。如按每10分鐘電泳1輛車,,1天工作16小時,可連續(xù)記錄16 384/60/10×16)=170天,。此種方法也可用于對電泳整流器連續(xù)工作時間的累計,,如每10分鐘記錄1個數(shù)據(jù),可連續(xù)記錄16 384/(60/10)=2 730小時,。
整流器停機斷電后,,每次開機給單片機上電時,,在初始化程序中,首先從地址#0000H讀片內(nèi)EEPROM的數(shù)據(jù),,如果數(shù)據(jù)不為#OFFH,,地址自動加1,再讀下一個字節(jié),,直到所讀數(shù)據(jù)為#OFFH為止,。此時EEPROM的地址指針數(shù)據(jù),即為前面累加的電泳車輛數(shù)(或累計電泳工作時間),,可在數(shù)碼管上顯示出來,。整流器工作后,按前述
結(jié)語
結(jié)合上產(chǎn)的實際情況,,在不改變原設備電路板的情況下,,通過使用MCS-51系列兼容單片機STC89C55RD+,巧妙利用其片內(nèi)EEPROM,,實現(xiàn)了在整流器運行的同時記錄數(shù)據(jù)的功能,,切掉點情況下不丟失數(shù)據(jù)。這種方法有效地提高了原設備的功能,,給用戶的使用到來了極大的方便,,并且通過實驗驗證了此方法是可行的。