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

📄 24lc32.c

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

#define WriteDeviceAddress   0xa2
#define ReadDeviceAddress     0xa3

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

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


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

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

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

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

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

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

/***************************************************************************/
static void AT32Write8Bit(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 AT32Read8Bit()
{
	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 Write24c32(unsigned char *Wdata,unsigned int RomAddress,unsigned char number)
{
	unsigned char AddrH;
	unsigned char AddrL;

	AddrL = (unsigned char)(RomAddress & 0x00ff);
	AddrH = (unsigned char)((RomAddress & 0x0f00) >> 8);

	AT32Start();
	AT32Write8Bit(WriteDeviceAddress);
	AT32TestAck();
	AT32Write8Bit(AddrH);
	AT32TestAck();
	AT32Write8Bit(AddrL);
	AT32TestAck();
	for( ; number != 0; number--)
	{
		AT32Write8Bit(*Wdata);
		AT32TestAck();
		Wdata++;
	}
	AT32Stop();
	AT32DelayMs(10);
}

static void Read24c32(unsigned char *RamAddress,unsigned int RomAddress,unsigned char bytes)
{
	unsigned char AddrH;
	unsigned char AddrL;

	AddrL = (unsigned char)(RomAddress & 0x00ff);
	AddrH = (unsigned char)((RomAddress & 0x0f00) >> 8);

	AT32Start();
	AT32Write8Bit(WriteDeviceAddress);
	AT32TestAck();
	AT32Write8Bit(AddrH);
	AT32TestAck();
	AT32Write8Bit(AddrL);
	AT32TestAck();
	AT32Start();
	AT32Write8Bit(ReadDeviceAddress);
	AT32TestAck();
	while(bytes != 1)
	{
		*RamAddress = AT32Read8Bit();
		AT32Ack();
		RamAddress++;
		bytes--;
	}
	*RamAddress = AT32Read8Bit();
	AT32NoAck();
	AT32Stop();
}

void E2PWrite32(unsigned int Addr,unsigned char Val)
{
	Write24c32(&Val,Addr,1);
}

unsigned char E2PRead32(unsigned int Addr)
{
	unsigned char Temp;
	Read24c32(&Temp,Addr,1);
	return(Temp);
}

⌨️ 快捷键说明

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