打印

我的AT24C04为什么读不出内容?

[复制链接]
1856|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xichandoujigu|  楼主 | 2018-4-9 10:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xichandoujigu 于 2018-4-9 10:49 编辑

我写了0XC0到AT24C04然后读出来到P3口用LED显示,但结果不对(我想读出0Xc0,结果读出来的是0XFE),从I2C debug也没看出问题,有其他方法看0XC0到底有没有写进24C04呢?

电路图:


I2C debug结果


源代码
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define NOP4() {_nop_();_nop_();_nop_();_nop_();}

sbit SDA=P1^0;
sbit SCL=P1^1;
uchar ACK;


void I2C_init()
   {SDA=1;NOP4();SCL=1;NOP4();}

void I2C_start()
  {SDA=1;NOP4();SCL=1;NOP4();SDA=0;   NOP4();SCL=0; }


void I2C_stop()
  { SCL=0;SDA=0; NOP4() ;SCL=1; NOP4() ; SDA=1; NOP4() ; }

void I2C_write(uchar tmp)
  {
      int i;
      for(i=0;i<8;i++)
           {     
              tmp=tmp<<1;
              SCL=0;
             _nop_();
            SDA=CY;
             _nop_();
            SCL=1;
            NOP4();
            }
      SCL=0;
   }

void I2C_ACK()
  {
          int i;
          SCL=0;
          NOP4();
          SDA=1;
          NOP4();
          i=0;
         while((SDA==1)&&(i++<250));
              if(SDA==0)
             ACK=1;
         NOP4();
         SCL=1;   
         NOP4();
  }

uchar read_byte()
  {  
       uchar i,dat = 0x00; SDA = 1;
      for(i = 0; i < 8; i++)
        {
            SCL = 1; NOP4() ;
            dat = (dat << 1) | SDA; NOP4() ;
            SCL = 0; NOP4() ;
        }   
      return dat;
  }

void write_add(uchar address,uchar date)
     {
          I2C_start();
          I2C_write(0xa0);
          I2C_ACK();
          I2C_write(address);
          I2C_ACK();
          I2C_write(date);
          I2C_ACK();
         I2C_stop();
      }

uchar read_add(uchar address)
    {
          uchar tmp;
          I2C_start();
          I2C_write(0xa0);
          I2C_ACK();
          I2C_write(address);
          I2C_ACK();
          I2C_start();
          I2C_write(0xa1);
          I2C_ACK();
          tmp=read_byte();
          I2C_stop();
          return(tmp);
       }

void delay(uchar i)
  {
        uchar a,b;
        for(a=0;a<i;i++)
        for(b=0;b<100;b++) ;
   }

void main()
  {
        I2C_init();
        write_add(5,0xc0);
       delay(100);   //guanjian
       P3=read_add(5);  
        while(1);
  }



at24c04.rar

100.05 KB

文件

相关帖子

沙发
kingkits| | 2018-4-9 15:40 | 只看该作者
你这个数据线不需要换读写设置么?

使用特权

评论回复
板凳
dirtwillfly| | 2018-4-9 16:32 | 只看该作者
用逻辑分析仪观察一下时序看看,和手册里要求的时序做个对比,看哪里不同

使用特权

评论回复
地板
xyz549040622| | 2018-4-9 22:00 | 只看该作者
仿真这个东西,不好说问题在哪。。。

使用特权

评论回复
5
gujiamao12345| | 2018-4-10 13:04 | 只看该作者
有硬件不,直接上硬件....

使用特权

评论回复
6
ningling_21| | 2018-4-10 16:52 | 只看该作者
单片机不需要晶振?

使用特权

评论回复
7
xichandoujigu|  楼主 | 2018-4-11 16:39 | 只看该作者
解决了,谢谢大家,读的时候重启,restar就可以了。

使用特权

评论回复
8
本德尔独家代理| | 2018-4-12 17:23 | 只看该作者
了解了,长知识

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

96

帖子

2

粉丝