找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1493|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

用的STC8H1K08的單片機(jī),把IO接收到的幾個(gè)字節(jié)的數(shù)據(jù)存入內(nèi)部eeprom,請大家指點(diǎn)

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

test.zip

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

模擬串口,eeprom存儲

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

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

評分

參與人數(shù) 1黑幣 +18 收起 理由
wpppmlah + 18 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報(bào)

板凳
ID:123289 發(fā)表于 2023-5-11 14:58 | 只看該作者
沙發(fā)解得好。
我的做法如沙發(fā)所說,CPU普通運(yùn)行中,只將數(shù)據(jù)寫入RAM,只在掉電發(fā)生時(shí),做一個(gè)將RAM中的數(shù)據(jù)轉(zhuǎn)移存入EEPROM的動作。當(dāng)然硬件上,加有掉電檢測。

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

回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表