android i2c可以连24c02吗,请教各位I2C对24C02写完后无法立即读的问题

C51:

//定义EE24XX的管脚********************************

sbit        SCL        =P1^2;        //

sbit        SDA =P1^3;

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

延时程序

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

void nop_(void)

{

unsigned char i=5;

while (i--);

}

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

开始位

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

void Start_ee        (void)

{

SDA=HIGH;

nop_();

SCL=HIGH;

nop_();

SDA=LOW;

nop_();

SCL=LOW;

nop_();

}

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

停止位

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

void Stop_ee        (void)

{

SDA=LOW;

nop_();

SCL=HIGH;

nop_();

SDA=HIGH;

nop_();

SCL=LOW;

nop_();

}

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

应答位,返回SDA信号

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

bit Ack(void)

{

bit cy;

SCL=HIGH;

nop_();

cy=SDA;

SCL=LOW;

nop_();

return(cy);

}

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

主应答 返回SDA

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

bit McuAck(void)

{

bit cy;

SDA=LOW;

cy=Ack();

SDA=HIGH;

return(cy);

}

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

不应答

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

void McuNAck(void)

{

SDA=HIGH;

SCL=HIGH;

nop_();

SCL=LOW;

SDA=LOW;

}

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

写入一个字节 ,返回成功标志

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

bit Wr_Byte(unsigned char Dat)

{

unsigned char i;

bit cy;

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

{

if ((Dat & 0x80)==0x80) SDA=HIGH;

else        SDA=LOW;

cy=Ack();

Dat<<=1;

}

SDA=HIGH;

return(Ack());

}

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

读取一个字节

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

unsigned char Rd_Byte(void)

{

unsigned char i,j=0;

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

{

j<<=1;

if (Ack()) j++;

}

return j;

}

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

EE24类型检测,返回标志位

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

unsigned char EeAll (unsigned int EeAdr)

{

Start_ee();

#if Ee_Type                                                          //1 EE24c32__

if (Wr_Byte(Wr_ee)) return 1;

if (Wr_Byte((unsigned char)EeAdr>>8)) return 1;

if (Wr_Byte((unsigned char)EeAdr)) return 1;

#else

if (Wr_Byte((unsigned char)(EeAdr>>7 |Wr_ee))) return 1;

if (Wr_Byte((unsigned char)EeAdr )) return 1;

#endif

return 0;

}

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

连续写入字节,返回UINT8标志

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

unsigned char WriteEe24(unsigned int EeAdr,unsigned char *RamAdr,unsigned char Number)

{

bit cy;

if (EeAll(EeAdr)) return (0);

while (Number--)

{

cy=Wr_Byte(*RamAdr++);

}

Stop_ee();

Delay (10);

return (1);

}

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

连续读取,返回UINT8标志

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

unsigned char ReadEe24(unsigned int EeAdr,unsigned char *RamAdr,unsigned char Number)

{

if (EeAll(EeAdr)) return (0);

Start_ee();

if (Wr_Byte(Rd_ee)) return (0);

while (--Number)

{

*RamAdr++=Rd_Byte();

McuAck();

}

*RamAdr=Rd_Byte();

McuNAck();

Stop_ee();

return (1);

}

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

每过10秒写入EE24

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

void SaveEe24c512(void)

{

unsigned char Buf[2],i;

static unsigned char Flag=0;

if ((UseData.Tm % WrSec) ==0)

{

if(Flag==0) //2004-7-9改FLAG

{

Flag=1;        //写入标志

Buf[1]=WorkData.Nu;

Buf[0]=WorkData.Nu>>8;

i=WriteEe24(HeadAdr+2*Menu.Piont++,Buf,2);

if (Menu.Piont >= WrNumber)

{

EndCount();                //溢出

UseData.ToBak=0;

UseData.To=0;

UseData.Tm=0;        //2004-4-18

Menu.Piont=0;

UseData.LedPower=Msg_Up;                //暂停放电

}

}

}

else

{

Flag=0;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值