This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

pls help for i2c programming

hey i hav written code 4 i2c programming...bt cnt read d data i hav written...pls help me as soon as possible...
here is my code...




#include<reg51.h>
#define EEPROMS_ID 0xA0 /* Microchip 24xx512 */  //64k rom 24c16
sbit dbit=ACC^7;
sbit SDA=P2^2; /* Set P3.2 = SDA */
sbit SCL=P2^3; /* Set P3.3 = SCL */


void I2C_stop(void)
{
 unsigned char j;
 SDA = 0; /* Clear SDA */
  for(j=0;j<=17;j++);
 SCL = 1; /* Set SCL */
  for(j=0;j<=17;j++);
 SDA = 1; /* Set SDA */
}




I2C_write(unsigned char dat)
{
bit data_bit;
unsigned char i,j;



 SDA = 1; /* Set SDA */
 for(j=0;j<=4;j++);
 SCL = 1; /* Set SCL */
 for(j=0;j<=17;j++);
 SDA = 0; /* Clear SDA */
 for(j=0;j<=17;j++);
 SCL = 0; /* Clear SCL */
  for(j=0;j<=17;j++);

ACC=dat;
//repeat:
for(i=0;i<8;i++) /* For loop 8 time(send data 1 byte) */
{
 data_bit = dbit; /* Filter MSB bit keep to data_bit */
 SDA = data_bit; /* Send data_bit to SDA */
  SCL = 1; /* Set SCL */
 for(j=0;j<=17;j++);
  SCL = 0; /* Set SCL */
  for(j=0;j<=17;j++);
 ACC = ACC<<1;
}

SDA = 1; /* Set SDA */
 for(j=0;j<=4;j++);
SCL = 1; /* Set SCL */
 for(j=0;j<=17;j++);
data_bit = SDA; /* Check acknowledge */
SCL = 0; /* Clear SCL */
 for(j=0;j<=17;j++);
//if(data_bit!=0)
//goto repeat;
}



I2C_write1(unsigned char dat)
{
bit data_bit;
unsigned char i,j;
ACC=dat;

//repeat:
for(i=0;i<8;i++) /* For loop 8 time(send data 1 byte) */
{
 data_bit = dbit; /* Filter MSB bit keep to data_bit */
 SDA = data_bit; /* Send data_bit to SDA */
  SCL = 1; /* Set SCL */
 for(j=0;j<=17;j++);
  SCL = 0; /* Set SCL */
  for(j=0;j<=17;j++);
 ACC = ACC<<1;
}

SDA = 1; /* Set SDA */
 for(j=0;j<=4;j++);
SCL = 1; /* Set SCL */
 for(j=0;j<=17;j++);
data_bit = SDA; /* Check acknowledge */
SCL = 0; /* Clear SCL */
 for(j=0;j<=17;j++);
//if(data_bit!=0)
//goto repeat;
}


I2C_read()
{

unsigned char i,j,data_in;

SDA = 1; /* Set SDA */

for(i=0;i<8;i++) /* For loop 8 time(send data 1 byte) */
{
//SCL = 0; /* Clear SCL */
//for(j=0;j<=17;j++);
SCL = 1; /* Clear SCL */
for(j=0;j<=17;j++);
dbit = SDA; /* Filter MSB bit keep to data_bit */
 ACC = ACC>>1;
 SCL = 0; /* Clear SCL */
 for(j=0;j<=17;j++);
}
//SCL = 0; /* Clear SCL */
data_in=ACC;

SDA = 1; /* Set SDA */
 for(j=0;j<=4;j++);
SCL = 1; /* Set SCL */
 for(j=0;j<=17;j++);
SCL = 0; /* Clear SCL */
 for(j=0;j<=17;j++);
return data_in;

}





 void EEPROM_set(unsigned char addr, unsigned char val)         //write the data
{
 I2C_write(EEPROMS_ID); /* Connect to EEPROM */

 I2C_write1(addr);

 I2C_write1(val); /* Write sec on RAM specified address */

 I2C_stop();
}


EEPROM_get(unsigned char addr)          //random read function
{
 char rdcmd,dat_read;

 I2C_write(EEPROMS_ID); /* Connect to EEPROM */

 I2C_write1(addr);

 rdcmd=EEPROMS_ID+1;

 I2C_write(rdcmd);

 dat_read=I2C_read();

 I2C_stop();

 return dat_read;
}


void main()
{
 unsigned char data_wrt,dt_read,j;
 unsigned char address_read,address_wrt;
 data_wrt=0xf0;
 address_read=0x01;
 address_wrt=0x01;


 EEPROM_set(address_wrt,data_wrt);
 for(j=0;j<=200;j++);
 dt_read=EEPROM_get(address_read);
 while(1)
 P1=dt_read;

}





















pls rply as soon as possible.....