⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24lcxx.c

📁 24系列串行EEPROM的源代码
💻 C
字号:
/*
*********************************************************************************************************
*                                                                                                         
*                             低成本汇率电子显示屏控制系统的开发
*                                     独立本科段毕业设计
*  
*                                     Since 2004 - 2005
*                                    All Rights Reserved.
*
*
*------------------------------------------文件信息------------------------------------------------------
*
*  文件名 : 24LCXX.C
*  作  者 : li.yao
*  日  期 : 2004年 05月 13日,星期四
*  描  述 : 24系列串行EEPROM的驱动程序。支持24系列16bit地址的所有器件。
*  
*------------------------------------------日志记录------------------------------------------------------
*
*  版  本 : V1.01 
*  作  者 : li.yao
*  日  期 : 2005年 03月 01日,星期二 
*  变  更 : 修改了几处BUGS,补全了注释。
*
*--------------------------------------------------------------------------------------------------------
*
*  版  本 : V1.00  格式说明: 主版本号 . 升级版本号 + 内部测试版本号  
*  作  者 : li.yao
*  日  期 : 2004年 05月 13日,星期四
*  变  更 : 文件建立。
*
*********************************************************************************************************
*/

#include "..\INC\HEADER.H"

/*
*********************************************************************************************************
*                                          配置参数                                                     *
*********************************************************************************************************
*/

#define  WADDR    0xA0                     //  地址格式: | 1 | 0 | 1 | 0 | A2 | A1 | A0 | R/W |
#define  RADDR    0xA1

/*
*********************************************************************************************************
*                                         函数说明
*
*  函数名 : void Delay(INT16U count);
*  参数表 : count: 延时计数的次数。
*  返回值 : none
*  功  能 : 延时子程序。
*
*  作  者 : li.yao
*  日  期 : 2004年 05月 13日,星期四   
*   
*-----------------------------------------日志记录-------------------------------------------------------
*
*  版  本 : V1.00   格式说明:主版本号 . 升级版本号 + 内部测试版本号  
*  作  者 : li.yao
*  日  期 : 2004年 05月 13日,星期四 
*  变  更 : 函数建立。
*
*********************************************************************************************************
*/

void Delay(INT16U count)
{
    INT8U    i;

    for(i = 0; i < count; i++) _nop_();
}

/*
*********************************************************************************************************
*                                         函数说明
*
*  函数名 : INT8U ReadData(INT16U offset, void *buffer, INT16U count);
*  参数表 : offset: 数据保存在串行EEPROM内的地址。
*          *buffer: 读取数据保存的首地址。
*            count: 读取数据的字节数。
*  返回值 : 是否超时错误。
*  功  能 : 从串行EEPROM中读取指定个数的字节数据。
*
*  作  者 : li.yao
*  日  期 : 2004年 05月 13日,星期四 
*   
*-----------------------------------------日志记录-------------------------------------------------------
*
*  版  本 : V1.01
*  作  者 : li.yao
*  日  期 : 2005年 03月 01日,星期二 
*  变  更 : 增加了错误类型的返回值。
*
*--------------------------------------------------------------------------------------------------------
*
*  版  本 : V1.00   格式说明:主版本号 . 升级版本号 + 内部测试版本号  
*  作  者 : li.yao
*  日  期 : 2004年 05月 13日,星期四
*  变  更 : 函数建立。
*
*********************************************************************************************************
*/

INT8U    ReadData(INT16U offset, void *buffer, INT16U count)
{
    INT8U     *addr;
    INT8U       err;
    INT16U    i = 0;

    addr = (INT8U *)(&offset);
    I2cStart();
    I2cWrite(WADDR);
    err = I2cAckR();
    I2cWrite(addr[1]);
    err = I2cAckR();
    I2cWrite(addr[0]);
    err = I2cAckR();

    I2cStart();
    I2cWrite(RADDR);
    err = I2cAckR();
    while (1)
    {
        ((INT8U *)buffer)[i++] = I2cRead();
        if (i < count)
        { 
            I2cAckS();
        } else {
            I2cNotAckS();
            break;
        }
    }
    I2cStop();

    return  err;
}

/*
*********************************************************************************************************
*                                         函数说明
*
*  函数名 : INT8U WriteData(INT16U offset, void *buffer, INT16U count);
*  参数表 : offset: 数据保存在串行EEPROM内的地址。
*          *buffer: 要写入数据的首地址。
*            count: 写入数据的字节数。
*  返回值 : 是否超时错误。
*  功  能 : 从串行EEPROM中写入指定个数的字节数据。
*
*  作  者 : li.yao
*  日  期 : 2004年 05月 13日,星期四 
*   
*-----------------------------------------日志记录-------------------------------------------------------
*
*  版  本 : V1.01
*  作  者 : li.yao
*  日  期 : 2005年 03月 01日,星期二 
*  变  更 : 增加了错误类型的返回值。
*
*--------------------------------------------------------------------------------------------------------
*
*  版  本 : V1.00   格式说明:主版本号 . 升级版本号 + 内部测试版本号  
*  作  者 : li.yao
*  日  期 : 2004年 05月 13日,星期四
*  变  更 : 函数建立。
*
*********************************************************************************************************
*/

INT8U    WriteData(INT16U offset, void *buffer, INT16U count)
{
    INT8U     *addr;
    INT8U       err;
    INT16U    i = 0;

    addr = (INT8U *)(&offset);
    I2cStart();
    I2cWrite(WADDR);
    err = I2cAckR();
    I2cWrite(addr[1]);
    err = I2cAckR();
    I2cWrite(addr[0]);
    err = I2cAckR();
    while (i < count)
    {
        I2cWrite(((INT8U *)buffer)[i++]);
        err = I2cAckR(); 
    }
    I2cStop();
    Delay(4000);

    return  err;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -