📄 eeprom_rw.h
字号:
// eeprom duo fa 1 stop 2 kai shi shi xian fa stop zai start
#define false 0
#define true 1
unsigned char reeprom_status;
struct bit_eep
{
unsigned char b0:1;
unsigned char b1:1;
unsigned char b2:1;
unsigned char b3:1;
unsigned char b4:1;
unsigned char b5:1;
unsigned char b6:1;
unsigned char b7:1;
};
union byte_eep
{
struct bit_eep bit;
unsigned char byte;
};
void delay_4()
{;}
void eeprom_start()
{
sclk0=1;
sda0=1;
sdr_clk0=1;
sdr_sda0=1;
sclk0=1;
sda0=1;
delay_4();
sda0=0;
delay_4();
sclk0=0;
delay_4();// add 2003-3-10 long
}
void eeprom_stop()
{
sdr_sda0=1;
sclk0=0;
sda0=0;
delay_4();
sclk0=1;
sda0=1;
delay_4();
}
void eeprom_wb(unsigned char a)
{
unsigned char a1;
union byte_eep eeprom_use;
sdr_sda0=1;
eeprom_use.byte=a;
for(a1=8;a1>0;a1--)
{
sda0=eeprom_use.bit.b7;
delay_4();
sclk0=1;
//delay_4();
eeprom_use.byte=eeprom_use.byte<<1;
sclk0=0;
//delay_4();
}
delay_4();
}
unsigned char eeprom_rb()
{
unsigned char a1;
union byte_eep eeprom_use;
sda0=1;
sdr_sda0=0;
delay_4();
for(a1=8;a1>0;a1--)
{
sclk0=1;
//delay_4();
eeprom_use.byte=eeprom_use.byte<<1;
eeprom_use.bit.b0=sda0;
sclk0=0;
//delay_4();
}
return eeprom_use.byte;
}
unsigned char eeprom_ack()
{unsigned char a;
a=0;
sdr_sda0=0;
delay_4();
sclk0=1;//
//sdr_sda0=0;
//while((a!=100)&&(sda!=0))
//{a++;}
delay_4();
//while(sda0==1)
//{;}
while((a!=30)&&(sda0!=0))
{a++;}
if(a==30)
a=0;
else
a=1;
sclk0=0;
delay_4();
return a;
}
/*
if(sda!=0) {reeprom_status=false;
sdr_sda=1;
sclk=0;
sda=0;
delay_4();
sclk=1;
sda=1;
delay_4();}
else {reeprom_status=true;
sclk=0;
delay_4();
}
}*/
unsigned char read_byte(a,addr)
unsigned char a,addr;
{unsigned char i,l; //a==0 kao lv
l=0;
dr_wp0=1;
wp0=1;
eeprom_stop();
//reeprom_status=true;
eeprom_start();
eeprom_wb(addr);//a2 //eeprom_wb(0xa0|((data_addr.addrc[2]<<1)&0xe));
if(1==eeprom_ack())
//if(reeprom_status==true)
{
eeprom_wb(data_addr.addrc[1]); //eeprom_wb(data_addr.addrc[1]);
if(1==eeprom_ack())
//if(reeprom_status==true)
{
eeprom_wb(data_addr.addrc[0]); //{eeprom_wb(data_addr.addrc[0]);
if(1==eeprom_ack())
// if(reeprom_status==true)
{//eeprom_stop();
eeprom_start();
eeprom_wb(addr|0x1); //a3 //eeprom_wb(0xa1|((data_addr.addrc[2]<<1)&0xe));
if(1==eeprom_ack())
// if(reeprom_status==true)
{
for(i=0;i<a;i++)
{
wr_data[i]=eeprom_rb();
if(i<(a-1))
{//eeprom_ack();
sda0=0;
sdr_sda0=1;
sda0=0;
delay_4();
sclk0=1;
delay_4();
sclk0=0;
sdr_sda0=0;
delay_4();
}
// reeprom_status=true;
// if(reeprom_status==true) continue;
// else i=a;}
else
{// jia fe no ack
sda0=1;
sdr_sda0=1;
sda0=1;
delay_4();
sclk0=1;
delay_4();
sclk0=0;
sdr_sda0=0;
delay_4();
eeprom_stop();
l=1;
}
}
}
else
{
eeprom_stop();
l=0;
}
}
else
{
eeprom_stop();
l=0;
}
}
else
{
eeprom_stop();
l=0;
}
}
else
{
eeprom_stop();
l=0;
}
return l;
}
// kou ling
unsigned char write_byte(a,addr)
unsigned char a,addr;
{unsigned char i,value; //a==0 kao lv
dr_wp0=1;
wp0=0;
if(writecommand==writecommand_eeprom)
{
eeprom_stop();
//reeprom_status=true;
eeprom_start();
eeprom_wb(addr); //a2 //eeprom_wb(0xa0|((data_addr.addrc[2]<<1)&0xe));
if(1==eeprom_ack())
//if(reeprom_status==true)
{
eeprom_wb(data_addr.addrc[1]);
if(1==eeprom_ack())
// if(reeprom_status==true)
{
eeprom_wb(data_addr.addrc[0]);
if(1==eeprom_ack())
// if(reeprom_status==true)
{
value=1;
for(i=0;i<a;i++)
{
eeprom_wb(wr_data[i]);
if(0==eeprom_ack())
{
i=a;
value=0;
}
}
// if(reeprom_status==true) continue;
// else i=a;}
eeprom_stop();
return value;
}
else
{
eeprom_stop();
return 0;
}
}
else
{
eeprom_stop();
return 0;
}
}
else
{
eeprom_stop();
return 0;
}
}
else
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -