找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

51單片機+AT24C02連續(xù)讀寫程序問題

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:375590 發(fā)表于 2019-5-9 15:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
20黑幣
STC15單片機外接AT24C02,在連續(xù)寫入字符串后,需要重復寫5~8·次才能寫進去,而且讀取字符串的函數(shù)不能重復讀,讀第二次就進入死循環(huán),就是讀不到結束符,可是我每次讀都初始化 地址 i=0;  很奇葩,求大神給一套完整的  AT24C02連續(xù)讀寫的函數(shù),或者是能幫我解決問題,萬分感謝!

下面是我寫的讀寫函數(shù):

  1. void ee_store(u8 *p,u8 add)
  2. {
  3.         u8 i=0;
  4.         
  5.         IIC_Start();
  6.         IIC_SendByte(0xa0);
  7.         IIC_WaitAck();
  8.         IIC_SendByte(add*8);
  9.         IIC_WaitAck();        
  10.         do
  11.         {
  12.                 if(i==0||i%8!=0)
  13.                 {
  14.                         IIC_SendByte(p[i]);
  15.                         IIC_WaitAck();
  16.                 }
  17.                 else
  18.                 {
  19.                         IIC_Stop();        
  20.                         
  21.                         do
  22.                         {
  23.                                 IIC_Start();
  24.                                 IIC_SendByte(0xa0);
  25.                                 IIC_WaitAck();
  26.                         }
  27.                         while(IIC_WaitAck());
  28.                         
  29.                         IIC_SendByte(add*8+i);
  30.                         IIC_WaitAck();        
  31.                         IIC_SendByte(p[i]);
  32.                         IIC_WaitAck();
  33.                 }
  34.         }
  35.         while(p[++i]!=0);
  36.         IIC_Stop();        
  37. }

  38. void Ee_read(u8 add)
  39. {
  40.         u8 i=0;
  41.         
  42.         i=0;
  43.         IIC_Start();
  44.         IIC_SendByte(0xa0);
  45.         IIC_WaitAck();
  46.         IIC_SendByte(add*8);
  47.         IIC_WaitAck();        
  48.         IIC_Stop();               
  49.         
  50.         IIC_Start();
  51.         IIC_SendByte(0xa1);
  52.         IIC_WaitAck();                //等待應答
  53.         do
  54.         {
  55.                 Ee_buf[i]=IIC_RecByte();
  56.                 IIC_SendAck(0);                //發(fā)送應答
  57.         }
  58.         while(Ee_buf[i++]!='!');        //檢測結束符
  59.         Ee_buf[i-1]=0;
  60.         IIC_SendAck(1);
  61.         IIC_Stop();               
  62. }
復制代碼

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

使用道具 舉報

沙發(fā)
ID:123289 發(fā)表于 2019-5-10 15:23 | 只看該作者
不是你錯,就是庫錯!
你錯好解決一點,庫錯難一點。
建議:再研讀庫函數(shù)的說明,并特別留意時序部分(某些地方要不要插入延時)。
回復

使用道具 舉報

板凳
ID:525872 發(fā)表于 2019-5-12 19:01 來自手機 | 只看該作者
你總線工作不加延時的么?時序圖有延時的啊
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表