有关AT24C512高位地址怎样读写的问题?
各位大虾:大家好!
有个问题需要请教,AT24C512的程序该怎样写?帮我看看,不胜感激!
/*********************************************************************/
/* 功能定义:读取IIC中的数据,从哪个地址开始,读取多少个字符 */
/* *sIICAddress 表示起始地址,pLength表示长度 */
/* *pvalue表示要读取的数据所存入的起始地址*/
/* 函数返回值为TURE ,表示正确读取,返回值为FALSE,表示错误读取 */
/*********************************************************************/
void E_read_block(unsigned long sIICAddress, unsigned char pLength,unsigned char *pvalue)
{
unsigned char idata i;
unsigned int idata j;
j = (unsigned int)(sIICAddress);
EA = 0;
I2CStart();
I2CSendByte(0xA0);
WaitAck();
I2CSendByte(j / 256);
WaitAck();
I2CSendByte(j % 256);
WaitAck();
I2CStart();
I2CSendByte(0xA1);
WaitAck();
for (i=0;i <pLength;i++)
{
pvalue[i]=I2CReceiveByte();
if (i!=pLength-1 ) SendAck(); /*除最后一个字节外,其他都要从MASTER应答。 */
}
SendNotAck();
I2CStop();
EA = 1;
}
/***********************************************************************/
/* 功能定义: 向IIC指定地址写入一个字节 */
/* input : unsigned char address,unsigned char value */
/* output: void */
/***********************************************************************/
void WriteSingleByte(unsigned long address,unsigned char value)
{
unsigned int idata j;
j = (unsigned int)(address);
I2CStart();
I2CSendByte(0xA0);
WaitAck();
I2CSendByte(j / 256);
WaitAck();
I2CSendByte(j % 256);
WaitAck();
I2CSendByte(value);
WaitAck();
I2CStop();
}
/*********************************************************************/
/* 功能定义:读取IIC中的数据,从哪个地址开始,读取多少个字符 */
/* sIICAddress 表示起始地址,pLength表示长度 */
/* *pvalue 表示要写入的数据*/
/* 函数返回值为TURE ,表示正确读取,返回值为FALSE,表示错误读取 */
/*********************************************************************/
void E_write_block(unsigned long sIICAddress, unsigned char pLength,unsigned char *pvalue)
{
unsigned char idata i;
EA = 0;
for(i=0;i <pLength;i++)
{
WriteSingleByte(sIICAddress+i,pvalue[i]);
wait_10ms();
}
EA = 1;
}
AT24C512(64K*8)的高地址该怎样操作才能进行读写?
发表时间:2004年7月23日17:20:21