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

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

QQ登錄

只需一步,快速開(kāi)始

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

STC8F單片機(jī)EEPROM神奇事件

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:95375 發(fā)表于 2021-9-5 16:32 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
請(qǐng)問(wèn)有哪個(gè)大人碰到過(guò)一組數(shù)據(jù)存到EEPROM中取出后數(shù)據(jù)是一樣的,再寫(xiě)回?cái)?shù)組中卻使用異常的嗎?從串口發(fā)送數(shù)據(jù)到電腦對(duì)比是數(shù)據(jù)存進(jìn)去的和取出來(lái)的是真的一模一樣的,但用來(lái)發(fā)射紅外信號(hào)卻異常,原數(shù)組數(shù)據(jù)卻正常,再把備用數(shù)組數(shù)據(jù)寫(xiě)回原數(shù)組里也正常,太神奇了。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:624769 發(fā)表于 2021-9-5 16:48 | 只看該作者
STC8F 系列 直接用 MOVC 讀Eeprom 效率高,系統(tǒng)還不會(huì)暫停,會(huì)比較好一點(diǎn)。而且活用extern unsigned char code 可以直接當(dāng)數(shù)組用,而不用預(yù)先讀出來(lái)。
回復(fù)

使用道具 舉報(bào)

板凳
ID:57657 發(fā)表于 2021-9-5 17:05 | 只看該作者
用MOVC指令訪問(wèn),不管是ROM還是EEPROM,都是一樣的速度,部分老型號(hào)不支持用MOVC訪問(wèn)EEPROM,C語(yǔ)言用 unsigned char code 指針。
回復(fù)

使用道具 舉報(bào)

地板
ID:160500 發(fā)表于 2021-9-5 18:04 | 只看該作者
數(shù)據(jù)寫(xiě)入EEPROM,清零原數(shù)組,再讀取EEPROM中的數(shù)據(jù)賦值給數(shù)組,此時(shí)暫停程序,檢查數(shù)組中數(shù)據(jù)是否一致。如果一致,繼續(xù)運(yùn)行程序,看是否正常,不正常繼續(xù)排查;如果數(shù)據(jù)不一致,則檢查讀取是否出錯(cuò)、寫(xiě)入數(shù)組的方法等等。
回復(fù)

使用道具 舉報(bào)

5#
ID:417092 發(fā)表于 2021-9-5 19:24 | 只看該作者
沒(méi)看懂你說(shuō)的什么意思!!!
但是通信容易出問(wèn)題的有
1,串口,發(fā)送和接收的波特率不一致。沒(méi)使用校驗(yàn)。。。。
2,從高到低位,和 從低位到高位。弄反了。。。。
回復(fù)

使用道具 舉報(bào)

6#
ID:401564 發(fā)表于 2021-9-5 23:45 | 只看該作者
神奇的事件,在99.9999%的情況下,是由于神奇的人引起的
剛開(kāi)始學(xué)單片機(jī)的時(shí)候,總覺(jué)得單片機(jī)不是這不行就是那不行
現(xiàn)在,出了問(wèn)題,首先排除的就是"單片機(jī)壞了"
回復(fù)

使用道具 舉報(bào)

7#
ID:95375 發(fā)表于 2021-9-8 21:12 | 只看該作者
  1. 也許我沒(méi)有表達(dá)清楚意思,就是一組數(shù)組數(shù)據(jù)通過(guò)紅外發(fā)射后能正常控制設(shè)備,但把這組數(shù)組

  2. 數(shù)據(jù)保存到EEPROM后再取出放回?cái)?shù)組再通過(guò)紅外發(fā)射卻不能控制設(shè)備了,可以確定這組數(shù)據(jù)在

  3. 存入前和取出后是完全一樣的,沒(méi)有出錯(cuò)也沒(méi)有錯(cuò)序,可為什么就不能正常了,原以為是發(fā)射

  4. 用的數(shù)組重寫(xiě)數(shù)據(jù)造成出錯(cuò),但用另外一組完全一樣的數(shù)組同時(shí)保存數(shù)據(jù),再把這組數(shù)據(jù)復(fù)制

  5. 到發(fā)射數(shù)組后卻能正常控制。


  6. 建立兩組數(shù)組

  7. uint  remotedata[207]; //發(fā)射數(shù)組
  8. uint  temp[207];        //臨時(shí)數(shù)組



  9. 紅外接收頭收到數(shù)據(jù)后存到發(fā)射數(shù)組里然后通過(guò)紅外發(fā)射頭發(fā)射能正常控制設(shè)備

  10. 然后把發(fā)射數(shù)組數(shù)據(jù)存到EEPROM里

  11. /*-------------------------------
  12. 寫(xiě)一字節(jié)數(shù)據(jù)到ISP/IAP/EEPROM區(qū)域
  13. -------------------------------*/
  14. void IapProgram(int addr, char dat)
  15. {
  16.     IAP_CONTR = WT_12M;                         //使能IAP
  17.     IAP_CMD = 2;                                //設(shè)置IAP寫(xiě)命令
  18.     IAP_ADDRL = addr;                           //設(shè)置IAP低地址
  19.     IAP_ADDRH = addr >> 8;                      //設(shè)置IAP高地址
  20.     IAP_DATA = dat;                             //寫(xiě)IAP數(shù)據(jù)
  21.     IAP_TRIG = 0x5a;                            //寫(xiě)觸發(fā)命令(0x5a)
  22.     IAP_TRIG = 0xa5;                            //寫(xiě)觸發(fā)命令(0xa5)
  23.     _nop_();
  24.     IapIdle();                                  //關(guān)閉IAP功能
  25. }


  26.                                                                                

  27. for(i=0;i<207;i++)//把學(xué)到的數(shù)據(jù)保存到內(nèi)存
  28.                                                                                 {
  29.                                                                                        

  30. IapProgram(IAP_ADDRESS+i,remotedata[i]);//寫(xiě)數(shù)據(jù)到EEPROM
  31.                                                                                 }
  32.                                                                                
  33.                                                                                

  34. for(i=0;i<207;i++)//
  35.                                                                                 {
  36.                                                                                        

  37.         temp[i]=remotedata[i];//
  38.                                                                                 }


  39. 官方寫(xiě)入代碼,應(yīng)該沒(méi)問(wèn)題吧,同時(shí)也把數(shù)據(jù)寫(xiě)入到臨時(shí)數(shù)組里



  40. 然后把EEPROM數(shù)據(jù)讀回到發(fā)射數(shù)組里

  41.                                 for(i=0;i<207;i++)//
  42.                                 {
  43.                                         remotedata[i]=IapRead(IAP_ADDRESS+i);//把

  44. 內(nèi)存中數(shù)據(jù)讀到數(shù)組
  45.                                 }


  46. 也沒(méi)問(wèn)題吧,通過(guò)串口對(duì)比過(guò)寫(xiě)入和讀出的數(shù)據(jù)是完全一模一樣的,如果是單單保存數(shù)據(jù)這是

  47. 完全沒(méi)毛病的,但通過(guò)紅外發(fā)射頭發(fā)射這組數(shù)據(jù)卻不正常了

  48. 不服真不行啊,把臨時(shí)數(shù)組里的數(shù)據(jù)寫(xiě)回到發(fā)射數(shù)組里就又發(fā)射正常了

  49.                         for(i=0;i<207;i++)//
  50.                         {
  51.                                 remotedata[i]=temp[i];//
  52.                         }               

  53. 把EEPROM讀取換成MOVC讀取是一個(gè)樣

  54. //BYTE IapRead(WORD addr)
  55. char IapRead(int addr)
  56. {
  57.                 addr += IAP_OFFSET; //使用 MOVC 讀取 EEPROM 需要加上相應(yīng)的偏移
  58.                 return *(unsigned char code *)(addr); //使用 MOVC 讀取數(shù)據(jù)       
  59. }



復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

8#
ID:95375 發(fā)表于 2021-9-8 21:20 | 只看該作者
188610329 發(fā)表于 2021-9-5 16:48
STC8F 系列 直接用 MOVC 讀Eeprom 效率高,系統(tǒng)還不會(huì)暫停,會(huì)比較好一點(diǎn)。而且活用extern unsigned char c ...

換MOVC讀取還是一樣,請(qǐng)問(wèn)extern unsigned char code當(dāng)數(shù)組用的話要怎么用,比如

for(i=0;i<207;i++)//
{
        temp[ i]=remotedata[ i];//
}

要怎樣用extern unsigned char code替代,我怎么感覺(jué)這個(gè)是定義常量用的呢
回復(fù)

使用道具 舉報(bào)

9#
ID:95375 發(fā)表于 2021-9-8 21:22 | 只看該作者
npn 發(fā)表于 2021-9-5 17:05
用MOVC指令訪問(wèn),不管是ROM還是EEPROM,都是一樣的速度,部分老型號(hào)不支持用MOVC訪問(wèn)EEPROM,C語(yǔ)言用 unsig ...

謝謝,不是MOVC讀取的問(wèn)題,不會(huì)指針,看到指針就暈
回復(fù)

使用道具 舉報(bào)

10#
ID:95375 發(fā)表于 2021-9-8 21:24 | 只看該作者
liuzx66 發(fā)表于 2021-9-5 18:04
數(shù)據(jù)寫(xiě)入EEPROM,清零原數(shù)組,再讀取EEPROM中的數(shù)據(jù)賦值給數(shù)組,此時(shí)暫停程序,檢查數(shù)組中數(shù)據(jù)是否一致。如 ...

數(shù)據(jù)是一致的,數(shù)據(jù)不一致那就好辦了
回復(fù)

使用道具 舉報(bào)

11#
ID:95375 發(fā)表于 2021-9-8 21:30 | 只看該作者
Y_G_G 發(fā)表于 2021-9-5 23:45
神奇的事件,在99.9999%的情況下,是由于神奇的人引起的
剛開(kāi)始學(xué)單片機(jī)的時(shí)候,總覺(jué)得單片機(jī)不是這不行就是 ...

這是肯定的,在未知的知識(shí)前任何人對(duì)任何事都感覺(jué)到神奇,如同魔術(shù)一般,我只是想看看有沒(méi)有人碰到我這樣的問(wèn)題,實(shí)在是想不明白相同的數(shù)據(jù)能做出不同的事情來(lái),畢竟代碼是沒(méi)有思想的,只是按我們?cè)O(shè)定的路走,現(xiàn)在卻變異了,肯定不是“單片機(jī)壞了”
回復(fù)

使用道具 舉報(bào)

12#
ID:57657 發(fā)表于 2021-9-8 22:12 | 只看該作者
單片機(jī)內(nèi)置的EEPROM,不是真正的EEPROM,而是Flash閃存 ,二進(jìn)制1可以寫(xiě)成0,反過(guò)來(lái)就不可以,只有擦除才可以全部恢復(fù)為1,一次擦1扇區(qū)(512字節(jié))。
24C02等EEPROM芯片沒(méi)有扇區(qū)的說(shuō)法,可以直接讀寫(xiě)。
回復(fù)

使用道具 舉報(bào)

13#
ID:624769 發(fā)表于 2021-9-8 23:45 | 只看該作者
liyago 發(fā)表于 2021-9-8 21:20
換MOVC讀取還是一樣,請(qǐng)問(wèn)extern unsigned char code當(dāng)數(shù)組用的話要怎么用,比如

for(i=0;i

創(chuàng)建一個(gè)匯編文件,
用  
CSEG      AT    2000H
Eeprom_DATA:      DS    0FFH
指向Eeprom 空間
然后 PUBLIC  Eeprom_DATA

然后再C語(yǔ)言 中 extern unsigned char code  Eeprom_DATA[];  來(lái)聲明

那么, 對(duì)于C語(yǔ)言的判斷, 就是引用 匯編里面定義的常量數(shù)組。 其實(shí)匯編里只是給了一個(gè)地址。
你C語(yǔ)言調(diào)用這個(gè)地址,就會(huì)到 0x2000 所對(duì)應(yīng)的 Eeprom 里面 MovC 讀出來(lái)了。
回復(fù)

使用道具 舉報(bào)

14#
ID:624769 發(fā)表于 2021-9-8 23:48 | 只看該作者

看你的代碼, 寫(xiě)入前沒(méi)有擦除 Eeprom,  IAP的Eeprom, 必須擦除后才能正確寫(xiě)入,否則會(huì)亂七八糟的東西,即使兩次寫(xiě)入相同的東西,也會(huì)變成亂七八糟的東西。
回復(fù)

使用道具 舉報(bào)

15#
ID:161164 發(fā)表于 2021-9-8 23:52 | 只看該作者
最直觀的方法就是用邏輯分析儀或示波器看看輸出端的波型
比較一下成功和失敗的分別

紅外線發(fā)射是經(jīng)38kHz調(diào)制后輸出的
對(duì)時(shí)間有極高的要求

到現(xiàn)時(shí)為止你發(fā)的代碼只有數(shù)據(jù)的存取
而沒(méi)有數(shù)據(jù)轉(zhuǎn)輸出的那部分

會(huì)不會(huì)是直接讀取EEPorm會(huì)對(duì)發(fā)射有影響?
回復(fù)

使用道具 舉報(bào)

16#
ID:95375 發(fā)表于 2021-9-9 17:19 | 只看該作者
謝謝各位大大的回復(fù),問(wèn)題已解決了,原來(lái)是我所有數(shù)據(jù)都是按兩位16進(jìn)制來(lái)處理了,實(shí)際上數(shù)據(jù)中有3位16進(jìn)制數(shù),stc-isp自帶的串口助手和XCOM V2.6都是顯示兩位16進(jìn)制數(shù),所以一時(shí)沒(méi)有發(fā)現(xiàn)數(shù)據(jù)有錯(cuò)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国精产品一区一区三区免费完 | 亚洲精品电影网在线观看 | 91久久久久久久久 | 成人国产a | 亚洲网站在线观看 | 国产高清一区二区 | 国产一区二区在线播放视频 | 国产一级片免费在线观看 | 欧美激情va永久在线播放 | 国产精品久久久久无码av | 国产一区久久 | 一区二区三区不卡视频 | 99久久婷婷国产综合精品 | 精品一区二区三区免费毛片 | 欧美午夜视频 | 日韩欧美一二三区 | 久久这里有精品 | 亚洲激精日韩激精欧美精品 | 国产精品久久久久久久久婷婷 | www日| 一本一道久久a久久精品蜜桃 | 成人在线播放网站 | www精品美女久久久tv | 色橹橹欧美在线观看视频高清 | 97久久超碰| 免费在线观看成人 | av一区二区三区四区 | 欧美专区日韩 | 精品久草| 亚洲国产黄 | 国产精品成人免费 | 日韩免费视频一区二区 | 久久国产三级 | 在线观看第一区 | 成人av一区二区三区 | 91在线精品一区二区 | 国产一区免费视频 | 日韩一区二区精品 | 日韩免费激情视频 | 亚洲天堂av在线 | 中文字幕精品一区久久久久 |