Sir, I am trying to write 34 into the eeprom at address location 0x0000, but whenever I read and dislpay it on lcd, 49 is displayed. please help me.
my code
sbit SCL=P3^7; // Port pin for SCL line sbit SDA=P3^6; // Port pin for SDA line
void i2c_delay(void); // I2C Clock delay void i2c_start(void); // Generates a I2C Start condition void i2c_stop(void); // Generates a I2C Stop condition void i2c_wbyte(char i2c_wb); // Writes a single byte from I2C Slave unsigned char i2c_rbyte(void); // Reads and returns a single byte from I2C Slave char i2c_ack(void); void i2c_nack(void); void i2c_write(char id, char add,char dat); unsigned char i2c_read(char id,char add);
void i2c_delay(void) { char a; for(a=0;a<80;a++); }
void i2c_start(void) { SCL = 1; i2c_delay(); SDA = 1; i2c_delay(); SDA = 0; i2c_delay(); SCL = 0; i2c_delay(); }
void i2c_stop(void) { //SDA_Dir = 1; //SDA pin as output SDA = 0; i2c_delay(); SCL = 1; i2c_delay(); SDA = 1; i2c_delay(); SCL = 0; }
void i2c_wbyte(unsigned char i2c_wb) { char a; //DA_Dir = 1; // Set SDA pin as output for(a=0;a<8;a++) // Send 8 bits { SCL = 0; i2c_delay(); if(i2c_wb & (0x80 >> a)) { SDA = 1; } else { SDA = 0; } i2c_delay(); SCL = 1; i2c_delay(); }
}
unsigned char i2c_rbyte(void) { char a; unsigned char b; b=0; //SDA_Dir = 0; // Set SDA pin as input for(a=0;a<8;a++) { SCL = 1; i2c_delay(); if(SDA) { b |= (0x80 >> a); // Set data bit on SDA line } i2c_delay(); SCL = 0; i2c_delay(); } return(b); } char i2c_ack(void) { char a; //SDA_Dir = 1; // Set SDA pin as output i2c_delay(); SCL = 0; i2c_delay(); SDA = 1; i2c_delay(); SCL = 1; i2c_delay();
//SDA_Dir = 0; // Set SDA pin as input i2c_delay(); a = SDA; i2c_delay(); SCL = 0; i2c_delay(); return(a); }
void i2c_nack(void) { //SDA_Dir = 1; // Set SDA pin as output SDA = 1; i2c_delay(); SCL = 1; i2c_delay(); SCL = 0; i2c_delay(); } void i2c_write(unsigned char id, unsigned char add, unsigned char dat) { i2c_start(); i2c_wbyte(id); i2c_ack(); i2c_wbyte(add); i2c_ack(); i2c_wbyte(dat); i2c_ack(); i2c_stop(); }
unsigned char i2c_read(unsigned char id,unsigned char add) { unsigned char rd; i2c_start(); i2c_wbyte(id); i2c_ack(); i2c_wbyte(add); i2c_ack(); i2c_start(); i2c_wbyte((id|0x01)); i2c_ack(); rd = i2c_rbyte(); i2c_nack(); i2c_stop(); return(rd); } main() { unsigned char v=34; unsigned char dat=0; i2c_write(0xA0,0x0000,v); dat=i2c_read(0xA0,0x0000); send2lcd(dat); } the delay between read and write correct? the delay between scl and sda line, is ok? please help me
thanks in advance
So why did you jump into your old thread about i2c suddenly?
And why do you continue to #include a C file despite having been told not to?
So why did you jump into your old thread about i2c suddenly? and why did you not see what happened using your? (intentional question mark) LCD routines to display a constant to DIVIDE AND CONQUER.
I am getting a suspicion that you threw some code collected from the internet together and have no idea how to make it work.
Erik