// This is my Code but i couldn't get output plz verify code and reply me anyone thanks in advance
#include"stdio.h" #include"string.h" #include"sfr_r81b.h" #include"string.h" #define w_address 0x0002; #define write A0; #define read A1; void sett(); unsigned int i=0,k,l=0,x=0; void main(void); void write_eeprom(unsigned char c); void read_eeprom(void); void i2c_write(char c,char addr); void i2c_read(void); void I2C_delay(int l); void start_i(void); void stop(void); void ack(void); void nack(void); void ursett(); //void i2cw(unsigned char k); void eeprom_init(void); unsigned char data,d,z=0; void main(void) { sett(); eeprom_init(); ursett(); i2c_write('A',0x0001); I2C_delay(500); i2c_read();
while(1) {} }
// System Clock settings void sett() { prc0=1; // write enable cm0=0x08; cm13=1; // pin 4_6,4_7 x_in,x_out cm14=1; // low sp.on chip-off for(i=0;i<=255;i++) ocd0=1; ocd1=1; // osci.stop detection function enabled if(ocd3==1) // main clock stop asm("nop"); else asm("nop"); ocd2=0; // switch over to ext clock prc0=0; }
// eeprom settings
void eeprom_init(void) { pd1_3=1; // direction for SDA pd1_1=1; // direction for SCL p1_3=1; // SDA is high p1_1=1; // SCL is high asm("nop"); asm("nop"); }
// Uart1 Settings
void ursett() { ucon=0x30; inten=0x00; u1mr=0x05; u1c0=0x00; ir_s1ric=0; s1ric=0x06; u1brg=0x81; asm("nop"); te_u1c1=1;
}
// Write Function
void i2c_write(char v,char add) { start_i(); write_eeprom(0xA0); // Device Address write A0; ack(); write_eeprom(0x00); // msb ack(); write_eeprom(0x01); // lsb ack(); write_eeprom('A'); // data ack(); stop(); }
// Read Function
void i2c_read(void) { start_i(); write_eeprom(0xA0); //Device Address write A0; ack(); write_eeprom(0x00); // msb //ack(); write_eeprom(0x01); // lsb ack(); //I2C_delay(50); start_i(); write_eeprom(0xA1); // Device Address write A1 ack(); // write_eeprom('A'); // data // nack(); read_eeprom(); nack(); stop(); }
// Write Mode
void write_eeprom(unsigned char d) { unsigned char j; pd1_3=1; for(j=0;j<8;j++) { if((d & 0x80)==0x80) { I2C_delay(15); p1_3=1; } else if((d & 0x80)==0x00) { I2C_delay(15); p1_3=0; } I2C_delay(15); p1_1=1; I2C_delay(15); p1_1=0; I2C_delay(15); d=d<<1; } I2C_delay(30); p1_3=0; I2C_delay(15); p1_3=1; }
// Read Mode
void read_eeprom(void) { unsigned char b=0; unsigned char r=0x00; pd1_3=0; for(b=0;b<8;b++) { I2C_delay(15); r=r<<1; r!=p1_3; p1_1=1; I2C_delay(15); p1_1=0; I2C_delay(15); } pd1_3=1; I2C_delay(15); p1_3=1; I2C_delay(15); p1_1=1; data=r; te_u1c1=1; u1tb=data; while(!ti_u1c1);
// Start Condition
void start_i(void) {
if(p1_1 == 1) p1_1 = 0; I2C_delay(30); p1_3 = 1; // i2c start bit sequence p1_1 = 1; I2C_delay(30); p1_3 = 0; I2C_delay(30); p1_1 = 0;
// Stop Condition
void stop(void) { if(p1_1 == 1) p1_1 = 0; I2C_delay(30); p1_3 = 0; // i2c stop bit sequence p1_1 = 1; I2C_delay(30); p1_3 = 1; I2C_delay(30); }
// Acknowledge Condition
void ack(void) { pd1_3 = 1; p1_3=0; //make ack bit to low I2C_delay(30); p1_1=1; // Check acknowledge I2C_delay(30); p1_1=0; }
// Non Acknowledge Condition
void nack(void) { pd1_3 = 1; p1_3=1; //make ack bit to low I2C_delay(30); p1_1=1; //Check acknowledge I2C_delay(30); p1_1=0;
// I2C_delay function
void I2C_delay(int q) { int k=0,i=0; for(k=0;k<q;k++) { for(i=0;i<50;i++); }