老古开发网首页
导航:老古开发网首页文章索引索引第2374页文章分类单片机第33页→[24LC65 I2C EEPROM字节读写驱动程序]
| -文章搜索 - 最新文章 - |

第2286篇:24LC65 I2C EEPROM字节读写驱动程序

发布时间:2006年7月17日 点击次数:1309
来源:   作者:
 

/*————————————————————
〖说明〗24LC65 I2C EEPROM字节读写驱动程序,芯片A0-A1-A2要接VCC。
现缺页写、页读,和CRC校验程序。以下程序经过50台验证,批量的效果有待考
察。
为了安全起见,程序中很多NOP是冗余的,希望读者能进一步精简,但必须经过验
证。
51晶振为11.0592MHz
〖文件〗24LC65.c ﹫2001/03/23
〖作者〗龙啸九天 c51@yeah.net http://mcs51.yeah.net
〖修改〗修改建议请到论坛公布 http://c51bbs.yeah.net
〖版本〗V1.00A Build 0323
—————————————————————*/
#define SDA P0_0
#define SCL P0_1

/*----------------------------------------------------------------------------
调用方式:write_8bit(uchar ch) ﹫2001/03/23
函数说明:内函数,私有,用户不直接调用。
------------------------------------------------------------------------------*/
write_8bit(uchar ch)
{
uchar i=8;
SCL=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
while (i--)
{
SDA=(bit)(ch&0x80);
_nop_();_nop_();_nop_();_nop_();_nop_();
ch<<=1;
SCL=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
}
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();

}

/*------------------------------------------------------------------------------
--
调用方式:void ACK(void) ﹫2001/03/23
函数说明:内函数,私有,用户不直接调用。
--------------------------------------------------------------------------------
-*/
void ACK(void)
{
SDA=1;
SCL=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=1;
time_1=5;
while(SDA) {if (!time_1) break;} //ACK
SCL=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
}

/*------------------------------------------------------------------------------
--
调用方式:void Write24LC65(uint address,uchar ddata) ﹫2001/03/23
函数说明:在指定地址address(address<0x2000)写入一个字节ddata
--------------------------------------------------------------------------------
-*/
void Write24LC65(uint address,uchar ddata)
{
SCL=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Tsu:STA
SDA=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
SCL=0; //START
write_8bit(0xae); //写从地址
ACK();
write_8bit(address>>8);
ACK();
write_8bit(address&0x00FF);
ACK();
write_8bit(ddata);
ACK();
SDA=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_
();SDA=1; //STOP
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
delay(10);
}

/*------------------------------------------------------------------------------
--
调用方式:uchar Read24LC65(uint address) ﹫2001/03/23
函数说明:读取24LC65指定地址address(address<0x2000)的数据。
--------------------------------------------------------------------------------
-*/
uchar Read24LC65(uint address)
{
uchar ddata=0;
uchar i=8;
SDA=0;_nop_();SCL=0; //START
write_8bit(0xae); //写从地址
ACK();
write_8bit(address>>8);
ACK();
write_8bit(address&0x00FF);
ACK();
//以上是一个“哑”写操作,相当于设置当前地址

SCL=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Tsu:STA
SDA=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
SCL=0; //START
write_8bit(0xaf); //写从地址,置为读模式
ACK();
while (i--)
{
SDA=1;
ddata<<=1;
SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=1;
if (SDA) ddata =0x01;
}

SCL=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_
();SDA=1; //STOP
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
delay(5);
return ddata;
}

  • 24c65 和24c64 可通用,俺的编程器就这样 [haotz] [50次] 01-3-24 下午 09:50:14

  • 24LC65 I2C EEPROM字节读写驱动程序(修正版) [龙啸九天] [645次] 01-5-12 下午 12:27:07

    修改,在读写EEPROM过程中关闭掉中断,否则在同时读写EEPROM和串口通讯时
    会有随机的误码,请大家注意!

    /*---------------------------------------------------------------------------
    调用方式:void Write24LC65(uint address,uchar ddata)  ﹫2001/03/23
    函数说明:在指定地址address(address<0x2000)写入一个字节ddata
    -----------------------------------------------------------------------------*/
    void Write24LC65(uint address,uchar ddata)
    {
               EA=0;
        SCL=1;
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Tsu:STA
        SDA=0;
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
        SCL=0;             //START
        write_8bit(0xae);   //写从地址
        ACK();
        write_8bit(address>>8);
        ACK();
        write_8bit(address&0x00FF);
        ACK();
        write_8bit(ddata);
        ACK();
        SDA=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_
    ();SDA=1;   //STOP
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
               EA=1;
        delay(10);
    }

    /*------------------------------------------------------------------------------
    调用方式:uchar Read24LC65(uint address)  ﹫2001/03/23
    函数说明:读取24LC65指定地址address(address<0x2000)的数据。
    ------------------------------------------------------------------------------*/
    uchar Read24LC65(uint address)
    {
        uchar ddata=0;
        uchar i=8;
               EA=0;
        SDA=0;_nop_();SCL=0;        //START
        write_8bit(0xae);   //写从地址
        ACK();
        write_8bit(address>>8);
        ACK();
        write_8bit(address&0x00FF);
        ACK();
        //以上是一个“哑”写操作,相当于设置当前地址
        
        SCL=1;
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Tsu:STA
        SDA=0;
        _nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //Thd:STA
        SCL=0;             //START
        write_8bit(0xaf);   //写从地址,置为读模式
        ACK();
        while (i--)
        {
            SDA=1;
            ddata<<=1;
            SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();SCL=1;
            if (SDA) ddata =0x01;
        }
        
        SCL=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        SDA=0;_nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_
    ();SDA=1;   //STOP
        _nop_();_nop_();_nop_();_nop_();_nop_();
        _nop_();_nop_();_nop_();_nop_();_nop_();
               EA=1;
        delay(5);
        return ddata;
    }


欢迎进入老古论坛进行讨论
[单片机] 相关文章:
一种利用单片机的灯头红外遥控系统
简介:
一种利用单片机的灯头红外遥控系统 作者:何小映 弥谦 来源:现代电子技术 摘   要 :介绍了灯头红外遥控系统的一种设计方法,将单片机技术、模拟电子技术、数字电子技术及红外光学相结合。论述了开关控制、亮度控制、定时控制的实现电路和原理,实现了灯头的红外遥控。 关键词 :灯头红外;遥控;单片机;控制   红外线是一种看不见的光线,因其在整个电磁......

外中断0响应实例
按键消抖
查询方式按键
A51 3.4 标号
 
下一个:[综合电子]自动交换光网络技术城域传送网应用
简介:
  城域传送网是近年来传送网建设的重点,ASON技术也是目前的热门技术,本文从技术特点等方面分析了ASON技术适用于城域传送网的特点,同时针对城域传送网中ASON应用较少的现实,分析了网络、技术和演进等方面的原因。 1、城域传送网的特点   城域传送网是覆盖城区、郊区或者部分规模较小的市县,为城域多业务提供综合传送平台的网络,是承载城域范围内的固定、移动和数据等多种业务的基础传送网络,它一般以多业务光传送网络为基础、以多种接入技术为辅,为多种业务......

上一个:[单片机]直接输入二进制常数的KEIL C补丁,如输入B0000_0101;则宏替换后就是0x05

老古开发网版权所有 2006年9月 asp.Net V2.0 设计:老古
页面缓存:30分钟 执行时间:47毫秒