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

PROBLEM FOR READING THE VALUE FROM MEMORY(24C02)

i am getting problem in reading the value from 24c02 with 8051!
i am getting one time original value which is present in the memory and other time when once again loop is executed,i am getting value like"///"and all that.i am getting alternate value of these two whenever loop is executed.

my programm is as shown below!

#include<reg51.h>
#include<intrins.h> //For using [_nop_()]
sbit sda=P1^0;
sbit scl=P1^1;
sbit led=P0^3;
bit ack;
sbit led1=P0^1;
sfr lcd_data_pin=0xA0;//p2 port
sfr output=0x80;//p0 port
sbit rs=P3^0;
sbit rw=P3^1;
sbit en=P3^6;
unsigned char reead,write,write2,i,j;
unsigned int temp;
void delay(unsigned int count)
{ int i,j; for(i=0;i<count;i++) for(j=0;j<1275;j++);
} void lcd_command(unsigned char comm)
{ lcd_data_pin=comm; en=1; rs=0; rw=0; delay(1); en=0;
} void lcd_data(unsigned char disp)
{ lcd_data_pin=disp; en=1; rs=1; rw=0; delay(1); en=0;
} lcd_dataa(unsigned char *disp)
{ int x; for(x=0;disp[x]!=0;x++) { lcd_data(disp[x]); }
} void lcd_ini()
{ lcd_command(0x38); // for using 8-bit 2 row LCD delay(5); lcd_command(0x0F); // for display on, cursor blinking delay(5); lcd_command(0x80); delay(5);
} void aknowledge() //acknowledge condition
{ scl=1; _nop_(); _nop_(); scl=0;
} void start() //start condition
{ sda=1; scl=1; _nop_(); //No operation _nop_(); sda=0; scl=0;
} void stop() //stop condition
{ sda=0; scl=1; _nop_(); _nop_(); sda=1; scl=0;
} void send_byte(unsigned char value) //send byte serially
{ unsigned int i; unsigned char send; send=value; for(i=0;i<8;i++) { sda=send/128; //extracting MSB send=send<<1; //shiftng left scl=1; _nop_(); _nop_(); scl=0; } ack=sda; //reading acknowledge sda=0;
} unsigned char read_byte() //reading from EEPROM serially
{ unsigned int i; sda=1; reead=0; for(i=0;i<8;i++) { reead=reead<<1; scl=1; _nop_(); _nop_(); if(sda==1) reead++; scl=0; } sda=0; return reead; //Returns 8 bit data here
} void save() //save in EEPROM
{ start(); send_byte(0xA0); //device address aknowledge(); send_byte(0x00); //word address aknowledge(); send_byte(5); //send data aknowledge(); send_byte(65); aknowledge(); stop(); if(ack==0) { led1=1; delay(100); led1=0; delay(100); lcd_command(0x86); lcd_data('5'); lcd_command(0x87); lcd_data('A'); } else led1=1; aknowledge();
} void Read()
{ start(); send_byte(0xA0); aknowledge(); send_byte(0x00); aknowledge(); start(); send_byte(0xA1); //device address aknowledge(); i=read_byte(); aknowledge(); j=read_byte(); aknowledge(); stop(); if(i==5) { led=0; delay(100); led=1; delay(100); write=i+48; lcd_command(0xC6); lcd_data(write); } else led=1; if(j==65) { lcd_command(0xC7); lcd_data(j); } aknowledge();
}

void main()
{ lcd_ini(); lcd_dataa("Sent :"); lcd_command(0xC0); lcd_dataa("Read :"); temp=0; while(1) { save(); Read(); }
} whenever the data is not compared in the read loop the problem exist which is shown upwards!
so plzz help me!!!!1

  • So you need two attempts just to manage to supply a subject?

    But two attempts wasn't enough to notice that your code isn't readable because you failed to surround the code with the proper <pre>(code)</pre> tags?

    I suspect this care for details likely have affected the code you produced too. And the care when you debugged your code to figure out is wrong with it.