欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

單片機(jī)EEPROM的讀寫之間要不要延時(shí)一段時(shí)間

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:601478 發(fā)表于 2019-12-17 15:09 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
最近寫一個(gè)需要保存參數(shù)的程序,IC用STC15W408AS,10個(gè)扇區(qū)都用到了,實(shí)測(cè)時(shí)經(jīng)常出現(xiàn)數(shù)據(jù)丟失的現(xiàn)象,請(qǐng)問有沒有什么辦法可以保證數(shù)據(jù)的準(zhǔn)確性
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;
}


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

使用道具 舉報(bào)

沙發(fā)
ID:584814 發(fā)表于 2019-12-17 16:38 | 只看該作者
根據(jù)手冊(cè)來,除非手冊(cè)印錯(cuò)了
回復(fù)

使用道具 舉報(bào)

板凳
ID:25310 發(fā)表于 2019-12-17 17:23 | 只看該作者
你這個(gè)程序不完整看不了,按我的經(jīng)驗(yàn)不會(huì)出現(xiàn)數(shù)據(jù)丟失問題。
回復(fù)

使用道具 舉報(bào)

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


回復(fù)

使用道具 舉報(bào)

5#
ID:601478 發(fā)表于 2019-12-18 09:27 | 只看該作者
pcbboy 發(fā)表于 2019-12-17 17:23
你這個(gè)程序不完整看不了,按我的經(jīng)驗(yàn)不會(huì)出現(xiàn)數(shù)據(jù)丟失問題。

我補(bǔ)充一下吧,就是多了個(gè)保存數(shù)據(jù)和菜單循環(huán)共用的按鍵,按下執(zhí)行把改變后得值存回原地址,這樣而已
補(bǔ)充:把這個(gè)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;
                   }
           }
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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