久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6724|回復: 6
打印 上一主題 下一主題
收起左側

單片機EEPROM的讀寫之間要不要延時一段時間

[復制鏈接]
跳轉到指定樓層
樓主
最近寫一個需要保存參數的程序,IC用STC15W408AS,10個扇區都用到了,實測時經常出現數據丟失的現象,請問有沒有什么辦法可以保證數據的準確性
void key_handle()
{
        uchar t,e1,e2,limit;
        e1 = dcx(0x0020);
        e2 = dcx(0x0220);
         while(1)
         {
                 if(KEY_1 == 0)
                 {
                         Delay(2);
                         if(KEY_1 == 0)
                         {
                                 while(KEY_1 == 0);
                                 if(limit<++e1) e1 = 0;
                         }                         
                 }
                 
                 if(KEY_2 == 0)
                 {
                         Delay(2);
                         if(KEY_2 == 0)
                         {
                                 while(KEY_2 == 0);
                                 if(limit<--e1) e1 = limit;
                         }
                 }
                 display1(e1);
         }


uchar dcx(uint addr)
{
  uchar dat;
        IAP_CONTR = ENABLE_IAP;
        IAP_CMD = CMD_READ;
        IAP_ADDRL = addr;
        IAP_ADDRH = addr >> 8;
        IAP_TRIG = 0x5a;
        IAP_TRIG = 0xa5;
        _nop_();
        _nop_();
        dat = IAP_DATA;
        Q0();
       
        return dat;
}

void cc(uint addr)
{
  IAP_CONTR = ENABLE_IAP;
        IAP_CMD = CMD_ERASE;
        IAP_ADDRL = addr;
        IAP_ADDRH = addr>>8;
        IAP_TRIG = 0x5a;
        IAP_TRIG = 0xa5;
        _nop_();
        _nop_();
        Q0();
}

void xcx(uint addr,uchar dat)
{
  IAP_CONTR = ENABLE_IAP;
        IAP_CMD = CMD_PROGRAM;
        IAP_ADDRL = addr;
        IAP_ADDRH = addr>>8;
        IAP_DATA = dat;
        IAP_TRIG = 0x5a;
        IAP_TRIG = 0xa5;
        _nop_();
        _nop_();
        Q0();
}

void Q0()
{
  IAP_CONTR = 0;
        IAP_CMD = 0;
        IAP_TRIG = 0;
        IAP_ADDRH = 0x80;
        IAP_ADDRL = 0;
}


大概就是按鍵設置參數然后保存這樣,連續對多個參數進行調整后保存會出現數據丟失或者數據錯誤 的情況,網上說在每次寫入后都校驗一次,不過在實際使用中不同參數的讀寫保存之間的操作間隔非常小,11.059的晶振不知道能不能在這樣極短的間隔內跑完這一系列的語句,不知道大佬們有沒有什么好的EEPROM讀寫過程可以分享分享,虛心請教,謝謝
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:584814 發表于 2019-12-17 16:38 | 只看該作者
根據手冊來,除非手冊印錯了
回復

使用道具 舉報

板凳
ID:25310 發表于 2019-12-17 17:23 | 只看該作者
你這個程序不完整看不了,按我的經驗不會出現數據丟失問題。
回復

使用道具 舉報

地板
ID:213173 發表于 2019-12-17 17:26 | 只看該作者
因為EEPROM有擦寫壽命的,所以不太適合用于頻繁適時擦寫。通常是把需要保存的數據放在緩存中,掉電時才寫入EEPROM保存,再次上電時讀取保存的數據。
STC單片機寫EEPROM是按扇區為單位,每個扇區512字節,寫之前要將整個扇區擦除,寫一個字節也得如此。
為了保證寫入的數據準確無誤可以每寫完一個地址的數據,立即讀取該地址的數據,并與寫數據比較判斷是否正確。如正確續寫下一個地址的數據,直至全部數據寫完。如果中途發現錯誤可以將整個扇區擦除從頭開始重寫。STC官方示例:


回復

使用道具 舉報

5#
ID:601478 發表于 2019-12-18 09:27 | 只看該作者
pcbboy 發表于 2019-12-17 17:23
你這個程序不完整看不了,按我的經驗不會出現數據丟失問題。

我補充一下吧,就是多了個保存數據和菜單循環共用的按鍵,按下執行把改變后得值存回原地址,這樣而已
補充:把這個if判斷放到while(1)里
if(KEY_SET == 0)
           {
                   Delay(2);
                   if(KEY_SET == 0)
                   {
                     while(KEY_SET == 0);
                     if(19<++q) q = 0;
                     cc(0x0020 & 0x0220);
                     if(IAP_CONTR == 0) xcx(0x0020,e1);
                     if(IAP_CONTR == 0) xcx(0x0220,e2);
                     return;
                   }
           }
回復

使用道具 舉報

6#
ID:601478 發表于 2019-12-18 09:34 | 只看該作者
測試的時候需要模擬一般使用情況時使用者對參數進行修改的場景,所以我就想把它做到某些情況下面對快速的讀寫操作仍然可以保證數據的準確性
回復

使用道具 舉報

7#
ID:342911 發表于 2019-12-19 19:17 | 只看該作者
前一陣在壇子里逛看見前輩討論這個,24C02一頁的大小是8,所以寫入的時候每到8的倍數的時候要等5ms換頁 寫的時候要注意下,讀的時候可以一次性讀,換page寫的時候要等5ms
回復

使用道具 舉報

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

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级视频在线免费观看 | 一区二区av在线 | 91精品国产麻豆 | 天天干天天色 | 99精品一级欧美片免费播放 | 欧美福利| 亚洲视频中文字幕 | 国产午夜精品久久久 | 伊人热久久 | 5060网一级毛片 | 黄色国产视频 | 日本精品一区二区三区在线观看视频 | 求个av网址 | 久久久av| 日韩一区二区三区在线观看 | 一级视频在线免费观看 | 日韩播放| 久久久久国产一区二区三区四区 | 色播久久久 | 成人福利网 | 久久精品国产一区二区电影 | 亚洲男人网 | 欧美区日韩区 | 国产91在线播放精品91 | 日韩三级 | 免费看黄色小视频 | 国产精品久久久久久久久久久免费看 | 天天看天天干 | 国产精品一区二区久久 | 久久久久国产精品午夜一区 | 国产精品成人一区二区三区夜夜夜 | 亚洲精品一区在线观看 | 亚洲免费婷婷 | 国产精品一区二区不卡 | 久久久影院| 黄网免费看 | 国内自拍真实伦在线观看 | 一区二区三区影院 | 羞羞的视频免费看 | 91亚洲国产成人精品一区二三 | 一级做a爰片性色毛片视频停止 |