精华内容
下载资源
问答
  • C51 读写 AT24C04 源代码及 AT24C04 测试程序 一 C51 读 写 AT24C04 源 代 码 /*=============================================*/ /*/ /; 起动 24C01 时序*/ void Start { SCL=1; SDA=1; SDA=0; SCL=0; } /*/ /; ...
  • At24C04

    千次阅读 2011-04-29 09:08:00
    /************************...0755-82948412 AT24C04测试程序 主芯片 : STC90C52RC (12T) 工作频率: 12.000MHz **************************************/ #include "REG51.H" #in

    /**************************************
    ;WWW.STCMCU.COM
    ;Mobile:13922805190
    ;0755-82948412
    AT24C04测试程序
    主芯片  : STC90C52RC (12T)
    工作频率: 12.000MHz
    **************************************/

    #include "REG51.H"
    #include "INTRINS.H"

    typedef unsigned char BYTE;
    typedef unsigned short WORD;

    sbit SCL = P2^0;                //AT24C04的时钟
    sbit SDA = P2^1;                //AT24C04的数据

    BYTE BUF[16];                   //数据缓存区

    BYTE code res[6] _at_ 0x23;

    BYTE code TESTDATA[] =
    {
        0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,
        0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF
    };

    void Delay5us();
    void Delay5ms();
    void AT24C04_Start();
    void AT24C04_Stop();
    void AT24C04_SendACK(bit ack);
    bit AT24C04_RecvACK();
    void AT24C04_SendByte(BYTE dat);
    BYTE AT24C04_RecvByte();
    void AT24C04_ReadPage();
    void AT24C04_WritePage();

    void main()
    {
     P3 = 0x00;
        AT24C04_WritePage();
        Delay5ms();
        AT24C04_ReadPage();
     P3 = BUF[5];
        while (1);

    }

    /**************************************
    向AT24C04写1页(16字节)数据
    将TESTDATA开始的16个测试数据写如设备的00~0F地址中
    **************************************/
    void AT24C04_WritePage()
    {
        BYTE i;

        AT24C04_Start();            //起始信号
        AT24C04_SendByte(0xa0);     //发送设备地址+写信号
        AT24C04_SendByte(0x00);     //发送存储单元地址
        for (i=0; i<16; i++)
        {
            AT24C04_SendByte(TESTDATA[i]);
        }
        AT24C04_Stop();             //停止信号
    }

    /**************************************
    从AT24C04读取1页(16字节)数据
    将设备的00~0F地址中的数据读出存放在DATA区的BUF中
    **************************************/
    void AT24C04_ReadPage()
    {
        BYTE i;

        AT24C04_Start();            //起始信号
        AT24C04_SendByte(0xa0);     //发送设备地址+写信号
        AT24C04_SendByte(0x00);     //发送存储单元地址
        AT24C04_Start();            //起始信号
        AT24C04_SendByte(0xa1);     //发送设备地址+读信号
        for (i=0; i<16; i++)
        {
            BUF[i] = AT24C04_RecvByte();
            if (i == 15)
            {
                AT24C04_SendACK(1); //最后一个数据需要会NAK
            }
            else
            {
                AT24C04_SendACK(0); //回应ACK
            }
        }
        AT24C04_Stop();             //停止信号
    }

    /**************************************
    延时5微秒(STC90C52RC@12M)
    不同的工作环境,需要调整此函数
    当改用1T的MCU时,请调整此延时函数
    **************************************/
    void Delay5us()
    {
        _nop_();
        _nop_();
    }

    /**************************************
    延时5毫秒(STC90C52RC@12M)
    不同的工作环境,需要调整此函数
    当改用1T的MCU时,请调整此延时函数
    **************************************/
    void Delay5ms()
    {
        WORD n = 560;

        while (n--);
    }

    /**************************************
    起始信号
    **************************************/
    void AT24C04_Start()
    {
        SDA = 1;                    //拉高数据线
        SCL = 1;                    //拉高时钟线
        Delay5us();                 //延时
        SDA = 0;                    //产生下降沿
        Delay5us();                 //延时
        SCL = 0;                    //拉低时钟线
    }

    /**************************************
    停止信号
    **************************************/
    void AT24C04_Stop()
    {
        SDA = 0;                    //拉低数据线
        SCL = 1;                    //拉高时钟线
        Delay5us();                 //延时
        SDA = 1;                    //产生上升沿
        Delay5us();                 //延时
    }

    /**************************************
    发送应答信号
    入口参数:ack (0:ACK 1:NAK)
    **************************************/
    void AT24C04_SendACK(bit ack)
    {
        SDA = ack;                  //写应答信号
        SCL = 1;                    //拉高时钟线
        Delay5us();                 //延时
        SCL = 0;                    //拉低时钟线
        Delay5us();                 //延时
    }

    /**************************************
    接收应答信号
    **************************************/
    bit AT24C04_RecvACK()
    {
        SCL = 1;                    //拉高时钟线
        Delay5us();                 //延时
        CY = SDA;                   //读应答信号
        SCL = 0;                    //拉低时钟线
        Delay5us();                 //延时

        return CY;
    }

    /**************************************
    向IIC总线发送一个字节数据
    **************************************/
    void AT24C04_SendByte(BYTE dat)
    {
        BYTE i;

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

    /**************************************
    从IIC总线接收一个字节数据
    **************************************/
    BYTE AT24C04_RecvByte()
    {
        BYTE i;
        BYTE dat = 0;

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

        return dat;
    }

    展开全文
  • AT24C04驱动

    2014-08-18 19:03:51
    AT24C04驱动 详细讲解这种EEPROM的读写操作。
  • AT24C04.zip

    2021-03-06 12:15:03
    基于STM32 存储芯片AT24C04的读取,可以接移植使用
  • AT24C04 EEPROM

    2018-11-19 10:01:57
    AT24C04,EEPROM的芯片,想要研究的可以下载来查看下。
  • AT24C04是一种二线电可擦编程只读存储器(E2PROM),为8脚双列直插式塑料封装,在康佳P2993N型镜面大屏幕彩电上及CTXI795PFI/CTX1 995UE/UED型彩色显示器上的正常工作电压和在路电阻典型检测数据分别如表1、表2所...
  • 一、C51读写AT24C04源代码/*=============================================*//*;***********************************//*;起动24C01时序*/void Start(){SCL=1;SDA=1;SDA=0;SCL=0;}/*;*****************************...

    一、C51读写AT24C04源代码

    /*=============================================*/

    /*;***********************************/

    /*;起动24C01时序*/

    void Start()

    {

    SCL=1;

    SDA=1;

    SDA=0;

    SCL=0;

    }

    724b5b0f4a06107618ac1aaaa76026a9.png

    /*;************************************/

    /*;停止24C01时序*/

    void Stop()

    {

    SDA=0;

    SCL=1;

    SDA=1;

    }

    /*;**************************************/

    /*;检测24C01的响应信号*/

    bit ACK()

    {

    bit c;

    SDA=1;

    SCL=1;

    c=SDA;

    SCL=0;

    return c;

    }

    /*;************************************/

    /*;往24C01发一8位数据*/

    void SendChar(unsigned char ch)

    {

    unsigned char i;

    i=8;

    do

    {

    SDA=(ch&0x80);

    SCL=1;

    SCL=0;

    ch《《=1;

    }while(--i!=0);

    }

    /*;**************************************/

    /*;从24C01接收一8位数据*/

    unsigned char RecChar()

    {

    unsigned char i,j;

    i=8;

    do

    {

    SCL=1;

    j=(j《《1)|SDA;

    SCL=0;

    }while(--i!=0);

    return j;

    }

    //;**************************************

    /*;********************************/

    /*;往24C01写一字节*/

    void WriteChar(unsigned int addr,unsigned char ch)

    {

    unsigned char c;

    c=((*((unsigned char *)&addr))《《1)&0x02;

    Start();

    SendChar(0xa0|c);

    ACK();

    SendChar(addr);

    ACK();

    SendChar(ch);

    ACK();

    Stop();

    // for(addr=4;addr!=0;addr--)

    for(ch=0xff;ch!=0;ch--) ;

    }

    //;**************************************

    /*;********************************/

    /*;往24C01写多字节*/

    void WriteBuf(unsigned int addr,unsigned char idata *buf,unsigned char count)

    {

    unsigned char c;

    c=((*((unsigned char *)&addr))《《1)&0x02;

    Start();

    SendChar(0xa0|c);

    ACK();

    SendChar(addr);

    ACK();

    do

    {

    SendChar(*buf++);

    ACK();

    if(count!=1)

    {if(((++addr)&0x7)==0)

    {

    Stop();

    for(c=0xff;c!=0;c--) ;

    c=((*((unsigned char *)&addr))《《1)&0x02;

    Start();

    SendChar(0xa0|c);

    ACK();

    SendChar(addr);

    ACK();

    }

    }

    else

    {

    Stop();

    for(c=0xff;c!=0;c--) ;

    }

    }while(--count!=0);

    }

    /*;**********************************/

    /*;从24C01读一字节*/

    /*;入口:R0中为要读出内容的地址*/

    /*;出口:A中为读到的内容*/

    unsigned char ReadChar(unsigned int addr)

    {

    unsigned char ch;

    ch=((*((unsigned char *)&addr))《《1)&0x02;

    Start();

    SendChar(0xa0|ch);

    ACK();

    SendChar(addr);

    ACK();

    Start();

    SendChar(0xa1|ch);

    ACK();

    ch=RecChar();

    Stop();

    return ch;

    }

    /**********************************/

    /*至少读2字节*/

    void ReadBuf(unsigned int addr,unsigned char idata *buf,unsigned char count)

    {

    unsigned char ch;

    ch=((*((unsigned char *)&addr))《《1)&0x02;

    Start();

    SendChar(0xa0|ch);

    ACK();

    SendChar(addr);

    ACK();

    Start();

    SendChar(0xa1|ch);

    ACK();

    count--;

    do

    {

    *buf++=RecChar();

    SDA=0;

    SCL=1;

    SCL=0;

    SDA=1;

    }while(--count!=0);

    *buf=RecChar();

    Stop();

    }

    二、AT24C04测试程序

    /**************************************

    主芯片 : STC12C5A60S2 (1T)

    工作频率: 12.000MHz

    **************************************/

    #include “REG51.H”

    #include “INTRINS.H”

    typedef unsigned char BYTE;

    typedef unsigned short WORD;

    sbit SCL = P3^4; //AT24C04的时钟

    sbit SDA = P3^5; //AT24C04的数据

    BYTE BUF[16]; //数据缓存区

    BYTE code TESTDATA[] =

    {

    0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,

    0x88,0x99,0xAA,0xBB,0xCC,0xDD,0xEE,0xFF

    };

    void Delay5us();

    void Delay5ms();

    void AT24C04_Start();

    void AT24C04_Stop();

    void AT24C04_SendACK(bit ack);

    bit AT24C04_RecvACK();

    void AT24C04_SendByte(BYTE dat);

    BYTE AT24C04_RecvByte();

    void AT24C04_ReadPage();

    void AT24C04_WritePage();

    void main()

    {

    AT24C04_WritePage();

    Delay5ms();

    AT24C04_ReadPage();

    while (1);

    }

    /**************************************

    向AT24C04写1页(16字节)数据

    将TESTDATA开始的16个测试数据写如设备的00~0F地址中

    **************************************/

    void AT24C04_WritePage()

    {

    BYTE i;

    AT24C04_Start(); //起始信号

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

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

    for (i=0; i《16; i++)

    {

    AT24C04_SendByte(TESTDATA[i]);

    }

    AT24C04_Stop(); //停止信号

    }

    /**************************************

    从AT24C04读取1页(16字节)数据

    将设备的00~0F地址中的数据读出存放在DATA区的BUF中

    **************************************/

    void AT24C04_ReadPage()

    {

    BYTE i;

    AT24C04_Start(); //起始信号

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

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

    AT24C04_Start(); //起始信号

    AT24C04_SendByte(0xa1); //发送设备地址+读信号

    for (i=0; i《16; i++)

    {

    BUF[i] = AT24C04_RecvByte();

    if (i == 15)

    {

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

    }

    else

    {

    AT24C04_SendACK(0); //回应ACK

    }

    }

    AT24C04_Stop(); //停止信号

    }

    /**************************************

    延时5微秒(STC12C5A60S2@12M)

    不同的工作环境,需要调整此函数

    此延时函数是使用1T的指令周期进行计算,与传统的12T的MCU不同

    **************************************/

    void Delay5us()

    {

    BYTE n = 4;

    while (n--)

    {

    _nop_();

    _nop_();

    }

    }

    /**************************************

    延时5毫秒(STC12C5A60S2@12M)

    不同的工作环境,需要调整此函数

    此延时函数是使用1T的指令周期进行计算,与传统的12T的MCU不同

    **************************************/

    void Delay5ms()

    {

    WORD n = 2500;

    while (n--)

    {

    _nop_();

    _nop_();

    _nop_();

    _nop_();

    _nop_();

    }

    }

    /**************************************

    起始信号

    **************************************/

    void AT24C04_Start()

    {

    SDA = 1; //拉高数据线

    SCL = 1; //拉高时钟线

    Delay5us(); //延时

    SDA = 0; //产生下降沿

    Delay5us(); //延时

    SCL = 0; //拉低时钟线

    }

    /**************************************

    停止信号

    **************************************/

    void AT24C04_Stop()

    {

    SDA = 0; //拉低数据线

    SCL = 1; //拉高时钟线

    Delay5us(); //延时

    SDA = 1; //产生上升沿

    Delay5us(); //延时

    }

    /**************************************

    发送应答信号

    入口参数:ack (0:ACK 1:NAK)

    **************************************/

    void AT24C04_SendACK(bit ack)

    {

    SDA = ack; //写应答信号

    SCL = 1; //拉高时钟线

    Delay5us(); //延时

    SCL = 0; //拉低时钟线

    Delay5us(); //延时

    }

    /**************************************

    接收应答信号

    **************************************/

    bit AT24C04_RecvACK()

    {

    SCL = 1; //拉高时钟线

    Delay5us(); //延时

    CY = SDA; //读应答信号

    SCL = 0; //拉低时钟线

    Delay5us(); //延时

    return CY;

    }

    /**************************************

    向IIC总线发送一个字节数据

    **************************************/

    void AT24C04_SendByte(BYTE dat)

    {

    BYTE i;

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

    {

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

    SDA = CY; //送数据口

    SCL = 1; //拉高时钟线

    Delay5us(); //延时

    SCL = 0; //拉低时钟线

    Delay5us(); //延时

    }

    AT24C04_RecvACK();

    }

    /**************************************

    从IIC总线接收一个字节数据

    **************************************/

    BYTE AT24C04_RecvByte()

    {

    BYTE i;

    BYTE dat = 0;

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

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

    {

    dat 《《= 1;

    SCL = 1; //拉高时钟线

    Delay5us(); //延时

    dat |= SDA; //读数据

    SCL = 0; //拉低时钟线

    Delay5us(); //延时

    }

    return dat;

    }

    展开全文
  • AT24C04 STM32C8T6例程

    2019-05-08 11:23:26
    本例程 程序适合STM32 C8T6小型单片机,AT24C04存储, 使用B67引脚,修改都在24cxx的头文件中,以及在.c文件中 改程序同时适合其他型号,只需要在.h文件中修改#define EE_TYPE AT24C04这个后面的0几就修改成几 效果就是接...
  • AT24C04 的详细资料

    2010-04-27 11:30:30
    AT24C04 的详细资料 AT24C04 的详细资料
  • AT24C04的驱动程序

    2014-04-08 20:56:50
    AT24C04存储器的模拟IIC驱动,并在工程中应用。
  • 28027读取AT24C04的例程完全注释
  • 例程AT24C04 控制LED

    2011-08-28 13:32:13
    IIC总线协议 对AT24C04 进行读写操作 并控制LED 闪烁
  • AT24C04是很常用的E2^{2}2PROM芯片。 AT24C04A是Atmel公司出品的I2^{2}2C总线接口E2^{2}2PROM,有8KB的内部存储空间,采取8字节/页、256页、2个块的分页方式。 AT24C04A的电路简图如上所示,主要有A1、A2、WP、SDA...
  • 液晶AT24C04操作程序

    2009-08-26 13:20:54
    液晶128*64 AT24C04操作程序
  • AT24C04AN数据手册

    2010-10-26 21:29:21
    AT24C04AN 数据手册,学习S3C2440中I2c所需要的芯片手册。绝对正确
  • AT24C04串行数据存储器源程序,掉电不丢失
  • AT24C04读写程序

    2009-04-05 19:00:11
    AT24C04读写程序。用AT2051单片机实现。晶振为12MHz
  • AT24C04 eeprom读写测试

    千次阅读 2018-09-10 18:13:45
    AT24C04是Ateml公司的4Kb得电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10uA(5.5V),芯片内的资料可以在断电的情况下保存100年,而且采用8 脚的DIP 封装,使用...

        AT24C04是Ateml公司的4Kb得电可擦除存储芯片,采用两线串行的总线和单片机通讯,电压最低可以到2.5V,额定电流为1mA,静态电流10uA(5.5V),芯片内的资料可以在断电的情况下保存100年,而且采用8 脚的DIP 封装,使用方便。

        AT24C04采用的是iic通信方式,在工程师调试过程中,经常会遇到不确定是否写入成功。正常的话写入再读取出来,如果一样就没问题了,但是使用stm32的时候,会多人会用模式iic,这样写iic底层的时候就会遇到麻烦。下面给大家介绍一个很容易的办法。

    准备:AT24C04模块、USB转IIC模块。

    按照如下链接:

    打开工具

    在这个工具里读写都没问题。

    USB转IIC模块:

    https://item.taobao.com/item.htm?spm=a230r.1.14.55.bd861bc1kFzFbB&id=562634538684&ns=1&abbucket=5#detail

     

    展开全文
  • AT24C04时序

    2020-09-02 16:38:40
    AT24C02 E2PROM芯片详解 利用AT24C02进行数据存储 24C02存储器的基本原理与应用 E2PROM
    展开全文
  • I2C接口读写AT24C04

    2011-03-10 11:56:55
    I2C接口读写AT24C04 c 代码 好用。。。。。。。。。。。。
  • 实现了AT89C51单片机对AT2404 的读写,在 proteus7.8 对AT24C04模拟仿真,是需要设置 AT24C04的属性添加一个AT24C04.bin 文件的。 通过按键实现加 减 保存 和读取功能 原创原理图。带动态数码管显示 是I2C研究的最好...
  • AT24C04 512×8 1010A2A1P0 R/W 16 AT24C08 1024×8 1010A2P1P0 R/W 16 AT24C16 2048×8 1010P2P1P0 R/W 16  由于I2C总线可挂接多个串行接口器件,在I2C总线中每个器件应有唯一的器件地址,按I2C总线规则,器件...
  • LPC2478通过I2C对AT24C04(EEPROM)进行读写文件,,已通过调试,,可用。
  • Proteus8.9的VSM Studio使用的SDCC仿真_STC15W4k32S4_013_iic_02_AT24C04编程代码和仿真操作实验
  • I2C操作笔记——以 AT24C04为例

    万次阅读 多人点赞 2013-11-10 14:46:01
    对于大多数工程师而言,I2C永远是一个头疼的问题。相比UART和SPI而言,I2C的时序要复杂一些,I2C组合变化也丰富一些。在这里以AT24C04为例说明I2C使用过程中的一些注意点。
  • I2C总线之AT24C04硬件上的的总结,主要讲其如何连接。如何进行工作。 关于I2C的介绍,这里就不用说了,直接介绍24C04了。24C04是4K位串行CMOS E2PROM。
  • 使用AT24C04C/08C写保护引脚WP,对EEPROM进行写保护时,对EEPROM写完数据后不能立刻把WP引脚拉高,需要对其进行适当的延时,延时时间参考芯片的datasheet,否则将导致写失效。
  • 在这里以AT24C04为例说明I2C使用过程中的一些注意点。 2.AT24C04操作示意图 图 AT24C04操作示意图 示意图说明:示意图分阐述了4种不同的操作方式,例如写单个存储单元,写多个存储单元,读单个存储单元...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,745
精华内容 3,098
关键字:

at24c04