標題: 用的STC8H1K08的單片機,把IO接收到的幾個字節(jié)的數(shù)據(jù)存入內(nèi)部eeprom,請大家指點 [打印本頁]

作者: xrzszhang    時間: 2023-5-11 01:10
標題: 用的STC8H1K08的單片機,把IO接收到的幾個字節(jié)的數(shù)據(jù)存入內(nèi)部eeprom,請大家指點
目前用的是STC8H1K08單片機,由于板子做的倉促,必須用IO口接收別處的串口發(fā)來的數(shù)據(jù),也就是把IO當串口來用,目前IO已經(jīng)可以接收外部USB轉(zhuǎn)TTL工具發(fā)來的數(shù)據(jù),波特率為19200,接收到幾個字節(jié)的數(shù)據(jù)把它們放在了數(shù)組中,想把數(shù)組中的幾個字節(jié)的數(shù)據(jù)存入eeprom中并讀出來,最后把這幾個字節(jié)的數(shù)據(jù)通過另一個IO發(fā)出來。目前的問題是增加了eeprom的擦除,寫入和讀出函數(shù)后主循環(huán)while(1)跑不起來(主循環(huán)中有LED閃爍的程序),且數(shù)據(jù)不能從IO發(fā)送出去,工程已上傳到附件。請各位大佬幫忙看下哪里有問題。非常感謝!

test.zip

113.07 KB, 下載次數(shù): 21

模擬串口,eeprom存儲


作者: wulin    時間: 2023-5-11 09:10
數(shù)據(jù)存入EEPRPM的主要目的是為了掉電不丟失。所以正常運行時不需要頻繁寫EEPRPM。當不得以用普通IO口當串口來用要占用不少CPU資源,會使其他程序運行不暢。哪怕只寫一個字節(jié)也得擦除整個扇區(qū),很耗時間。建議將模擬串口收到的數(shù)據(jù)放在數(shù)組中,可以直接使用。開啟掉電中斷保存EEPROM的方法,不影響正常工作。關(guān)機或掉電時數(shù)據(jù)保存在EEPROM,供再次得電讀取使用。這里有一個技巧:開機初始化后讀取保存在EEPROM的數(shù)據(jù),隨即刪除該扇區(qū)。掉電中斷直接寫EEPROM,無需再擦除扇區(qū)消耗時間。以IAP15W4K58S4在TX-1C開發(fā)板上實驗為例,掉電中斷寫兩個字節(jié)用時215.25us,板上電源濾波電容100uF,剩余電量從中斷開始到MCU停止工作約2.5ms。
作者: yzwzfyz    時間: 2023-5-11 14:58
沙發(fā)解得好。
我的做法如沙發(fā)所說,CPU普通運行中,只將數(shù)據(jù)寫入RAM,只在掉電發(fā)生時,做一個將RAM中的數(shù)據(jù)轉(zhuǎn)移存入EEPROM的動作。當然硬件上,加有掉電檢測。

如果樓主執(zhí)意要立即寫入EEPROM,要做到:
任何時刻,不要死等某個信號。
假設(shè)某個信號(如:擦除)從起動到產(chǎn)生需要10ms,你如果死等它,則在這10ms中,其它程序就得不到運行(如刷新顯示,串行數(shù)據(jù)……),功能必受影響。
做到不死等,問題基本就解決了。不過,這個非?简炦壿嫊r序規(guī)劃能力,以及程序功底。






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1