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

📄 eeprom驱动.h

📁 C语言编写的24CXX EEprom存储器I2C驱动程序
💻 H
字号:
/*******************************************************************************************
端口定义
*******************************************************************************************/
sbit SDA	=P3^0;
sbit SCK	=P3^1;
/*******************************************************************************************
函数说明
eeprom擦除函数
void EraseEeprom(uchar EepromAddr,uchar EraseTimes)
写Eeprom函数
void Eeprom_write_block(uchar *VariableAddr,uchar EepromAddr,uchar WriteTimes)
读Eeprom函数
void Eeprom_read_block(uchar *VariableAddr,uchar EepromAddr,uchar ReadTimes)
*******************************************************************************************/
#define uchar	unsigned char
#define uint	unsigned int

#include <EEprom地址分配表.h>

/*******************************************************************************************
** 函数名称: EepromShin(void)
** 功能描述: Eeprom读操作
*******************************************************************************************/
uchar EepromShin(void)
{
	uchar Data=0;
	uchar Times=8;
	SDA=1;
	for(;Times!=0;Times--)
		{
		Data<<=1;
		_nop_();
		_nop_();
		_nop_();
		SCK=1;
		_nop_();
		_nop_();
		if(SDA)Data|=0x01;
		SCK=0;
		}
	return(Data);
}
/*******************************************************************************************
** 函数名称: EepromAck(void)
** 功能描述: EepromAck信号
*******************************************************************************************/
void EepromAck(void)
{
	SDA=0;
	_nop_();
	_nop_();
	SCK=1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	SCK=0;
}
/*******************************************************************************************
** 函数名称: EepromNak(void)
** 功能描述: EepromNak信号
*******************************************************************************************/
void EepromNak(void)
{
	SDA=1;
	_nop_();
	_nop_();
	SCK=1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	SCK=0;
}
/*******************************************************************************************
** 函数名称: EepromStartSignal
** 功能描述: Eeprom启动信号
*******************************************************************************************/
void EepromStartSignal(void)
{
		SDA=1,SCK=1;
		_nop_();
		SDA=0;
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		SCK=0;
}
/*******************************************************************************************
** 函数名称: EepromStopSignal
** 功能描述: Eeprom停止信号
*******************************************************************************************/
void EepromStopSignal(void)
{
	SDA=0;
	_nop_();
	SCK=1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	SDA=1;
}

/*******************************************************************************************
** 函数名称: EepromDataSend
** 功能描述: Eeprom数据发送
*******************************************************************************************/
void EepromDataSend(uchar Data)
{
	uchar Times=8;
	for(;Times!=0;Times--)
		{
		if(Data&0x80)SDA=1;
		else SDA=0;
		_nop_();
		SCK=1;
		_nop_();
		_nop_();
		_nop_();
		_nop_();
		SCK=0;
		Data=Data<<1;
		}
	SDA=1;
	_nop_();
	_nop_();
	SCK=1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();
	if(SDA)SCK=0;
	SCK=0;
}
/*******************************************************************************************
** 函数名称: EepromAddrSet
** 功能描述: Eeprom地址设置
*******************************************************************************************/
void EepromAddrSet(uchar EepromAddr)
{
	uchar I2cFaddr;
	I2cFaddr=0xa4;
	EepromStartSignal();//启动I2C总线
	EepromDataSend(I2cFaddr&0xfe);
	EepromDataSend(EepromAddr);	
}
/*******************************************************************************************
** 函数名称: Eeprom_read_block
** 功能描述: 读Eeprom程序
*******************************************************************************************/
void Eeprom_read_block(uchar *VariableAddr,uchar EepromAddr,uchar ReadTimes)
{
	uchar I2cFaddr;
	
	I2cFaddr=0xa4;
	for(;ReadTimes!=0;ReadTimes--)
		{
		EepromAddrSet(EepromAddr++);
		EepromStartSignal();//启动I2C总线
		EepromDataSend(I2cFaddr|0x01);
		_nop_();
		_nop_();
		*VariableAddr++=EepromShin();
		}
	EepromNak();
	EepromAck();
	EepromStopSignal();
}
/*******************************************************************************************
** 函数名称: Eeprom_write_block
** 功能描述: 写Eeprom程序
*******************************************************************************************/
void Eeprom_write_block(uchar *VariableAddr,uchar EepromAddr,uchar WriteTimes)
{
	for(;WriteTimes!=0;WriteTimes--)
		{
		SDA=1,SCK=1;
		EepromAddrSet(EepromAddr++);
		EepromDataSend(*VariableAddr++);
		EepromStopSignal();
		Delay_ms(3);//3ms
		}
}
/*******************************************************************************************
** 函数名称: EraseEeprom()
** 功能描述: 擦除EEprom
*******************************************************************************************/
void EraseEeprom(uchar EepromAddr,uchar EraseTimes)
{
	for(;EraseTimes!=0;EraseTimes--)
		{
		SDA=1,SCK=1;
		EepromAddrSet(EepromAddr++);
		EepromDataSend(0x00);
		EepromStopSignal();
		Delay_ms(10);//10ms
		}
}

⌨️ 快捷键说明

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