打印

AT24C02 I2C通讯问题

[复制链接]
1707|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
doliphin|  楼主 | 2011-2-8 10:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下为向AT24C02写入数据的函数,其中unit类型为unsigned int,uchar类型为unsigned char, firstw_ad为要写入的AT24C02单元首地址,*firstr_ad为被写入数据的首地址指针,counter为要写入数据字节数。     

bit write_8bit(uchar ch)                        //写一个字节
{
        uchar  i=8;
        bit  fan_w;
        SCL=0;_nop_();
        while(i--)
       {
            SDA=(bit)(ch&0x80);
            _nop_();
            ch<<=1;
            SCL=1; _nop_();
            SCL=0; _nop_();
        }
        SDA=1; _nop_();
        SCL=1; _nop_();
        fan_w=SDA;
        SCL=0; _nop_();
        return(fan_w);
}


uchar  page_write(uint firstw_ad,unit counter,uchar *firstr_ad)
{
          uchar data *ufirstr_ad;
          ufirstr_ad=firstr_ad;
          start_bit();
          if(write_8bit(0xA0)!=0)  {stop_bit();return(0);}         //写入写命令
          if(write_8bit(firstw_ad)!=0) {stop_bit();return(0);}    //写入要写入数据的首地址
          while(counter--)
            {      
                  if(write_8bit(*ufirstr_d)!=0)   {stop_bit();return(0);}
                  ufirstr_ad++;
            }
          stop_bit();
          return(1);
}


1)不明白向AT24C02写入数据的过程,单片机向数据线写入写命令、指定AT24C02接受数据的首地址后再向SDA上写数据AT24C02就会自动接收。
2)
          uchar data *ufirstr_ad;
          ufirstr_ad=firstr_ad;
为什么要再定义一个指针函数,直接用*firstr_ad不行吗

相关帖子

沙发
doliphin|  楼主 | 2011-2-8 11:08 | 只看该作者
补充一下   uchar data 是定义什么类型的函数

使用特权

评论回复
板凳
outstanding| | 2013-8-16 16:20 | 只看该作者
data 固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。 单片机的基础知识

使用特权

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

本版积分规则

0

主题

195

帖子

2

粉丝