sbit SDA = PC^4; // Serial Data Address Input/Output
sbit SCL = PC^3; // Serial Clock
//=****************************************************************************
void send_to_mem(char s_address, char s_data)
{
start_EEPROM(); // sending start condition to eeprom
send_EEPROM(0XA0); // A0 = 10100000 = sending device address word for write
acknowledge();
send_EEPROM(s_address); // sending data address
acknowledge();
send_EEPROM(s_data); // sending data
acknowledge();
stop_EEPROM(); // sending stop condition to eeprom
acknowledge();
wait(100);
}
//============================================================================
char get_from_mem(char s_address)
{
char i = 0;
//-------dummy write seq----+ word address------------------------------------
start_EEPROM(); // sending start condition to eeprom
send_EEPROM(0XA0); // sending A0 = 10100000 = device address word for write
acknowledge();
send_EEPROM(s_address); // sending data address
acknowledge();
//----------------dummy over----------------------------------------------------
start_EEPROM();
send_EEPROM(0XA1); // sending A1 =10100001 = device adress word for read
acknowledge();
i = get_EEPROM(); // sending data
acknowledge();
stop_EEPROM(); // sending stop condition to eeprom
acknowledge();
return(i);
}
//============================================================================
void send_EEPROM(char s_byte)
{
char temp = s_byte;
char i ;
for(i = 7 ; i >= 0 ; i--)
{
temp = s_byte;
temp = temp >> i;
temp = temp & 0X01;
if(temp == 0)
SDA = 0;
else
SDA = 1;
SCL = 1;
wait(40);
SCL = 0;
}
}
//============================================================================
char get_EEPROM()
{
char temp, temp_h, i;
temp = 0;
temp_h = 1;
SDA = 1; // making SDA as input pin for microcontroller
SCL = 0;
for(i = 7; i >=0 ; i--)
{
SCL = 1;
if(SDA == 1)
{
temp = temp | temp_h<<i ;
}
wait(40);
SCL = 0;
}
SCL = 0;
return(temp);
}
//============================================================================
void start_EEPROM()
{
SDA = 1;
SCL = 1;
wait(40);
SDA = 0;
SCL = 0;
}
//============================================================================
void stop_EEPROM()
{
SDA = 0;
SCL = 1;
wait(40);
SDA = 1;
SCL = 0;
}
//============================================================================
void acknowledge()
{
SCL = 1;
wait(40);
SCL = 0;
}
//============================================================================
void wait(int i)
{
for(;i>=0;i--)
{
}
}