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

📄 at24cxx.c

📁 AT24C01~24C16燒錄器程序,可以通過麼MENU選擇燒錄IC型號
💻 C
📖 第 1 页 / 共 2 页
字号:
//********************************************************************************
#include "../SubProgram/SubprogramList.h"
/***************************************************************************/
void AT24cxxDelay(void) 
{
	U8 dly;

	dly=50;//25
	while(dly--);
}
/***************************************************************************/
void SetSDA(bit c)
{
	if(FlagEEPROM==EEPROM1)
		SDA1=c;
	else if(FlagEEPROM==EEPROM2)
		SDA2=c;
	else if(FlagEEPROM==EEPROM3)
		SDA3=c;
	else if(FlagEEPROM==EEPROM4)
		SDA4=c;
	else if(FlagEEPROM==EEPROM5)
		SDA5=c;
	else if(FlagEEPROM==EEPROM6)
		SDA6=c;
	else if(FlagEEPROM==EEPROM7)
		SDA7=c;
	AT24cxxDelay();
}
/***************************************************************************/
void SetSCL(bit c)
{
	if(FlagEEPROM==EEPROM1)
		SCL1=c;
	else if(FlagEEPROM==EEPROM2)
		SCL2=c;
	else if(FlagEEPROM==EEPROM3)
		SCL3=c;
	else if(FlagEEPROM==EEPROM4)
		SCL4=c;
	else if(FlagEEPROM==EEPROM5)
		SCL5=c;
	else if(FlagEEPROM==EEPROM6)
		SCL6=c;
	else if(FlagEEPROM==EEPROM7)
		SCL7=c;
	AT24cxxDelay();
}
/***************************************************************************/
bit ReadSDA(void)
{
	bit c;
	
	if(FlagEEPROM==EEPROM1)
		c=SDA1;
	else if(FlagEEPROM==EEPROM2)
		c=SDA2;
	else if(FlagEEPROM==EEPROM3)
		c=SDA3;
	else if(FlagEEPROM==EEPROM4)
		c=SDA4;
	else if(FlagEEPROM==EEPROM5)
		c=SDA5;
	else if(FlagEEPROM==EEPROM6)
		c=SDA6;
	else if(FlagEEPROM==EEPROM7)
		c=SDA7;
	return(c);
}
/***************************************************************************/
void Start(void)
{
	SetSDA(1);
	SetSCL(1);
	SetSDA(0);
	SetSCL(0);
}
/***************************************************************************/
void Stop(void) 
{
	SetSCL(0);
	SetSDA(0);
	SetSCL(1);
	SetSDA(1);
}
/***************************************************************************/
void Ack(void) 
{
	SetSDA(0);
	SetSCL(1);
	SetSCL(0);
	SetSDA(1);
}

/***************************************************************************/
void NoAck(void) 
{
	SetSDA(1);
	SetSCL(1);
	SetSCL(0);
}
/***************************************************************************/
void TestAck(void) 
{
	U16 wait=0;
	
	SetSDA(1);
	SetSCL(1);
	while(ReadSDA()!=0)
		{
			wait++;
			if(wait>3000)
				break;
		}
	SetSCL(0);
	if(wait>3000)
		FlagACK=0;  //NCK
	else
		FlagACK=1;  //ACK
}
//***************************************************************************/
void Write8Bit(U8 cdata) 
{
	U8 temp;

	for(temp=8;temp!=0;temp--)
		{
			if(cdata & 0x80)
				SetSDA(1);
			else
				SetSDA(0);
			SetSCL(1);
			SetSCL(0);
			cdata=cdata<<1;
		}
}
//***************************************************************************/
void Write24cxx(U8 bank,U8 *RamAddress,U8 RomAddress,U8 number) 
{
	Start();
	Write8Bit(bank);
	TestAck();
	if(FlagACK==0)
		FlagError=1;
	Write8Bit(RomAddress);
	TestAck();
	if(FlagACK==0)
		FlagError=1;
	for(;number!=0;number--) 
		{
			Write8Bit(*RamAddress);
			TestAck();
			RamAddress++;
		}
	Stop();
	Delay(T1ms*2);
}

/***************************************************************************/
U8 Read8Bit(void) 
{
	U8 temp,rbyte=0;
	
	for(temp=8;temp!=0;temp--) 
		{
			SetSCL(1);
			rbyte=rbyte<<1;
			if(ReadSDA())
				rbyte=rbyte+1;
			SetSCL(0);
		}
	return(rbyte);
}

/***************************************************************************/
void Read24cxx(U8 bank,U8 *RamAddress,U8 RomAddress,U8 bytes) 
{
	Start();
	Write8Bit(bank);
	TestAck();
	if(FlagACK==0)
		FlagError=1;
	Write8Bit(RomAddress);
	TestAck();
	if(FlagACK==0)
		FlagError=1;
	Start();
	Write8Bit(bank+1);
	TestAck();
	if(FlagACK==0)
		FlagError=1;
	while(bytes!=1) 
		{
			*RamAddress=Read8Bit();
			Ack();
			RamAddress++;
			bytes--;
		}
	*RamAddress=Read8Bit();
	NoAck();
	Stop();
	Delay(T1ms*2);
}
//****************************************************************************************************
// Start Program Port 
//****************************************************************************************************
void StartProgram(void) 
{
	U16 LengthA,DataLength;
	U16 Len=0;
	U16 PageLen=0;
	U8 i,Bank;
	U8 *ptr;
	
	FlagError=0;
	//-------------------------------------------------------------------------------------
	//disply 
	if(FlagPort1ProgramEn==1)
		{
			SetPortLed(PORT1,LED_Busy);
			DisplayStringData(1,SystemPort1Program,sizeof(SystemPort1Program));
		}
	else if(FlagPort2ProgramEn==1)
		{
			SetPortLed(PORT2,LED_Busy);
			DisplayStringData(1,SystemPort2Program,sizeof(SystemPort2Program));
		}
	else if(FlagPort3ProgramEn==1)
		{
			SetPortLed(PORT3,LED_Busy);
			DisplayStringData(1,SystemPort3Program,sizeof(SystemPort3Program));
		}
	Delay(T1s);
	//-------------------------------------------------------------------------------------
	//read sample code
	if(FlagSelfStudy==1)
		{
			if(FlagPort1ProgramEn==1)
				{
					if(FlagSelfStudy==0)
						FlagEEPROM=EEPROM1;
					else
						FlagEEPROM=EEPROM2;
					if(FlagPort1EEPROMType==AT24C01)
						MaxProgramDataLenngth=128;
					else if(FlagPort1EEPROMType==AT24C02)
						MaxProgramDataLenngth=256;
					else if(FlagPort1EEPROMType==AT24C04)
						MaxProgramDataLenngth=512;
					else if(FlagPort1EEPROMType==AT24C08)
						MaxProgramDataLenngth=1024;
					else if(FlagPort1EEPROMType==AT24C16)
						MaxProgramDataLenngth=2048;
					ptr=Port1SampleCode;
				}
			else if(FlagPort2ProgramEn==1)
				{
					if(FlagSelfStudy==0)
						FlagEEPROM=EEPROM3;
					else
						FlagEEPROM=EEPROM4;
					if(FlagPort2EEPROMType==AT24C01)
						MaxProgramDataLenngth=128;
					else if(FlagPort2EEPROMType==AT24C02)
						MaxProgramDataLenngth=256;
					else if(FlagPort2EEPROMType==AT24C04)
						MaxProgramDataLenngth=512;
					else if(FlagPort2EEPROMType==AT24C08)
						MaxProgramDataLenngth=1024;
					else if(FlagPort2EEPROMType==AT24C16)
						MaxProgramDataLenngth=2048;
					ptr=Port2SampleCode;
				}
			else if(FlagPort3ProgramEn==1)
				{
					if(FlagSelfStudy==0)
						FlagEEPROM=EEPROM5;
					else
						FlagEEPROM=EEPROM6;
					if(FlagPort3EEPROMType==AT24C01)
						MaxProgramDataLenngth=128;
					else if(FlagPort3EEPROMType==AT24C02)
						MaxProgramDataLenngth=256;
					else if(FlagPort3EEPROMType==AT24C04)
						MaxProgramDataLenngth=512;
					else if(FlagPort3EEPROMType==AT24C08)
						MaxProgramDataLenngth=1024;
					else if(FlagPort3EEPROMType==AT24C16)
						MaxProgramDataLenngth=2048;
					ptr=Port3SampleCode;
				}
			DataLength=MaxProgramDataLenngth;
			Bank=BANK0;
			while(MaxProgramDataLenngth!=0)
				{
					if(MaxProgramDataLenngth>256)
						{
							PageLen=256;
							MaxProgramDataLenngth=MaxProgramDataLenngth-256;
						}
					else
						{
							PageLen=MaxProgramDataLenngth;
							MaxProgramDataLenngth=MaxProgramDataLenngth-PageLen;
						}
					LengthA=0;
					Len=0;
					while(LengthA<PageLen)
						{
							Read24cxx(Bank,EmpBuffer,Len,8);
							if(FlagError!=0)
								break;
							for(i=0;i<8;i++)
								{
									*ptr=EmpBuffer[i];
									LengthA++;
									ptr++;
								}
							Len=Len+8;
						}
					if(FlagError!=0)
						break;
					Bank=Bank+0x02;
				}
			if(FlagError!=0)
				{
					if(FlagPort1ProgramEn==1)
						DisplayStringData(1,SystemPort1ProgramNG,sizeof(SystemPort1ProgramNG));
					else if(FlagPort2ProgramEn==1)
						DisplayStringData(1,SystemPort2ProgramNG,sizeof(SystemPort2ProgramNG));
					else if(FlagPort3ProgramEn==1)
						DisplayStringData(1,SystemPort3ProgramNG,sizeof(SystemPort3ProgramNG));
					Delay(T1s);
					return;
				}
		}
	//-----------------------------------------------------------------------------------------------
	//program used sample code
	if(FlagPort1ProgramEn==1)
		{
			if(FlagSelfStudy==0)
				FlagEEPROM=EEPROM2;
			else	
				FlagEEPROM=EEPROM1;
			if(FlagPort1EEPROMType==AT24C01)
				MaxProgramDataLenngth=128;
			else if(FlagPort1EEPROMType==AT24C02)
				MaxProgramDataLenngth=256;
			else if(FlagPort1EEPROMType==AT24C04)
				MaxProgramDataLenngth=512;
			else if(FlagPort1EEPROMType==AT24C08)
				MaxProgramDataLenngth=1024;
			else if(FlagPort1EEPROMType==AT24C16)
				MaxProgramDataLenngth=2048;
			ptr=Port1SampleCode;
		}
	else if(FlagPort2ProgramEn==1)
		{
			if(FlagSelfStudy==0)
				FlagEEPROM=EEPROM4;
			else
				FlagEEPROM=EEPROM3;
			if(FlagPort2EEPROMType==AT24C01)
				MaxProgramDataLenngth=128;
			else if(FlagPort2EEPROMType==AT24C02)
				MaxProgramDataLenngth=256;
			else if(FlagPort2EEPROMType==AT24C04)
				MaxProgramDataLenngth=512;
			else if(FlagPort2EEPROMType==AT24C08)
				MaxProgramDataLenngth=1024;
			else if(FlagPort2EEPROMType==AT24C16)
				MaxProgramDataLenngth=2048;
			ptr=Port2SampleCode;
		}
	else if(FlagPort3ProgramEn==1)
		{
			if(FlagSelfStudy==0)
				FlagEEPROM=EEPROM6;
			else
				FlagEEPROM=EEPROM5;
			if(FlagPort3EEPROMType==AT24C01)
				MaxProgramDataLenngth=128;
			else if(FlagPort3EEPROMType==AT24C02)
				MaxProgramDataLenngth=256;
			else if(FlagPort3EEPROMType==AT24C04)
				MaxProgramDataLenngth=512;
			else if(FlagPort3EEPROMType==AT24C08)
				MaxProgramDataLenngth=1024;
			else if(FlagPort3EEPROMType==AT24C16)
				MaxProgramDataLenngth=2048;
			ptr=Port3SampleCode;
		}
	//-----------------------------------------------
	DataLength=MaxProgramDataLenngth;
	Bank=BANK0;
	while(MaxProgramDataLenngth!=0)
		{
			if(MaxProgramDataLenngth>256)
				{
					PageLen=256;
					MaxProgramDataLenngth=MaxProgramDataLenngth-256;
				}
			else
				{
					PageLen=MaxProgramDataLenngth;
					MaxProgramDataLenngth=MaxProgramDataLenngth-PageLen;
				}
			LengthA=0;
			Len=0;
			while(LengthA<PageLen)
				{
					for(i=0;i<8;i++)
						{
							EmpBuffer[i]=*ptr;
							LengthA++;
							ptr++;
						}
					Write24cxx(Bank,EmpBuffer,Len,8);
					if(FlagError!=0)
						break;
					Len=Len+8;
				}
			if(FlagError!=0)
				break;
			Bank=Bank+0x02;
		}
	if(FlagError!=0)
		{
			if(FlagPort1ProgramEn==1)
				DisplayStringData(1,SystemPort1ProgramNG,sizeof(SystemPort1ProgramNG));
			else if(FlagPort2ProgramEn==1)
				DisplayStringData(1,SystemPort2ProgramNG,sizeof(SystemPort2ProgramNG));
			else if(FlagPort3ProgramEn==1)
				DisplayStringData(1,SystemPort3ProgramNG,sizeof(SystemPort3ProgramNG));
			Delay(T1s);
			return;
		}
	//-----------------------------------------------------------------------------------------------
     //READ ALL CODE AND DOUBLE CHECK
	if(FlagPort1ProgramEn==1)
		{
			DisplayStringData(1,SystemPort1ProgramOK,sizeof(SystemPort1ProgramOK));
			Delay(T10ms*50);
			DisplayStringData(1,SystemPort1Verify,sizeof(SystemPort1Verify));
		}
	else if(FlagPort2ProgramEn==1)
		{
			DisplayStringData(1,SystemPort2ProgramOK,sizeof(SystemPort2ProgramOK));
			Delay(T10ms*50);
			DisplayStringData(1,SystemPort2Verify,sizeof(SystemPort2Verify));
		}
	else if(FlagPort3ProgramEn==1)
		{
			DisplayStringData(1,SystemPort3ProgramOK,sizeof(SystemPort3ProgramOK));
			Delay(T10ms*50);
			DisplayStringData(1,SystemPort3Verify,sizeof(SystemPort3Verify));
		}
	Delay(T1s);
	//verify program code 
	MaxProgramDataLenngth=DataLength;
	Bank=BANK0;
	ptr=CheckCodeBuffer;
	while(MaxProgramDataLenngth!=0)
		{
			if(MaxProgramDataLenngth>256)
				{
					PageLen=256;
					MaxProgramDataLenngth=MaxProgramDataLenngth-256;
				}
			else
				{
					PageLen=MaxProgramDataLenngth;
					MaxProgramDataLenngth=MaxProgramDataLenngth-PageLen;
				}
			LengthA=0;
			Len=0;
			while(LengthA<PageLen)
				{
					Read24cxx(Bank,EmpBuffer,Len,8);
					if(FlagError!=0)
						break;
					for(i=0;i<8;i++)
						{
							*ptr=EmpBuffer[i];
							LengthA++;
							ptr++;
						}
					Len=Len+8;
				}
			if(FlagError!=0)
				break;
			Bank=Bank+0x02;
		}
	if(FlagError==0)
		{
			LengthA=0;
			if(FlagPort1ProgramEn==1)
				ptr=Port1SampleCode;
			else if(FlagPort2ProgramEn==1)
				ptr=Port2SampleCode;
			else if(FlagPort3ProgramEn==1)
				ptr=Port3SampleCode;
			while(LengthA<DataLength)
				{
					if(CheckCodeBuffer[LengthA]!=*ptr)
						{
							FlagError=1;
							break;
						}
					LengthA++;
					ptr++;
				}	
		}
	if(FlagError!=0)
		{
			FlagError=1;
			if(FlagPort1ProgramEn==1)
				DisplayStringData(1,SystemPort1VerifyNG,sizeof(SystemPort1VerifyNG));
			else if(FlagPort2ProgramEn==1)
				DisplayStringData(1,SystemPort2VerifyNG,sizeof(SystemPort2VerifyNG));
			else if(FlagPort3ProgramEn==1)
				DisplayStringData(1,SystemPort3VerifyNG,sizeof(SystemPort3VerifyNG));
			Delay(T1s);
		}
	else
		{
			if(FlagPort1ProgramEn==1)
				{
					DisplayStringData(1,SystemPort1VerifyOK,sizeof(SystemPort1VerifyOK));
					SetPortLed(PORT1,LED_Ready);
				}
			else if(FlagPort2ProgramEn==1)
				{
					DisplayStringData(1,SystemPort2VerifyOK,sizeof(SystemPort2VerifyOK));
					SetPortLed(PORT2,LED_Ready);
				}
			else if(FlagPort3ProgramEn==1)
				{
					DisplayStringData(1,SystemPort3VerifyOK,sizeof(SystemPort3VerifyOK));
					SetPortLed(PORT3,LED_Ready);
				}
			Delay(T1s);
		}
}
//****************************************************************************************************
// save sample code 
//****************************************************************************************************
void StartSave(void) 
{

	U16 LengthA;
	U16 Len=0;
	U16 PageLen=0;
	U8 i,Bank;
	U8 *ptr;

⌨️ 快捷键说明

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