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

📄 eepromcopy.c

📁 一个非常好的微处理器烧录EEPROM的C++ 原代码项目文件,直接可用,而且还是一拖八的, 成果奉献
💻 C
字号:
/***************************************************************************************************************************
* Project:    		EepromCopy Software Part                                                    
*                                                                                                                          
* File:         		EepromCopy.C (Source)                                                                                  
*                                                                                                                          
*Version:      		V0.00                                                                                               
*                                                                                                                          
* Created:      	2006.05.10
* Last Change:      2006.05.10                                                                          
*                                                                                                                          
* Author:       		LaiJun                                                                                         
*							       			   			  	       	    
* Company:		COBY										       	    
*                                                                                                                         
* Compiler:     	KEIL C51 V7.07                                                                              
*                                                                                                                         
* Description:  	
*
* SM5964(@12MHz)                                        	       	                            	    
*
*Copyright (c) COBY Integration Technology, Inc.
*All rights reserved.
*
***************************************************************************************************************************/
#include	"PublicDef.h"
#include	"PublicFunction.h"
#include	"LED_FONT.H"
//define	Public var
union
	{
		BYTE	 bytes[128];
		WORD	 words[64];
		DWORD	 dwords[32];
	}	GpBuffer;
BYTE	*ptGpBuffer;

BYTE	bDelayTime,Operate_Flag;
WORD	wDelayTime,wDemoDelay,Chip_Station,Chip_Station_copy,Error_Flag;
WORD	CODE	Chip_table[]=
	{	
		CHIP_STATION_D1,
		CHIP_STATION_D2,
		CHIP_STATION_D3,
		CHIP_STATION_D4,
		CHIP_STATION_D5,
		CHIP_STATION_D6,
		CHIP_STATION_D7,
		CHIP_STATION_D8,
		CHIP_STATION_R
	};
BYTE	CODE	Led_Table[]={
		#include	"LED_FONT.TXT"
							};
	
void	InitMcu(void)
{
#ifdef	MCU_SM5964_SynCmos
	TMOD=0x10;
	TL1=bCOPYTL1;
	TH1=bCOPYTH1;
	SCON=0x50;
	T2CON=0x30;
	PCON=0x00;
	TH2=RCAP2H=0xff;
	TL2=RCAP2L=BAUD_UART;
	IT1 =0;
	ET1=ES=1;
	PT1=0;PS=1;
	TR1=TR2=1;
	EX1=0;
	WDTC=0;
	EA=btENABLE;
	SCONF=0x0E;
	DBANK=0x00;
#endif
}

void	TurnOnOff_Light(BYTE	Light)
{
	switch	(Light)
	{
		case	LIGHT_RED:
				Pin_LIGHT_RED=1;
				Pin_LIGHT_GREEN=0;
				break;
		case	LIGHT_GREEN:
				Pin_LIGHT_RED=0;
				Pin_LIGHT_GREEN=1;
				break;
		case	LIGHT_YELLOW:
				Pin_LIGHT_RED=1;
				Pin_LIGHT_GREEN=1;
				break;
		case	LIGHT_OFF:
				Pin_LIGHT_RED=0;
				Pin_LIGHT_GREEN=0;
				break;
	}
}

void	Disp_Led(BYTE	  Led_Out)
{
	Pin_Led_Out=Led_Out;
}

void	SetEeprom(void)
{
	#if	SELECT_TYPE_METHOD==SELECT_BY_SOFT
	Eeprom.bType_Eeprom=EEPROM_TYPE;
	#else
	Eeprom.bType_Eeprom=(Pin_Type_Select>>4)&0x0f;
	#endif
	switch	(Eeprom.bType_Eeprom)
	{
		case	EEPROM_24C01:
				Eeprom.wPages_Eeprom=EEPROM_PAGES_24C01;
				Eeprom.bBytes_PerPage=PAGEBYTES_24C02;
				break;
		case	EEPROM_24C02:
				Eeprom.wPages_Eeprom=EEPROM_PAGES_24C02;
				Eeprom.bBytes_PerPage=PAGEBYTES_24C02;
				break;
		case	EEPROM_24C04:
				Eeprom.wPages_Eeprom=EEPROM_PAGES_24C04;
				Eeprom.bBytes_PerPage=PAGEBYTES_24C16;
				break;
		case	EEPROM_24C08:
				Eeprom.wPages_Eeprom=EEPROM_PAGES_24C08;
				Eeprom.bBytes_PerPage=PAGEBYTES_24C16;
				break;
		case	EEPROM_24C16:
				Eeprom.wPages_Eeprom=EEPROM_PAGES_24C16;
				Eeprom.bBytes_PerPage=PAGEBYTES_24C16;
				break;
		case	EEPROM_24C32:
				Eeprom.wPages_Eeprom=EEPROM_PAGES_24C32;
				Eeprom.bBytes_PerPage=PAGEBYTES_24C64;
				break;
		case	EEPROM_24C64:
				Eeprom.wPages_Eeprom=EEPROM_PAGES_24C64;
				Eeprom.bBytes_PerPage=PAGEBYTES_24C64;
				break;
		case	EEPROM_24C128:
				Eeprom.wPages_Eeprom=EEPROM_PAGES_24C128;
				Eeprom.bBytes_PerPage=PAGEBYTES_24C256;
				break;
		case	EEPROM_24C256:
				Eeprom.wPages_Eeprom=EEPROM_PAGES_24C256;
				Eeprom.bBytes_PerPage=PAGEBYTES_24C256;
				break;
		case	EEPROM_24C512:
				Eeprom.wPages_Eeprom=EEPROM_PAGES_24C512;
				Eeprom.bBytes_PerPage=PAGEBYTES_24C512;
				break;
		default:	
				Eeprom.wPages_Eeprom=EEPROM_PAGES_24C08;
				Eeprom.bBytes_PerPage=PAGEBYTES_24C16;
				break;
	}
}
BYTE Chek_ChipStation(BYTE	Iic_type)
{
	SetIIC_Type(Iic_type);
	Reset_Eeprom();
	ptGpBuffer=GpBuffer.bytes;
	if	(EepromRead(0,1)==btIIC_RIGHT)
	{
		Chip_Station|=Chip_table[Iic_type];
		return	btIIC_RIGHT;
	}
	else
	{
		Chip_Station&=~Chip_table[Iic_type];
		return	btIIC_ERROR;
	}
}

void	Chek_Chip(void)
{
	BYTE	Iic_Chip;
	for	(Iic_Chip=IIC_AT24CXX_D1;Iic_Chip<=IIC_AT24CXX_R;Iic_Chip++)
	Chek_ChipStation(Iic_Chip);
}
void	Disp_CurLed(WORD  Chip_Select)
{
		switch	(Chip_Select)
		{
			case	CHIP_STATION_R:	
					Disp_Led(Led_Table[0]);
					break;
			case	CHIP_STATION_D1:
					Disp_Led(Led_Table[1]);
					break;
			case	CHIP_STATION_D2:
					Disp_Led(Led_Table[2]);
					break;
			case	CHIP_STATION_D3:
					Disp_Led(Led_Table[3]);
					break;
			case	CHIP_STATION_D4:
					Disp_Led(Led_Table[4]);
					break;
			case	CHIP_STATION_D5:
					Disp_Led(Led_Table[5]);
					break;
			case	CHIP_STATION_D6:
					Disp_Led(Led_Table[6]);
					break;
			case	CHIP_STATION_D7:
					Disp_Led(Led_Table[7]);
					break;
			case	CHIP_STATION_D8:	
					Disp_Led(Led_Table[8]);
					break;
		}
}

void	Disp_Loop(BYTE	loop)
{
	switch	(loop)
	{
		case	0:
		Disp_Led(Led_Table[CH_REG_A]);
		break;
		case	1:
		Disp_Led(Led_Table[CH_REG_A]|Led_Table[CH_REG_B]);
		break;
		case	2:
		Disp_Led(Led_Table[CH_REG_A]|Led_Table[CH_REG_B]|Led_Table[CH_REG_C]);
		break;
		case	3:
		Disp_Led(Led_Table[CH_REG_A]|Led_Table[CH_REG_B]|Led_Table[CH_REG_C]|Led_Table[CH_REG_D]);
		break;
		case	4:
		Disp_Led(Led_Table[CH_REG_A]|Led_Table[CH_REG_B]|Led_Table[CH_REG_C]|Led_Table[CH_REG_D]|Led_Table[CH_REG_E]);
		break;
		case	5:
		Disp_Led(Led_Table[CH_REG_A]|Led_Table[CH_REG_B]|Led_Table[CH_REG_C]|Led_Table[CH_REG_D]|Led_Table[CH_REG_E]|Led_Table[CH_REG_F]);
		break;
		case	6:
		Disp_Led(Led_Table[CH_REG_B]|Led_Table[CH_REG_C]|Led_Table[CH_REG_D]|Led_Table[CH_REG_E]|Led_Table[CH_REG_F]);
		break;
		case	7:
		Disp_Led(Led_Table[CH_REG_C]|Led_Table[CH_REG_D]|Led_Table[CH_REG_E]|Led_Table[CH_REG_F]);
		break;
		case	8:
		Disp_Led(Led_Table[CH_REG_D]|Led_Table[CH_REG_E]|Led_Table[CH_REG_F]);
		break;
		case	9:
		Disp_Led(Led_Table[CH_REG_E]|Led_Table[CH_REG_F]);
		break;
		case	10:
		Disp_Led(Led_Table[CH_REG_F]);
		break;
		case	11:
		Disp_Led(Led_Table[CH_NULL]);
		break;
	}
}
void	Copy_Eeprom(void)
{
	WORD	Eeprom_Pages,Chip_Select;
	BYTE	Iic_Select,light_status=0,Scan=Eeprom.wPages_Eeprom/9;
	SetEeprom();
	TurnOnOff_Light(LIGHT_YELLOW);
	wDelayTime=100;
	while	(wDelayTime);
	Error_Flag=CHIP_STATION_NO;
	for	(Eeprom_Pages=0;Eeprom_Pages<Eeprom.wPages_Eeprom;Eeprom_Pages++)
	{
		TurnOnOff_Light(LIGHT_YELLOW);
		SetIIC_Type(IIC_AT24CXX_R);
		ptGpBuffer=GpBuffer.bytes;
		if  (EepromRead(Eeprom_Pages*Eeprom.bBytes_PerPage,Eeprom.bBytes_PerPage))
		{
			Operate_Flag=OPERATE_ER;
			Error_Flag|=CHIP_STATION_R;
			break;
		}
		TurnOnOff_Light(LIGHT_OFF);
		Disp_Led(Led_Table[(Eeprom.wPages_Eeprom-Eeprom_Pages)/Scan]);
		for	(Chip_Select=CHIP_STATION_D1,Iic_Select=IIC_AT24CXX_D1;Chip_Select<=CHIP_STATION_D8;Chip_Select<<=1,Iic_Select++)
		{
			if	((Chip_Station&Chip_Select)&&((Error_Flag&Chip_Select)==0))
			{
				if	(light_status==0)
				{
					TurnOnOff_Light(LIGHT_YELLOW);
					light_status=1;
				}	
				else
				{
					TurnOnOff_Light(LIGHT_OFF);
					light_status=0;
				}	
				SetIIC_Type(Iic_Select);
				ptGpBuffer=GpBuffer.bytes;
				if  (EepromWrite(Eeprom_Pages*Eeprom.bBytes_PerPage,Eeprom.bBytes_PerPage))
				{
					Operate_Flag=OPERATE_ER;
					Error_Flag|=Chip_Select;
				}
			}
		}
	}

	
	#if	0
	for	(Chip_Select=CHIP_STATION_D1,Iic_Select=IIC_AT24CXX_D1;Chip_Select<=CHIP_STATION_D8;Chip_Select<<=1,Iic_Select++)
	{
		if	(Chip_Station&Chip_Select)
		{
			Disp_CurLed(Chip_Select);
			for	(Eeprom_Pages=0;Eeprom_Pages<Eeprom.wPages_Eeprom;Eeprom_Pages++)
			{
				TurnOnOff_Light(LIGHT_YELLOW);
				SetIIC_Type(IIC_AT24CXX_R);
				ptGpBuffer=GpBuffer.bytes;
				if  (EepromRead(Eeprom_Pages*Eeprom.bBytes_PerPage,Eeprom.bBytes_PerPage))
				{
					Operate_Flag=OPERATE_ER;
					Error_Flag|=CHIP_STATION_R;
					break;
				}
				TurnOnOff_Light(LIGHT_OFF);
				SetIIC_Type(Iic_Select);
				ptGpBuffer=GpBuffer.bytes;
				if  (EepromWrite(Eeprom_Pages*Eeprom.bBytes_PerPage,Eeprom.bBytes_PerPage))
				{
					Operate_Flag=OPERATE_ER;
					Error_Flag|=Chip_Select;
					break;
				}
			}
		}	
	}
	#endif
	if	(Error_Flag==CHIP_STATION_NO)
	Operate_Flag=OPERATE_OK;	
}

void	Operate_Eeprom(void)
{
	if	((Chip_Station&CHIP_STATION_R)&&(Chip_Station!=CHIP_STATION_R))
	Copy_Eeprom();
	else
	{
		Operate_Flag=OPERATE_ER;
		Error_Flag=CHIP_STATION_R;
	}
	if	(Operate_Flag==OPERATE_OK)
	{
		TurnOnOff_Light(LIGHT_GREEN);
		Disp_Led(Led_Table[CH_NULL]);
	}
	else
	TurnOnOff_Light(LIGHT_RED);
	wDelayTime=500;
	while	(wDelayTime);
	Key_Func=KEY_NO_KEY;
	while	(1)
	{
		Chek_key();
		if	(Key_Func==KEY_NO_KEY)
		break;	
	}
}
void main(void)
{
	BYTE	Loop_Counter,Loop_Counter1;
	WORD	wLoop_Counter;
	InitMcu();
	TurnOnOff_Light(LIGHT_OFF);
	Disp_Led(Led_Table[CH_NULL]);
	wDelayTime=1000;
	while (wDelayTime);
	SetEeprom();
	Loop_Counter=0;
	Loop_Counter1=11;
	wLoop_Counter=0;
	Operate_Flag=OPERATE_NO;
	wDemoDelay=400;
	Chip_Station=Chip_Station_copy=CHIP_STATION_NO;
	Error_Flag=CHIP_STATION_NO;
	while	(1)
	{
		Chek_key();
		if	(Key_Func==KEY_START)
		{
			Operate_Eeprom();		
			Chek_Chip();
			Chip_Station_copy=Chip_Station;
			wLoop_Counter=CHIP_STATION_R;
		}
		switch	(Operate_Flag)
		{
			case	OPERATE_NO:
					if	(wDemoDelay%50==0)
					{
						Chek_Chip();
						if	(Chip_Station!=Chip_Station_copy)
						{
							if	(Chip_Station_copy==CHIP_STATION_NO)
							{
								if	(Chip_Station&CHIP_STATION_R)
								wLoop_Counter=CHIP_STATION_R;
								else  if	(Chip_Station&CHIP_STATION_D1)
								wLoop_Counter=CHIP_STATION_D1;	
								else  if	(Chip_Station&CHIP_STATION_D2)
								wLoop_Counter=CHIP_STATION_D2;	
								else  if	(Chip_Station&CHIP_STATION_D3)
								wLoop_Counter=CHIP_STATION_D3;	
								else  if	(Chip_Station&CHIP_STATION_D4)
								wLoop_Counter=CHIP_STATION_D4;	
								else  if	(Chip_Station&CHIP_STATION_D5)
								wLoop_Counter=CHIP_STATION_D5;	
								else  if	(Chip_Station&CHIP_STATION_D6)
								wLoop_Counter=CHIP_STATION_D6;	
								else  if	(Chip_Station&CHIP_STATION_D7)
								wLoop_Counter=CHIP_STATION_D7;	
								else
								wLoop_Counter=CHIP_STATION_D8;	
							}
							else
							wLoop_Counter=Chip_Station^Chip_Station_copy;
							Disp_CurLed(wLoop_Counter);	
							Chip_Station_copy=Chip_Station;
							if	(Chip_Station==CHIP_STATION_NO)
							Loop_Counter1=5;
							else
							wDemoDelay=600;
						}
					}
					if	(wDemoDelay==0)
					{
						Loop_Counter=INC(Loop_Counter,LIGHT_RED,LIGHT_YELLOW);	
						TurnOnOff_Light(Loop_Counter);
						if	(Chip_Station!=CHIP_STATION_NO)
						{
							while	(1)
							{
								if	(wLoop_Counter==CHIP_STATION_R)
								wLoop_Counter=CHIP_STATION_D1;
								else 
								wLoop_Counter*=2;
								if	(Chip_Station&wLoop_Counter)
								break;
							}
							Disp_CurLed(wLoop_Counter);	
							wDemoDelay=600;
						}
						else
						{
							Loop_Counter1=INC(Loop_Counter1,0,11);
							Disp_Loop(Loop_Counter1);
							wDemoDelay=200;
						}
						
					}
					break;
			case	OPERATE_ER:
					if	(wDemoDelay%50==0)
					{
						Chek_Chip();
						if	(Chip_Station!=Chip_Station_copy)
						{
							Operate_Flag=OPERATE_NO;
							Chip_Station_copy=CHIP_STATION_NO;
							Chip_Station=CHIP_STATION_NO;
							Loop_Counter=0;
							wLoop_Counter=0;
							Loop_Counter1=11;
							break;
						}
					}
					if	(wDemoDelay==0)
					{
						if	(Error_Flag!=CHIP_STATION_NO)
						{
							while	(1)
							{
								if	(wLoop_Counter==CHIP_STATION_R)
								wLoop_Counter=CHIP_STATION_D1;
								else 
								wLoop_Counter*=2;
								if	(Error_Flag&wLoop_Counter)
								break;
							}
							Disp_CurLed(wLoop_Counter);	
						}
						Loop_Counter=INCx(Loop_Counter,0,3,3);
						TurnOnOff_Light(Loop_Counter);
						wDemoDelay=400;
					}
					break;
			case	OPERATE_OK:
					if	(wDemoDelay%50==0)
					{
						Chek_Chip();
						if	(Chip_Station!=Chip_Station_copy)
						{
							Disp_CurLed(Chip_Station^Chip_Station_copy);
							Chip_Station_copy=Chip_Station;
							wDemoDelay=800;
						}
						if	((Chip_Station==CHIP_STATION_R)||(Chip_Station==CHIP_STATION_NO))
						{
							Operate_Flag=OPERATE_NO;
							Chip_Station_copy=CHIP_STATION_NO;
							Loop_Counter=0;
							wLoop_Counter=0;
							Loop_Counter1=11;
						}
					}
					if	(wDemoDelay==0)
					{
						wDemoDelay=800;
						Disp_Led(Led_Table[CH_NULL]);
					}
					break;
		}
	}
}

⌨️ 快捷键说明

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