📄 eeprom驱动.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 + -