找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2291|回复: 2
收起左侧

51单片机+AT24C02连续读写程序问题

[复制链接]
ID:375590 发表于 2019-5-9 15:28 | 显示全部楼层 |阅读模式
20黑币
STC15单片机外接AT24C02,在连续写入字符串后,需要重复写5~8·次才能写进去,而且读取字符串的函数不能重复读,读第二次就进入死循环,就是读不到结束符,可是我每次读都初始化 地址 i=0;  很奇葩,求大神给一套完整的  AT24C02连续读写的函数,或者是能帮我解决问题,万分感谢!

下面是我写的读写函数:

  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);                //发送应答
  57.         }
  58.         while(Ee_buf[i++]!='!');        //检测结束符
  59.         Ee_buf[i-1]=0;
  60.         IIC_SendAck(1);
  61.         IIC_Stop();               
  62. }
复制代码

回复

使用道具 举报

ID:123289 发表于 2019-5-10 15:23 | 显示全部楼层
不是你错,就是库错!
你错好解决一点,库错难一点。
建议:再研读库函数的说明,并特别留意时序部分(某些地方要不要插入延时)。
回复

使用道具 举报

ID:525872 发表于 2019-5-12 19:01 来自手机 | 显示全部楼层
你总线工作不加延时的么?时序图有延时的啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表