📄 eeprom.h
字号:
#include<def.h>
#define oneeprom 1
#define time 1
#define icaddress_w 0xa0
#define icaddress_r 0xa1
#define wordaddress 0x00
#define parameter 0xaa
//-----------------------------------------------发送开始信号-------------------------------------------------------------------
void sendstart()
{
SDA=1;
SCLK=1;
_delay_us(time);
SDA=0;
_delay_us(time);
SCLK=0;
_delay_us(time);
}
//-----------------------------------------------发送结束信号-------------------------------------------------------------------
void sendend()
{
SDA=0;
SCLK=0;
_delay_us(time);
SCLK=1;
_delay_us(time);
SDA=1;
_delay_us(time);
}
//-----------------------------------------------发送ACK信号--------------------------------------------------------------------
void sendack_eeprom()
{
SDA=0;
SCLK=0;
_delay_us(time);
SDA=1; //释放数据线,交给24CO1控制
while(SDA==1); //等待SDA=0
//发送一个时钟
SCLK=1;
_delay_us(time);
SCLK=0;
_delay_us(time);
}
//-----------------------------------------------发送8bit数据--------------------------------------------------------------------
void sendbyte(uchar sdata)
{
uchar i; //控制循环次数
SCLK=0;
SDA=0;
_delay_us(time);
for(i=1;i<=8;i++)
{
if((sdata&0x80)==0x80) //高位在前
{
SDA=1;
_delay_us(time);
SCLK=1;
}
else
{
SDA=0;
_delay_us(time);
SCLK=1;
}
_delay_us(time);
SCLK=0;
_delay_us(time);
SDA=0;
sdata=sdata<<1;
_delay_us(time);
}
}
//-----------------------------------------------读8bit数据--------------------------------------------------------------------
uchar readbyte()
{
uchar i,sdata; //i控制循环次数,sdata临时数据寄存器
sdata=0;
SCLK=0;
SDA=0;
_delay_us(time);
SDA=1; //释放数据线
for(i=1;i<=8;i++)
{
SCLK=1;
_delay_us(time);
if(SDA==1) //高位在前
{
sdata=sdata&&0xff;
}
else
{
sdata=sdata&&0xfe;
}
SCLK=0;
_delay_us(time);
sdata=sdata<<1;
}
SCLK=0;
SDA=0;
return (sdata);
}
//------------------------------------------------读eeprom----------------------------------------------------------------
void writeeeprom()
{
//写一字节数据到指定的地址单元
sendstart();
sendbyte(icaddress_w);
sendack_eeprom();
sendbyte(wordaddress);
sendack_eeprom();
sendbyte(parameter);
sendack_eeprom();
sendend();
_delay_ms(10);
}
//------------------------------------------------写eeprom----------------------------------------------------------------
uchar readeeprom()
{
uchar readdata=0;
//从指定的地址单元读一字节数据
sendstart();
sendbyte(icaddress_w);
sendack_eeprom();
sendbyte(wordaddress);
sendack_eeprom();
sendstart();
sendbyte(icaddress_r);
sendack_eeprom();
readdata=readbyte();
sendend();
return (readdata);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -