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.....
hey der r devts $1 -up wt IIC yeahs wy r u sss wt xxx
I hope you read with this as much difficulty as I had reading your gobbelygook.
Erik
The OP actually posted a question signing with his email address. Now that is a thick clue! Who said you don't learn something new every day!