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

📄 eeprom.c

📁 M200一个与单片机通信的C语言软件源代码
💻 C
字号:
/***********************************************************************************
/----------------------Copyright (c) 2005 ~ 2008 Miartech. All Rights Reserved.-----------------------/
/***********************************************************************************
**-----------------------------------------File Info--------------------------------------------
** Last modified Date:  2007-09-04
** Descriptions: 24C02/24C128/24C512(EEPROM)'s Device's Primary Functions
**--------------------------------------------------------------------------------------------
** Created By:  	Kelven
** Created Date:	2007-04-17
**--------------------------------------------------------------------------------------------
** Modified by: 	Kelven
** Modified date:	2007-09-04
** Version:		V3.2.0
** Descriptions:
**--------------------------------------------------------------------------------------------
** Modified by: 	Li Sufen
** Modified date:	2008-05-20
** Version:		V3.2.3
** Descriptions:	Updating Key Configrating Function, Added PLC Chip Register Value Setting Module
***********************************************************************************/

#include "..\inc\EEPROM.h"

/***********************************************************************************
** Function Name:	EEPROM_Start
** Input Parameters:None
** Output Parameters:None
** Description:Start Condition Of EEPROM's Operation Cycle
***********************************************************************************/
void	EEPROM_Start(void)
{		
   	EEPROM_SDA = 1;
	EEPROM_SCK = 1;		
	TOOL_Nop_N();
	EEPROM_SDA = 0;
	TOOL_Nop_N();
}

/***********************************************************************************
** Function Name:	EEPROM_Stop
** Input Parameters:None
** Output Parameters:None
** Implement:Stop Condition Of EEPROM's Operation Cycle
***********************************************************************************/
void	EEPROM_Stop(void)
{		
	EEPROM_SDA = 0;
	EEPROM_SCK = 1;
	TOOL_Nop_N();
	EEPROM_SDA = 1;
	TOOL_Nop_N();
}

/***********************************************************************************
** Function Name:	EEPROM_ACK
** Input Parameters:None
** Output Parameters:None
** Implement:Acknowledge Send To EEPROM After EEPROM Received Each Word.
***********************************************************************************/
void	EEPROM_ACK(void)
{		
	EEPROM_SDA = 0;
	TOOL_Nop_N();
	EEPROM_SCK = 1;
	TOOL_Nop_N();
	EEPROM_SCK = 0;
}

/***********************************************************************************
** Function Name:	EEPROM_NoACK
** Input Parameters:None
** Output Parameters:None
** Implement:No Acknowledge Need to Send When Read the Data of Current Address  
***********************************************************************************/
void	EEPROM_NoACK(void)
{		
	EEPROM_SDA = 1;
	TOOL_Nop_N();
	EEPROM_SCK = 1;
	TOOL_Nop_N();
	EEPROM_SCK = 0;
}

/***********************************************************************************
** Function Name:	EEPROM_Wirte
** Input Parameters:cData:The Data Need to Send
** Output Parameters:None
** Implement:Send Data Byte to EEPROM
***********************************************************************************/
void	EEPROM_Wirte(BYTE cData)
{		
	BYTE cBit_Counter = 8;
	BYTE cTmp_Data;
	do
	{	
		cTmp_Data = cData;
		EEPROM_SCK = 0;
		TOOL_Nop_N();
		if( (cTmp_Data & 0x80) == 0x80 )	
		{	
			EEPROM_SDA = 1;
		}
		else						
		{	
			EEPROM_SDA = 0;
		}
		EEPROM_SCK = 1;
		cTmp_Data = cData<<1;
		cData = cTmp_Data;
		cBit_Counter --;
	}	
	while(cBit_Counter > 0);
	EEPROM_SCK = 0;
}

/***********************************************************************************
** Function Name:	EEPROM_Read
** Input Parameters:None
** Output Parameters:cData:The Data Need to Read
** Implement:Read Data Byte From EEPROM
***********************************************************************************/
BYTE EEPROM_Read(void)
{	
	BYTE cData = 0;
	BYTE cTmp_Data = 0;
	BYTE cBit_Counter = 8;
	EEPROM_SDA = 1;
	do
	{	EEPROM_SCK = 0;
		TOOL_Nop_N();
		EEPROM_SCK = 1;
		TOOL_Nop_N();
		if(EEPROM_SDA)		
			cData = cData | 0x01;
		else			
			cData = cData & 0xfe;
		if(cBit_Counter - 1)
		{	
			cTmp_Data = cData<<1;
			cData = cTmp_Data;	
		}
		cBit_Counter --;
	}
	while(cBit_Counter > 0);
	return(cData);
}

/***********************************************************************************
** Function Name:	EEPROM_Write_Data
** Input Parameters:cAddr:The Address of Data;cData:The Data Write to EEPROM;E2ROMType:EEPROM's Type
** Output Parameters:None
** Implement:Wirte Data to EEPROM
***********************************************************************************/
void	EEPROM_Write_Data(WORD cAddr, BYTE cData, BYTE E2ROMType)
{
	EEPROM_Start();
	EEPROM_Wirte(AddrDevWr);
	EEPROM_ACK();

	if(E2ROMType == M24512)
	{
		EEPROM_Wirte((unsigned char)(cAddr>>8));
		EEPROM_ACK();
	}

	EEPROM_Wirte((unsigned char)cAddr);
	EEPROM_ACK();
	
	EEPROM_Wirte(cData);
	EEPROM_ACK();
	
	EEPROM_Stop();
	TOOL_Delay_MS(12);
}

/***********************************************************************************
** Function Name:	EE_Read_From
** Input Parameters:cAddr:The Address of Data;E2ROMType:EEPROM's Type
** Output Parameters:cData:The Data Need to Read From EEPROM
** Implement:Read Data From EEPROM
***********************************************************************************/
BYTE EEPROM_Read_Data(WORD cAddr, BYTE E2ROMType)
{
	BYTE cData;

	EEPROM_Start();
	EEPROM_Wirte(AddrDevWr);
	EEPROM_ACK();

	if(E2ROMType == M24512)
      {
		EEPROM_Wirte((unsigned char)(cAddr>>8));
		EEPROM_ACK();
      }

	EEPROM_Wirte((unsigned char)cAddr);
	EEPROM_ACK();

	EEPROM_Start();
	EEPROM_Wirte(AddrDevRd);	
	EEPROM_ACK();
	
	cData = EEPROM_Read();	
	EEPROM_SCK = 0;
	EEPROM_NoACK();
	EEPROM_Stop();
	return(cData);
}

/***********************************************************************************
**                            						End Of File										       **
***********************************************************************************/

⌨️ 快捷键说明

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