📄 eprom.h
字号:
/********************************************************************************************************
Following function is used to
********************************************************************************************************/
sbit scl=P1^1;
sbit sda=P1^2;
sbit WP=P1^0;
#define true 1
#define false 0
void masterack(void)
{
scl=0;
ee_delay();
sda=0;
ee_delay();
scl=1;
ee_delay();
scl=0;
}
void ee_delay(void)
{
byte delay11;
for(delay11=0;delay11<2;delay11++);
}
void ee_start(void)
{
// make scl and sda outputs
sda=0;
ee_delay();
scl=1;
ee_delay();
sda=1;
ee_delay(); // stop condition
sda=0;
ee_delay(); // start condition
}
bit ack(void)
{
scl=0; // acknowledge
ee_delay();
// sda input
ee_delay();
scl=1;
ee_delay(); // test acknowledge
return(sda);
}
void ee_data(byte *x)
{
int ij;
//sda input
sda=1;
*x=0;
ij=0x80;
do
{
scl=0;
ee_delay();
scl=1;
ee_delay();
if (sda)
*x=(*x)|ij;
ij>>=1;
}while(ij!=0);
}
void ee_byte(byte x)
{
int ii;
//sda input
ii=0x80;
do
{
scl=0;
sda=0; // sda output
ee_delay();
if (x&ii)
sda=1;
else
sda=0;
ee_delay();
scl=1;
ee_delay();
ii>>=1;
}while(ii!=0);
}
bit ee_byte_to_ee (byte address, byte msbyte)
{
// Returns true if write was succesfully acknowledge
ee_start();
ee_byte(0xa0);
if(ack() ) return(false);
ee_byte(address);
if(ack() ) return(false);
ee_byte(msbyte);
if(ack() ) return(false);
scl=0;
ee_delay();
sda=0;
ee_delay();
scl=1;
ee_delay();
sda=1;
ee_delay();
return(true);
}
bit ee_byte_from_ee (byte address, byte *msbyte)
{
// Returns true if read was succesfully acknowledge
ee_start();
ee_byte(0xa0);
if(ack() ) return(false);
ee_byte(address);
if(ack() ) return(false);
scl=0;
ee_delay();
scl=1;
ee_delay();
sda=0;
ee_delay();
ee_byte(0xa1);
if(ack() ) return(false);
ee_data(msbyte);
masterack();
ack();
scl=0;
ee_delay();
sda=0;
ee_delay();
scl=1;
ee_delay();
sda=1;
ee_delay();
return(true);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -