导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→24c01与24C02不同,24C01(atmel)是简约型

* 1786: C51编程:老古,我用你的下载区的2401的程序在51上,读写都正确,但是我把刚写进的数再读出来,发现不相等,不知老古能否帮我解决??

   半夜开车 
半夜开车发表的帖子 

 24c01与24C02不同,24C01(atmel)是简约型的.以下是读写程序. 多年以来,数据奔腾而过,从未错过
/*------------------------------------------------------------------------------
 为了安全起见,程序中很多NOP是冗余的,希望读者能进一步精简,但必须经过验证。
        Atmel 24C01 比较特殊,为简约型.
        51晶振为11.0592MHz
〖参考〗  <a href=http://www.c51bbs.com target=_blank>    </a>  
〖版本〗V1.00A Build 0918
-----------------------------------------------------------------------------*/


#include "reg51.h"
#include "intrins.h"

sbit SCL= P1^5;
sbit SDA= P1^4;

delay()
{
unsigned int i=1200;
while(i--);
}
/*----------------------------------------------------------------------------
调用方式:write_8bit(unsigned char ch)  ﹫2001/03/23
函数说明:内函数,私有,用户不直接调用。
-------------------------------------------------------------------------------
*/
void  write_8bit(unsigned char ch)
{
    unsigned char 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)
{
   unsigned char time_1;
    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_();
}


unsigned char ReadIIC_24C01(unsigned char address)
{
      unsigned char ddata=0;
      unsigned char i=8;

    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( (address<<1) | 0x01);   //写页地址和操作方式
    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
    delay();
    return ddata;

}


void WriteIIC_24C01(unsigned char address,unsigned char 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( (address<<1) & 0xfe);   //写页地址和操作方式,对于24C32-
24C256,page不起作用
    ACK();
    write_8bit(ddata);      //发送数据
    ACK();
    SDA=0;
        _nop_();SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
        SDA=1;   //STOP
        delay();
}



发表时间:2001年10月16日16:56:00

  
回复该帖

本主题共有 21 帖,分页:>>>>>该主题的所有内容[21]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  1797.[详细]谢谢,我明天去试一下,不知道24c01接法有没有什么特别的地方??
摘要:......(无内容)
- [东海飘萍客][2914次] 2001年10月16日

  1798.[详细]如对成本要求不高,可使用24LC01(24M以下标准51系统基本可零等待)。如非用24C01不可,..
摘要:如对成本要求不高,可使用24LC01(24M以下标准51系统基本可零等待)。如非用24C01不 可,则要注意字节帧尾的从器件握手信号等待(器件可靠时可用如JB P*.*,$实现),以及写 入帧间隔等待,可用写入......(122字)
- [RobinHood][3676次] 2001年10月16日

  1799.[详细]24c01与24C02的驱动方法基本一样,只是24C01有一半的地址空间是无效的..
摘要:......(无内容)
- [RobinHood][3745次] 2001年10月16日

[上一篇帖子]:那它是一个外部电路还是一段程序?谢谢!
[下一篇帖子]:C51编程:各位大虾 请教c的对份查找法程序 急! 求救!