⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 24lc02.c

📁 C8051F120 _AD开发过程中的一些代码和文档
💻 C
字号:
#include "24LC02.h"
#include "C8051f.h"

#define WriteDeviceAddress   0xa2
#define ReadDviceAddress     0xa3

sbit E2P_SCL = P2^3;
sbit E2P_SDA = P2^2;
sbit E2P_DOG = P3^7;

static void AT02DelayMs(unsigned int number) 
{
	unsigned char temp;
	for( ; number != 0; number--,E2P_DOG =! E2P_DOG)
	{
		for(temp = 112; temp != 0; temp--)
		{
		}
	}
}


static void AT02Start()
{
	E2P_SDA = 1;
	E2P_SCL = 1;
	E2P_SDA = 0;
	E2P_SCL = 0;
}

/***************************************************************************/
static void AT02Stop()
{
	E2P_SCL = 0;
	E2P_SDA = 0;
	E2P_SCL = 1;
	E2P_SDA = 1;
}

/***************************************************************************/
static void AT02Ack()
{
	E2P_SDA = 0;
	E2P_SCL = 1;
	E2P_SCL = 0;
	E2P_SDA = 1;
}

/***************************************************************************/
static void AT02NoAck()
{
	E2P_SDA = 1;
	E2P_SCL = 1;
	E2P_SCL = 0;
}

/***************************************************************************/
static bit AT02TestAck()
{
	bit ErrorBit;

	E2P_SDA = 1;
	E2P_SCL = 1;
	ErrorBit = E2P_SDA;
	E2P_SCL = 0;
	return(ErrorBit);
}

/***************************************************************************/
static void AT02Write8Bit(unsigned char input)
{
	unsigned char temp;

	for(temp=8;temp!=0;temp--)
	{
		E2P_SDA = (bit)(input&0x80);
		E2P_SCL = 1;
		E2P_SCL = 0;
		input = input<<1;
	}
}

static unsigned char AT02Read8Bit()
{
	unsigned char temp;
	unsigned char rbyte = 0;

	for(temp = 8; temp != 0; temp--)
	{
		E2P_SCL = 1;
		rbyte = rbyte << 1;
		rbyte = rbyte|((unsigned char)(E2P_SDA));
		E2P_SCL = 0;
	}
	return(rbyte);
}

static void Write24c02(unsigned char *Wdata,unsigned char RomAddress,unsigned char number)
{
	AT02Start();
	AT02Write8Bit(WriteDeviceAddress);
	AT02TestAck();
	AT02Write8Bit(RomAddress);
	AT02TestAck();
	for( ; number != 0; number--)
	{
		AT02Write8Bit(*Wdata);
		AT02TestAck();
		Wdata++;
	}
	AT02Stop();
	AT02DelayMs(10);
}

static void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes)
{
	AT02Start();
	AT02Write8Bit(WriteDeviceAddress);
	AT02TestAck();
	AT02Write8Bit(RomAddress);
	AT02TestAck();
	AT02Start();
	AT02Write8Bit(ReadDviceAddress);
	AT02TestAck();
	while(bytes != 1)
	{
		*RamAddress = AT02Read8Bit();
		AT02Ack();
		RamAddress++;
		bytes--;
	}
	*RamAddress = AT02Read8Bit();
	AT02NoAck();
	AT02Stop();
}

void E2PWrite02(unsigned char Addr,unsigned char Val)
{
	Write24c02(&Val,Addr,1);
}

unsigned char E2PRead02(unsigned char Addr)
{
	unsigned char Temp;
	Read24c02(&Temp,Addr,1);
	return(Temp);
}

⌨️ 快捷键说明

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