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

📄 24c02.c

📁 LF2407A对24c02的读写程序
💻 C
字号:
#include 	"global.c" 
#include	"24C02.h"
//IOPA3=SCL
//IOPA4=SDA
#define	  	WriteDeviceAddress 	0xa0
#define		ReadDeviceAddress 	0xa1

#define	  	SetSCL		PADATDIR = PADATDIR | 0x0008
#define	  	ClrSCL		PADATDIR = PADATDIR & 0xFFF7
#define	  	SetSDA		PADATDIR = PADATDIR | 0x0010
#define	  	ClrSDA		PADATDIR = PADATDIR & 0xFFEF
#define		SDAIN		PADATDIR = PADATDIR & 0xF7FF
#define		SDAOUT		PADATDIR = PADATDIR | 0x1000

void	delay(Uint16  number)
{
	Uint16  j;
	for(j = 0;j < number;j++) j=j;
}	

void	IStart(void)
{
	ClrSCL;
//----------------	
	SDAOUT;
	delay(50);
	SetSDA;
	SetSCL;
	delay(15);
	ClrSDA;
	delay(5);
	ClrSCL;
//---------------------
	delay(5);
	SetSDA;	
}

void	IStop(void)
{
	ClrSCL;	
	SDAOUT;
	delay(50);
	ClrSDA;
	delay(15);
	SetSCL;
	delay(5);
	SetSDA;
//----------------------
	delay(5);
	ClrSCL;	
}

void	IAck(void)
{
	SDAOUT;
	delay(50);
	ClrSDA;
	delay(5);
	SetSCL;
	delay(15);
	ClrSCL;
	delay(5);
	SetSDA;
}
void	INAck(void)
{
	SDAOUT;
	delay(50);
	SetSDA;
	SetSCL;
	delay(15);
	ClrSCL;
}

Uint16	TestAck(void)
{
	Uint16	Temp;
	ClrSCL;
	delay(5);
	SetSCL;
	delay(15);
	SDAIN;
	delay(50);
	ClrSCL;
	Temp = 0x0010 & PADATDIR;
	return Temp;
}

void	WriteByte(Uint16  data)
{
	Uint16	i;
	Uint16	Temp = 0x8000;
	data = data<<8;
	SDAOUT;
	delay(50);
	for(i=8;i!=0;i--)
	{
		if (Temp & data)	SetSDA;
		else	ClrSDA;
		SetSCL;
		delay(15);
		ClrSCL;
		data = data<<1;
	}
}

Uint16	ReadByte(void)
{
	Uint16	i,T;
	Uint16	Temp = 0x0000;
	SDAIN;
	delay(50);
	for (i=8;i!=0;i--)
	{
		SetSCL;
		Temp = Temp<<1;
		T = PADATDIR;
		T = T & 0x0010;
		if (T)	 Temp = Temp | 1;
		else	Temp = Temp | 0;
		delay(15);
		ClrSCL;
	}
	return Temp;
}

Uint16	Write24c02(Uint16	*Wdata, Uint16	RomAddress, Uint16	number)
{	
	IStart();
	WriteByte(WriteDeviceAddress);
	if(TestAck())	return 1;
	WriteByte(RomAddress);
	if(TestAck())	return 1;
	for(;number!=0;number--)
	{
		WriteByte(*Wdata);
		if(TestAck())	return 1;
		Wdata++;
	}
	IStop();
	delay(10000);
	return 0;
}

Uint16	Read24c02(Uint16  *RamAddr, Uint16	RomAddress, Uint16 number)
{
	IStart();
	WriteByte(WriteDeviceAddress);
	if(TestAck())	return  1;
	WriteByte(RomAddress);
	if(TestAck())	return	1;
	IStart();
	WriteByte(ReadDeviceAddress);
	if(TestAck())	return  1;
	while(number!=1)
	{
		*RamAddr = ReadByte();
		IAck();
		RamAddr++;
		number--;
	}
	*RamAddr = ReadByte();
	INAck();
	IStop();
	return 0;
}

//===========================================================================
// No more.
//===========================================================================

⌨️ 快捷键说明

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