/************************************************************************* * Name : serial_eeprom.c * * Author : Rajesh Bhandari 09423207019 * * Date : 13 / apr / 2009 * * Summary : this file contains the definitions of all * * the functions required to store data into, * * in serial eeprom of 24CXX series and to * * get the data back from the eeprom * *************************************************************************/ //---------------------------------Defining Macros--------------------------------------------------------------------------- sbit sda = P3^6; //P3^2;//P1^1; sbit sclk = P3^7; //P3^3;//P1^0; //--------------------------------------------------------------------------------------------------------------------------- //---------------------------------FXN prototypes---------------------------------------------------------------------------- void start_s_eeprom(); void send_byte_s_eeprom(char); char get_byte_s_eeprom(); void stop_s_eeprom(); void send_to_mem(char, char); unsigned int get_from_mem(char); void wait(); void acknowledge(); //--------------------------------------------------------------------------------------------------------------------------- //-----------------fxn to send data to serial eeprom------------------------------------------------------------------------- // give the adress and the data as the parametrs to the fxn void send_to_mem(char s_address, char s_data) { start_s_eeprom(); // sending start condition to eeprom send_byte_s_eeprom(0XA0); // A0 = 10100000 = sending device address word for write acknowledge(); send_byte_s_eeprom(s_address); // sending data address acknowledge(); send_byte_s_eeprom(s_data); // sending data acknowledge(); stop_s_eeprom(); // sending stop condition to eeprom acknowledge(); return; } //--------------------------------------------------------------------------------------------------------------------------- //------------------fxn to get the data back frm the serial eeprom----------------------------------------------------------- // just give the adress from where the data is to be retrieved unsigned int get_from_mem(char s_address) { char i = 0; //-------dummy write seq----+ word address------------------------------------ start_s_eeprom(); // sending start condition to eeprom send_byte_s_eeprom(0XA0); // sending A0 = 10100000 = device address word for write acknowledge(); send_byte_s_eeprom(s_address); // sending data address acknowledge(); //----------------dummy over---------------------------------------------------- start_s_eeprom(); send_byte_s_eeprom(0XA1); // sending A1 =10100001 = device adress word for read acknowledge(); i = get_byte_s_eeprom(); // sending data acknowledge(); stop_s_eeprom(); // sending stop condition to eeprom acknowledge(); return(i); } //--------------------------------------------------------------------------------------------------------------------------- //----------------------fxn to transmit a byte to the eeprom ---------------------------------------------------------------- //this fxn just send the 8 bits serialy on the SDA line //this fnx does not store the data in eeprom but just transmits it, this fxn is used by the storing fxn //just pass the byte to be transmitted as parameter to this fxn void send_byte_s_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; sclk = 1; wait(); sclk = 0; } return; } //--------------------------------------------------------------------------------------------------------------------------- //---------------------------fxn to receive 8 bits serialy from sda line----------------------------------------------------- // this is not a fxn to read from eeprom // it just receives 8 bits serialy and retuns the byte received to the calling fxn char get_byte_s_eeprom() { char temp, temp_h, i; temp = 0; temp_h = 1; sda = 1; // making SDA as input pin for microcontroller sclk = 0; for(i = 7; i >=0 ; i--) { sclk = 1; if(sda == 1) { temp = temp | temp_h<