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