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

Parents
  • 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.

Reply
  • 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.

Children
No data