at24c02 订阅
AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个8字节页写缓冲器。该器件通过IIC总线接口进行操作,有一个专门的写保护功能。 展开全文
AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗。AT24C02有一个8字节页写缓冲器。该器件通过IIC总线接口进行操作,有一个专门的写保护功能。
信息
外文名
AT24C02
焊接温度
(10 秒) 300℃
工作温度
-55℃ +125℃
贮存温度
-65℃ +150℃
AT24C02管脚配置
管脚封装如右图1所示。图1 管脚封装(DIP:双列直插式封装,是最简单的一种封装技术。)
收起全文
精华内容
下载资源
问答
  • AT24C02

    千次阅读 2014-08-11 23:33:06
    AT24C02A, 2K SERIAL EEPROM: Internally organized with 32 pages of 8 bytes each, the 2K requires an 8-bit data word address for random word addressing. 24c02有32个页,每页8字节,本帖中不讨论页写的...

    AT24C02A, 2K SERIAL EEPROM:

    Internally organized with 32 pages of 8 bytes each,
    the 2K requires an 8-bit data word address for random word addressing.

    24c02有32个页,每页8字节,本帖中不讨论页写的方式

    -------------------------------------------------------------------




     
     

    AT24C02内部设有一个8位控制寄存器,其每一位的含义如下: 
    Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 
     1      0     1    0    A2   A1   A0  R/W 
    其中前4位数据是芯片固定的标识,
    A2/A1/A0用于选择总线上待访问的I2C器件,R/W=1读操作,R/W=0写操作;
    I2C总线上最多可以扩展8片同样的2K容量EEPROM存储器,
    或者是4片4Kb的EEPROM,
    或者是2片容量为8Kb的EEPROM存储器。
    或者是1片容量为16Kb的EEPROM存储器(此时硬件就固定了,因为A2/A1/A0已经被P2P1P0占用),
    如果扩展8片2K以内容量的EEPROM存储器,每片存储器将对应一个地址,
    我们的实验板上的AT24C02的A2/A1/A0引脚全部接地,
    所以在实验中读写控制字分别为:0xa1/0xa0

     

    主芯片stc89c52rc,晶振11.0592M

     

    C代码  收藏代码
    1. #include <reg52.h>  
    2. #include "MY51.H"  
    3.   
    4. sbit sda=P2^0;      //总线连接口定义  
    5. sbit scl=P2^1;      //总线连接口定义  
    6.   
    7. void delayus()  //需要4个机器周期,大概4.34us  
    8. {  
    9.     ;                   //晶振频率11.0592M,机器周期为1.085微秒  
    10. }  
    11.   
    12. void iic_start()  //启动信号  
    13. {  
    14.     sda=1;  
    15.     scl=1;  
    16.     delayus();      //sda和scl同为高电平保持4.7us以上  
    17.     _nop_();            //1.085us,共5.78us,下面sda=0是下降沿,不能计算在延时时间中  
    18.     sda=0;          //下降沿  
    19.     delayus();      //sda低电平保持4us以上 ,这里是4.34us满足要求  
    20. }  
    21.   
    22. void iic_stop() //停止信号  
    23. {  
    24.     sda=0;_nop_();  //准备状态  
    25.     scl=1;  
    26.     delayus();      //该状态稳定时间要求保持4us以上  
    27.     sda=1;          //scl高电平期间,sda来一个上升沿  
    28.     delayus();      //sda保持4.7us以上,4.34加上函数返回时间大于4.7us  
    29.                         //注:此时scl和sda都为1      
    30. }  
    31.   
    32. void iic_sendByte(uchar byteData) //mcu发送一个字节  
    33. {  
    34.     uchar i;  
    35.     uchar temp=byteData;  
    36.     for(i=0;i<8;i++)  
    37.     {  
    38.         temp=temp<<1;   //移动后最高位到了PSW寄存器的CY位中  
    39.         scl=0;           //准备  
    40.         _nop_();            //稳定一下  
    41.         sda=CY;          //将待发送的数据一位位的放到sda上  
    42.         _nop_();  
    43.         scl=1;           //每一个高电平期间,ic器件都会将数据取走  
    44.         _nop_();          
    45.     }  
    46.   
    47.     scl=0;              //如果写成scl=1;sda=1就是停止信号,不能这么写  
    48.     _nop_();                  
    49.     sda=1;              //释放总线,数据总线不用时要释放  
    50.     _nop_();  
    51. }  
    52.   
    53. uchar iic_readByte() //读一个字节  
    54. {  
    55.     uchar i,temp;  
    56.     scl=0;              //准备读数据  
    57.     _nop_();  
    58.     sda=1;              //释放总线  
    59.     _nop_();  
    60.   
    61.     for(i=0;i<8;i++)  
    62.     {  
    63.         scl=1;          //mcu开始取数据  
    64.         delayus();      //scl为高电平后,ic器件就会将1位数据送到sda上  
    65.                             //总共用时不会大于4.34us的,然后就可以让mcu读sda了  
    66.         temp=(temp<<1)|sda; //读一位保存到temp中  
    67.         scl=0;  
    68.         delayus();        
    69.     }  
    70.     return temp;  
    71. }  
    72.   
    73. bool iic_checkACK()     //处理应答信号  
    74. {  
    75.     uchar errCounts=255; //定义超时量为255次  
    76.     scl=1;  
    77.     _nop_();  
    78.       
    79.     while(sda)  
    80.     {   //在一段时间内检测到sda=0的话认为是应答信号  
    81.         if(0==errCounts)  
    82.         {  
    83.             scl=0;        //钳住总线  
    84.             _nop_();  
    85.             return false//没有应答信号  
    86.         }  
    87.         errCounts--;  
    88.     }  
    89.   
    90.     scl=0;            //钳住总线,为下1次通信做准备   
    91.     _nop_();  
    92.     return true;      //成功处理应答信号  
    93. }  
    94.   
    95. void iic_init() //总线初始化  
    96. {  
    97.     scl=1;  
    98.     sda=1;  
    99.     delayus();  
    100. }  
    101.   
    102. void iic_sendACK(bool b_ACK)    //发送应答或非应答信号  
    103. {  
    104.     scl=0;          //准备  
    105.     _nop_();  
    106.   
    107.     if(b_ACK)       //ACK  
    108.     {  
    109.         sda=0;  
    110.     }  
    111.     else               //unACK  
    112.     {  
    113.         sda=1;  
    114.     }  
    115.   
    116.     _nop_();  
    117.     scl=1;  
    118.     delayus();      //大于4us的延时  
    119.     scl=0;              //钳住scl,以便继续接收数据      
    120.     _nop_();  
    121. }  
    122.   
    123.   
    124. void AT24C02_writeByte(uchar address,uchar dataByte)//向24c02写一字节数据  
    125. {  
    126.     iic_start();  
    127.     iic_sendByte(0xa0);//mcu写控制字,前4位固定1010,后三位地址0,末位0是写  
    128.     iic_checkACK();        //mcu处理应答信号  
    129.     iic_sendByte(address);  //准备在指定地址处写入      
    130.     iic_checkACK();  
    131.     iic_sendByte(dataByte); //写数据  
    132.     iic_checkACK();  
    133.     iic_stop();  
    134.     delayms(2);   
    135.     //按字节写入时,24c02在接收到停止信号后将数据擦写到内部,这需要时间  
    136.     //并且在这段时间内不会响应总线上的任何请求,故让mcu有2毫秒以上的等待     
    137. }  
    138.   
    139. void AT24C02_writeData(uchar address,uchar numBytes,uchar* buf)//写入任意长度数据  
    140. {  
    141.     while(numBytes--)  
    142.     {  
    143.         AT24C02_writeByte(address++,*buf++);  
    144.     }  
    145. }  
    146.   
    147. void AT24C02_readData(uchar beginAddr,uchar dataSize,uchar* buf)//读取任意长度字节  
    148. {  
    149.     iic_start();                    //起始信号  
    150.     iic_sendByte(0xa0);         //控制字,写  
    151.     iic_checkACK();             //处理应答信号  
    152.     iic_sendByte(beginAddr);    //发送地址  
    153.     iic_checkACK();             //处理应答信号      
    154.     iic_start();                //发送起始信号  
    155.     iic_sendByte(0xa1);         //控制字,读  
    156.     iic_checkACK();             //处理应答信号  
    157.     while(dataSize--)               //读取dataSize个字节  
    158.     {  
    159.         *buf++=iic_readByte();  //读取一个个字节并保存到缓冲区buf中  
    160.         iic_sendACK(dataSize);  //发送应答,当dataSize为0时发送非应答  
    161.     }  
    162.     iic_stop();                     //发送停止信号  
    163. }  
    164.   
    165. void main()  
    166. {  
    167.     uchar buf[2];                   //接受数据的缓冲区  
    168.     uchar arr[34]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,               //0x00-0x0f  
    169.                         16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,//0x10-0x1f  
    170.                         32,0x55};                                                   //0x20-0x21  
    171.     iic_init();                                         //总线初始化  
    172.     //AT24C02_writeByte(0x08,0x11);             //向指定地址处写入一个字节数据,代码测试  
    173.     AT24C02_writeData(0x00,sizeof(arr),arr);    //向指定地址处开始写入34字节的数据  
    174.     AT24C02_readData(0x20,sizeof(buf),buf);   //从指定地址开始读2个字节  
    175.     P1=buf[1];  //buf中的第二个元素就是arr中的最后一个数据0x55  
    176.                                               
    177.     while(1){P1=~P1;delayms(500);} //将这个0x55用led灯显示出来10101010变化  
    178. }  

     

    C代码  收藏代码
    1. my51.h头文件中主要用到  
    2. #include <intrins.h>  
    3. typedef unsigned char  uchar ;  
    4.   
    5. void delayms(uint16 ms)  //软延时函数  
    6. {  
    7.     uint16 i,j;  
    8.     for(i=ms;i>0;i--)  
    9.     {  
    10.         for(j=113;j>0;j--)  
    11.         {}  
    12.     }  
    13. }  

      

    展开全文
  • 根据AT24C02的手册读写AT24C02

    千次阅读 2017-11-21 12:55:32
    1.从起始地址连续读出AT24C02中256个字节中的数据。采用的是Random read的时序读取的。 //连续读(Randem读的时序) AT24C04_Start(); //起始信号 AT24C04_SendByte(AT24_Address); //发送设备地址+写信号 ack=...

    1.从起始地址连续读出AT24C02中256个字节中的数据。采用的是Random read的时序读取的。

     //连续读(Randem读的时序)

    AT24C04_Start();            //起始信号

     AT24C04_SendByte(AT24_Address);     //发送设备地址+写信号

    ack=check();

    AT24C04_SendByte(0x00);     //发送存储单元地址

    ack=check();

    AT24C04_Start();            //起始信号

    AT24C04_SendByte(AT24_Address+1);     //发送设备地址+读信号

    ack=check();

    for (i=0; i<256; i++)

     {

       temp1[i]= AT24C04_RecvByte(); //自己创建的数组用来接收存储的数据

       if (i == 255)

       {

           AT24C04_SendACK(1);//最后一个数据需要回NAK

       }

       else

       {

          AT24C04_SendACK(0);//回应ACK

        } 

       }

      AT24C04_Stop();               //停止信号

    2.     用Byte Write时序把0xa0写入到0x01的地址中

    AT24C04_Start();                    //起始信号

    AT24C04_SendByte(AT24_Address);     //发送设备地址+写信号

    ack =check();

    AT24C04_SendByte(0x01);             //发送存储单元地址0x01

    ack=check();

    AT24C04_SendByte(0x0a);            //发送要写入的数据0x0a

    ack=check();

     AT24C04_Stop();

    3.用Page Write时序来写一页数据到AT24C02中,切记存储单元地址一定要是8的倍数

    AT24C04_Start();                    //起始信号

    AT24C04_SendByte(AT24_Address);     //发送设备地址+写信号

    ack=check();

    AT24C04_SendByte(0x18);                 //发送存储单元地址,0x18,换为10进制为24,也就是第4页的起始地址
     ack=check();
    for(i=0;i<8;i++)
    {
           AT24C04_SendByte(10);//写入一页,8个10
           ack=check();
     }

     AT24C04_Stop();

    4.用Current Address Read的时序来读,上次最后一个数据存在哪里,则从哪个地址的后一个地址开始读

    AT24C04_Start(); 

    AT24C04_SendByte(AT24_Address+1);

    ack=check();

    temp1[0]= AT24C04_RecvByte();

    AT24C04_SendACK(1);//最后一个数据需要回NAK

    5.用Sequential Read 时序从当前地址连续读256个数,如果当前地址不是从0开始则读不够256个

    AT24C04_Start();

    AT24C04_SendByte(AT24_Address+1);

    ack=check();

    for (i=0; i<256; i++)

     {

      temp1[i]= AT24C04_RecvByte();

      if (i == 255)

      {

      AT24C04_SendACK(1);//最后一个数据需要回NAK

      }

      else

      {

         AT24C04_SendACK(0);//回应ACK

    }

    AT24C04_Stop();               //停止信号

    }

    6.附start(),stop(),ack(), check(),AT24C04_SendByte(),AT24C04_RecvByte()代码

     

    void AT24C04_Start()

    {

        SDA = 1;                    //拉高数据线

        SCL = 1;                    //拉高时钟线

        Delay5us();                 //延时

        SDA = 0;                    //产生下降沿

        Delay5us();                 //延时

        SCL = 0;                    //拉低时钟线

    }

     

    void AT24C04_Stop()

    {

        SDA = 0;                    //拉低数据线

        SCL = 1;                    //拉高时钟线

        Delay5us();                 //延时

        SDA = 1;                    //产生上升沿

        Delay5us();                 //延时

    }

     

    void AT24C04_SendACK(bit ack)

    {

        SDA = ack;                  //写应答信号

        SCL = 1;                    //拉高时钟线

        Delay5us();                 //延时

        SCL = 0;                    //拉低时钟线

        Delay5us();                 //延时

    }

     

    unsigned char check(void)

    {

    //    SDA =1; //释放SDA线

        SCL=1; //拉高时钟线

        Delay5us();//延时

      CY = SDA;//读应答信号

        SCL=0; //拉低时钟线

        Delay5us();   //延时

        return CY;

    }

     

    void AT24C04_SendByte(unsigned char dat)

    {

        unsigned char i;

     

        for (i=0; i<8; i++)         //8位计数器

        {

            dat <<= 1;              //移出数据的最高位

            SDA = CY;               //送数据口

            SCL = 1;                //拉高时钟线

            Delay5us();             //延时

            SCL = 0;                //拉低时钟线

            Delay5us();             //延时

        }

    }

     

    unsigned char AT24C04_RecvByte()

    {

        unsigned char i;

        unsigned char dat = 0;

     

        SDA = 1;                    //使能内部上拉,准备读取数据

        for (i=0; i<8; i++)         //8位计数器

        {

            dat <<= 1;

            SCL = 1;                //拉高时钟线

            Delay5us();             //延时

            dat |= SDA;             //读数据

            SCL = 0;                //拉低时钟线

            Delay5us();             //延时

        }

     

        return dat;

    }

    展开全文
  • AT24C02芯片手册

    2018-07-27 17:44:51
    at24c02 EEPROM 芯片手册 at24c02 EEPROM 芯片手册at24c02 EEPROM 芯片手册
  • AT24C02SC.pdf

    2020-04-22 19:51:38
    AT24C02SC-EEPROM数据手册 AT24C02SC-EEPROM数据手册 AT24C02SC-EEPROM数据手册
  • AT24C02例程

    2019-05-06 15:08:13
    全国大学生电子设计竞赛常见功能模块例程:AT24C02例程
  • AT24C02时事时钟

    2014-08-21 10:41:15
    AT24C02
  • AT24C02.zip

    2020-03-30 11:30:51
    内部包含两份AT24C02以及扩展AT24C0X\ AT24CXX.文档讲解详细,错误率低。包含笔记。
  • AT24C02模块

    千次阅读 2020-02-05 20:19:17
    AT24C02模块 概述:   该文主要描述了,AT24C02简介、AT24C02特性、硬件原理图、管脚描述、从器件地址、写周期限制、读写操作时序。 1、AT24C02简介   AT24C01/02/04/08/16是一个1K/2K/4K/8K/16K位(AT...

    AT24C02模块


    一、STM32专栏目录

    二、Linux专栏目录

    三、Android专栏目录


      AT24C08支持的时序为IIC,IIC详细介绍请看《I2C协议(模拟时序含代码)》。

    概述:
      该文主要描述了,AT24C02简介、AT24C02特性、硬件原理图、管脚描述、从器件地址、写周期限制、读写操作时序。

    1、AT24C02简介

      AT24C01/02/04/08/16是一个1K/2K/4K/8K/16K位(AT24C02大小为256字节)串行CMOS E2PROM内部含有128/256/512/1024/2048个8位字节,CATALYST公司的先进CMOS技术实质上减少了器件的功耗AT24C01有一个8字节页写缓冲器 AT24C02/04/08/16有一个16字节页写缓冲器该器件通过I2C总线接口进行操作有一个专门的写保护功能。

    2、AT24C02特性

      ①、与 400KHz I2C 总线兼容
      ②、1.8 到 6.0 伏工作电压范围
      ③、低功耗 CMOS 技术
      ④、写保护功能 当 WP 为高电平时进入写保护状态
      ⑥、页写缓冲器
      ⑦、自定时擦写周期
      ⑧、1,000,000编程/擦除周期
      ⑨、可保存数据100年

    3、硬件原理图

    在这里插入图片描述
    4、管脚描述

    在这里插入图片描述
      A0、A1、A2、三个脚不同的电平可以形成不同的地址,最多8种。原理图中A0、A1、A2、三个脚全部接地,也就是硬件决定不可更改,默认为A0=0、A1=0、A2=0。同时写保护脚WP(原理图中为HOLD),也是接地。因此默认也是关闭写保护的。

    5、从器件地址
    在这里插入图片描述
    1. A0、A1和A2对应器件的管脚1、2和3
    2. P0、P1、P2对应存储阵列地址字地址。
    3. R/W为读写方向位,1为读,0为写。

      对应AT24C02硬件原理图而言,A0、A1、A2、三个脚被硬件接地,即A0=0、A1=0、A2=0。所以AT24C02读地址为1010 0001(0xA1),AT24C02写地址为1010 0000(0xA0)。
      这里再简单的介绍一下P0、P1、P2的含义,对于AT24C02而言大小为256字节,而对于AT24C08而言大小为1024(4*256)字节。假如P0=0、P1=0,即代表选中第一个256字节的首地址,P0=0、P1=0,即代表选中第一个256的首地址,P0=1、P1=0,即代表选中第二个256的首地址,以此类推。

    6、写周期限制在这里插入图片描述
      写周期时间是指从一个写时序的有效停止信号到内部编程/擦除周期结束的这一段时间。在写周期期间,总线接口电路禁能,SDA保持为高电平,器件不响应外部操作。
      简单的说就是,当向AT24C02执行写操作时,从发出写命令到写完成最多10ms。因此在写程序时,每次写操作后都延迟10ms以保证稳定。

    7、读写操作时序

    7.1、向指定地址写一个字节
    在这里插入图片描述

    /*
    函数功能:向AT24c02指定地址写一字节数据
    */
    void At24c02_Write_OneByte(u8 addr,u8 data)
    {
      IIC_Start();
      IIC_Write_Byte(At24c02_Write_Addr);//发送写地址0XA0
      if(IIC_Check_Ack())return ;
      IIC_Write_Byte(addr);
      if(IIC_Check_Ack())return ;
      IIC_Write_Byte(data);
      if(IIC_Check_Ack())return ;
      IIC_Stop();
      delay_ms(10);//确保写完成
    }

    7.2、向指定地址开始读数据
    在这里插入图片描述

    /*
    函数功能:向AT24c02指定地址开始读数据
    */
    void At24c02_Read_Data(u8 addr,u8 *data,u8 len) 
    {
     u8 i=0;
      IIC_Start();
      IIC_Write_Byte(At24c02_Write_Addr);//发送写地址0XA0
      if(IIC_Check_Ack())return ;
      IIC_Write_Byte(addr);//写数据的地址
      if(IIC_Check_Ack())return ;
      IIC_Start();
      IIC_Write_Byte(At24c02_Read_Addr);//发送读地址0XA1
      if(IIC_Check_Ack())return ;
      for(i=0;i<len;i++)
      {
       data[i]=IIC_Read_Byte();
       if(i==len-1)IIC_Send_Ack(1);
       else IIC_Send_Ack(0);
      }
      IIC_Stop(); 
    }

    7.3、页写

    在这里插入图片描述
     用页写 AT24C01可一次写入8个字节数据 AT24C02/04/08/16可以一次写入16个字节的数据,页写操作的启动和字节写一样,不同在于传送了一字节数据后并不产生停止信号,主器件被允许发送停止信号P,AT24C01 P=7,AT24C02/04/08/16 P=15个额外的字节,每发送一个字节数据后AT24C01/02/04/08/16 产生一个应答位并将字节地址低位加1,高位保持不变。如果在发送停止信号之前主器件发送超过P+1个字节地址计数器将自动翻转,先前写入的数据被覆盖。
      简单的说,AT24C01一页为8字节,AT24C01/02/04/08/16为16字节。对于AT24C02而言,在一页内,每写一个字节写指针+1,当大于16字节时,又回到第一个字节的位置,先前写入的数据将会被覆盖。

    /*
    函数功能:对AT24C02指定地址页内写数据
    */
    void At24c02_Write_Page(u8 addr,u8 *data,u8 len)
    {
      u8 i=0;
      IIC_Start();
      IIC_Write_Byte(At24c02_Write_Addr);//发送写地址0XA0
      if(IIC_Check_Ack())return ;
      IIC_Write_Byte(addr);//写数据的地址
      if(IIC_Check_Ack())return ;
      for(i=0;i<len;i++)
      {
       IIC_Write_Byte(*data++);/
       if(IIC_Check_Ack())return ;
      }
      IIC_Stop();
      delay_ms(10);
    }

    7.4、向指定地址跨页写数据

    /*
    函数功能:对AT24C02指定地址跨页写数据
    */
    void At24c02_Write_Data(u8 addr,u8 *data,u8 len)
    {
      u8 write_len=16-addr%16;//起始页剩下的空间
      if(write_len>len)write_len=len;
      while(1)
      {
       At24c02_Write_Page(addr,data,write_len);
       if(write_len==len)break;
       addr+=write_len;
       data+=write_len;
       len-=write_len;
       if(len>16)write_len=16;
       else write_len=len;
      }
    }

      
      

    展开全文
  • AT24C02中文手册

    2018-11-27 10:52:15
    AT24C02中文手册
  • AT24c02电路图

    2020-07-15 04:50:40
    本文主要为AT24c02电路图,下面一起来学习一下
  • AT24C02驱动

    2014-08-20 19:56:44
    AT24C02存储芯片的驱动程序,以及AT24C02存储芯片的资料内容。
  • at24c02 at24c512 资料总集(中英文都有)
  • 1.从起始地址连续读出AT24C02中256个字节中的数据。采用的是Random read的时序读取的。 //连续读(Randem读的时序) AT24C04_Start(); //起始信号 AT24C04_SendByte(AT24_Address); //发送设备地址+...
    1.从起始地址连续读出AT24C02中256个字节中的数据。采用的是Random read的时序读取的。
               //连续读(Randem读的时序)
       AT24C04_Start();            //起始信号
             AT24C04_SendByte(AT24_Address);     //发送设备地址+写信号
       ack=check();
               AT24C04_SendByte(0x00);     //发送存储单元地址
       ack=check();
       AT24C04_Start();            //起始信号
       AT24C04_SendByte(AT24_Address+1);     //发送设备地址+读信号
       ack=check();
       for (i=0; i<256; i++)
              {
       temp1[i]= AT24C04_RecvByte(); //自己创建的数组用来接收存储的数据
       if (i == 255)
       {
       AT24C04_SendACK(1);//最后一个数据需要回NAK
       }
       else
       {
          AT24C04_SendACK(0);//回应ACK
               } 
              }
      AT24C04_Stop();               //停止信号
    2.     用Byte Write时序把0xa0写入到0x01的地址中
    AT24C04_Start();                    //起始信号
    AT24C04_SendByte(AT24_Address);     //发送设备地址+写信号
            ack =check();
    AT24C04_SendByte(0x01);             //发送存储单元地址0x01
    ack=check();
    AT24C04_SendByte(0x0a);            //发送要写入的数据0x0a
    ack=check();
     AT24C04_Stop();
    3.用Page Write时序来写一页数据到AT24C02中,切记存储单元地址一定要是8的倍数
    AT24C04_Start();                    //起始信号
            AT24C04_SendByte(AT24_Address);     //发送设备地址+写信号
           ack=check();
    AT24C04_SendByte(0x18);           
          //发送存储单元地址,0x18,换为10进制为24,也就是第4页的起始地址
           ack=check();
           for(i=0;i<8;i++)
    {
    AT24C04_SendByte(10);//写入一页,8个10
           ack=check();
     }
     AT24C04_Stop();
    4.Current Address Read的时序来读,上次最后一个数据存在哪里,则从哪个地址的后一个地址开始读
    AT24C04_Start(); 
    AT24C04_SendByte(AT24_Address+1);
    ack=check();
    temp1[0]= AT24C04_RecvByte();
    AT24C04_SendACK(1);//最后一个数据需要回NAK
    5.用Sequential Read 时序从当前地址连续读256个数,如果当前地址不是从0开始则读不够256个
    AT24C04_Start();
    AT24C04_SendByte(AT24_Address+1);
    ack=check();
    for (i=0; i<256; i++)
         {
      temp1[i]= AT24C04_RecvByte();
      if (i == 255)
      {
      AT24C04_SendACK(1);//最后一个数据需要回NAK
      }
      else
      {
         AT24C04_SendACK(0);//回应ACK
    }
    AT24C04_Stop();               //停止信号
    }
    6.附start(),stop(),ack(), check(),AT24C04_SendByte(),AT24C04_RecvByte()代码
    void AT24C04_Start()
    {
        SDA = 1;                    //拉高数据线
        SCL = 1;                    //拉高时钟线
        Delay5us();                 //延时
        SDA = 0;                    //产生下降沿
        Delay5us();                 //延时
        SCL = 0;                    //拉低时钟线
    }
    void AT24C04_Stop()
    {
        SDA = 0;                    //拉低数据线
        SCL = 1;                    //拉高时钟线
        Delay5us();                 //延时
        SDA = 1;                    //产生上升沿
        Delay5us();                 //延时
    }
    void AT24C04_SendACK(bit ack)
    {
        SDA = ack;                  //写应答信号
        SCL = 1;                    //拉高时钟线
        Delay5us();                 //延时
        SCL = 0;                    //拉低时钟线
        Delay5us();                 //延时
    }
    unsigned char check(void)
    {
    //    SDA =1; //释放SDA线
        SCL=1; //拉高时钟线
        Delay5us();//延时
      CY = SDA;//读应答信号
        SCL=0; //拉低时钟线
        Delay5us();   //延时
        return CY;
    }
    void AT24C04_SendByte(unsigned char dat)
    {
        unsigned char i;

        for (i=0; i<8; i++)         //8位计数器
        {
            dat <<= 1;              //移出数据的最高位
            SDA = CY;               //送数据口
            SCL = 1;                //拉高时钟线
            Delay5us();             //延时
            SCL = 0;                //拉低时钟线
            Delay5us();             //延时
        }
    }
    unsigned char AT24C04_RecvByte()
    {
        unsigned char i;
        unsigned char dat = 0;

        SDA = 1;                    //使能内部上拉,准备读取数据
        for (i=0; i<8; i++)         //8位计数器
        {
            dat <<= 1;
            SCL = 1;                //拉高时钟线
            Delay5us();             //延时
            dat |= SDA;             //读数据
            SCL = 0;                //拉低时钟线
            Delay5us();             //延时
        }

        return dat;
    }
    展开全文
  • AT24C02原版翻译.pdf

    2020-06-21 21:26:20
    AT24C02原版翻译,详细无错误!
  • C51 AT24c02

    2010-12-11 18:40:50
    AT24c02读写数据~~ AT24c02读写数据~~
  • AT24C02中文版

    2015-12-10 17:38:51
    AT24C02系列EEPROM中文说明。
  • AT24C02的使用

    2020-12-25 10:14:56
    AT24C02是一个2K位串行CMOS E2PROM, 内部含有256个8位字节。AT24C02有一个8字节页写缓冲器。该器件通过IIC总线接口进行操作,有一个专门的写保护功能。 2.分析 参考博客:...
  • AT24C02代码

    2011-12-11 16:28:36
    AT24C02代码
  • AT24C02程序

    2014-02-08 16:57:34
    AT24C02程序 可运行。很好的资源,大家看看
  • I2C和AT24C02I2CAT24C02秒表 I2C 下面展示一些 内联代码片。 I2C.c #include<STC15F2K60S2.H> sbit I2C_SCL=P2^0; sbit I2C_SDA=P2^1; /** * @brief I2C开始 * @param 无 * @retval 无 */ void...
  • 电子-AT24C02.zip

    2019-09-05 14:04:23
    电子-AT24C02.zip,单片机/嵌入式51单片机
  • IIC-AT24C02

    2016-11-15 23:47:45
    基于IIC协议的EEPROM读取,单片机与AT24C02通信,读取写入数据,掉电不消失。
  • AT24c02资料

    2013-11-20 14:36:40
    AT24C02中文版资料,掉电保持芯片,在给VCC是储存数据
  • at24c02读写驱动

    2011-09-13 14:05:05
    at24c02 基于at24c02的读写程序驱动文档
  • AT24C02驱动及测试

    2018-06-22 11:08:04
    AT24C02 单字节写,页写,页读,随机读,任意读,proteus仿真
  • AT24C02多机通信

    2016-09-13 12:26:20
    基于AT24C02的多机通信
  • AT24C02_51程序

    2018-09-06 19:41:54
    AT24C02存储芯片的51代码,代码中有引脚连接说明,下载后可以直接使用。代码适用AT24CXX一系列的存储芯片。
  • AT24C02 STM32程序

    2018-09-06 19:39:17
    AT24C02存储芯片的STM32代码,代码中有引脚连接说明,下载后可以直接使用。代码适用AT24CXX一系列的存储芯片。
  • AT24C02_STM8

    2018-09-06 19:43:41
    AT24C02存储芯片的STM8代码,代码中有引脚连接说明,下载后可以直接使用。代码适用AT24CXX一系列的存储芯片。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,855
精华内容 742
关键字:

at24c02