24cxx.c

来自「24CXX全系列EEPROM底层读写函数」· C语言 代码 · 共 133 行

C
133
字号
#include <I2C.C>
#define EWrite 0xA0
#define ERead  0xA1

/******************************************************************** 
* 名称:Wait_5ms
* 功能:延时
* 调用:无
* 输入:无
* 返回值:无
***********************************************************************/
void Wait_5ms()
{
int i;
for(i=600;i>0;i--);
}

/******************************************************************** 
* 名称:ByteWrite
* 功能:向EEPROM指定地址写入一个字节数据
* 调用:I2CStart();I2CSendByte;WaitAck();I2CStop();Wait_5ms();
* 输入:uint Eaddress,uchar Edata
* 返回值:bit 
***********************************************************************/
bit ByteWrite(uint Eaddress,uchar Edata)
{
I2CStart();
I2CSendByte(EWrite|((uchar)(Eaddress>>7)));
if(WaitAck())
	{
	 I2CSendByte((uchar)Eaddress);
	 if(WaitAck())
		 {
		 I2CSendByte(Edata);
		 if(WaitAck())
			 {
			 I2CStop();
			 Wait_5ms();
		     return(true);
			 }
		 }
	 }
I2CStop();
return(false);
}

/******************************************************************** 
* 名称:CurrentRead
* 功能:从EEPROM当前地址读出一个字节数据
* 调用:I2CStart();I2CReceiveByte;WaitAck();SendNotAck();I2CStop();
* 输入:uchar *p
* 返回值:bit 
***********************************************************************
bit CurrentRead(uchar *p)
{
I2CStart();
I2CSendByte(ERead);
if(WaitAck())
	{
	*p = I2CReceiveByte();
	SendNotAck();
	I2CStop();
	return(true);
	}
I2CStop();
return(false);
}

/******************************************************************** 
* 名称:RandomRead
* 功能:从EEPROM指定地址读出一个字节数据
* 调用:I2CStart();I2CSendByte;I2CReceiveByte;WaitAck();SendNotAck();I2CStop();
* 输入:uint Eaddress,uchar *p
* 返回值:bit 
***********************************************************************/
bit RandomRead(uint Eaddress,uchar *p)
{
I2CStart();
I2CSendByte(EWrite|((uchar)(Eaddress>>7)));
if(WaitAck())
	{
	I2CSendByte((uchar)Eaddress);
	if(WaitAck())
		{
		I2CStart();
	    I2CSendByte(ERead);
		if(WaitAck())
			{
			*p = I2CReceiveByte();
	        SendNotAck();
	        I2CStop();
	        return(true);
			}
		}
	}
I2CStop();
return(false);
}

/******************************************************************** 
* 名称:SequentialRead
* 功能:从EEPROM指定地址顺序读出一串字节数据
* 调用:I2CStart();I2CSendByte;I2CReceiveByte;WaitAck();SendNotAck();I2CStop();
* 输入:uint Eaddress,uchar *p,uint Num
* 返回值:bit 
***********************************************************************
bit SequentialRead(uint Eaddress,uchar *p,uint Num)
{
I2CStart();
I2CSendByte(EWrite|((uchar)(Eaddress>>7)));
if(WaitAck())
	{
	I2CSendByte((uchar)Eaddress);
	if(WaitAck())
		{
		I2CStart();
	    I2CSendByte(ERead);
		if(WaitAck())
			{
			while(Num--)
				{
				*(p++) = I2CReceiveByte();
		        if(Num)SendAck();
				}
			SendNotAck();
			I2CStop();
	        return(true);
			}
		}
	}
I2CStop();
return(false);
} */

⌨️ 快捷键说明

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