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 in reading and sending data in eeprom using 8051(code given below)

//Program to display String on LCD

//Program to interface Serial EEPROM AT24C02 with 8051 microcontroller (AT89C51)
#include<reg51.h>
#include<intrins.h> //For using [_nop_()]

sbit sda=P1^0;
sbit scl=P1^1;
sbit led=P0^1;
bit ack;
sbit led1=P0^2;
sbit sav=P0^4;
sbit up=P0^5;
sbit down=P0^6;
sfr lcd_data_pin=0xA0;//p2 port
sfr output=0x80;//p0 port
sbit rs=P3^1;

sbit en=P3^0;
unsigned char reead,write;
unsigned int temp,new_value1,new_value,test=0,num=0,i,j;
void init() // to initialize the output pins and Timer0
{ up=down=1;

TMOD=0x01;
TL0=0xf6;
TH0=0xFf;
IE=0x82;
TR0=1;
} 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; delay(1); en=0;
} void lcd_data(unsigned char disp)
{ lcd_data_pin=disp; en=1; rs=1; delay(1); en=0;
} lcd_strng(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 int value) //send byte serially
{

unsigned int i; unsigned int 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
{ init(); while(1) { if(up==0&&down==1) //check if up pin is pressed { test++; num=test; new_value=num%10; num=num/10; if(test==9) test=0;

} if(up==1&&down==0) //check if down pin is pressed { test--; num=test; new_value=num%10; num=num/10; if(test==0) test=9;

}

start(); send_byte(0xA0); //device address aknowledge(); send_byte(0x00); //word address aknowledge(); send_byte(new_value); //send data aknowledge(); stop(); if(ack==0) { /* new_value1=new_value1+48; */ led1=1; delay(100); led1=0; delay(100); lcd_command(0x86); lcd_data(new_value);

} 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(); stop(); if(i==new_value) { led=0; delay(100); led=1; delay(100); write=i+48; lcd_command(0xC6); lcd_data(write); } else led=1;

aknowledge();
}

void main()
{ lcd_ini();

lcd_strng("Sent :"); lcd_command(0xC0); lcd_strng("Read :"); temp=0; while(1) { save(); Read(); } }

Parents
  • 
    
    //Program to display String on LCD
    
    //Program to interface Serial EEPROM AT24C02 with 8051 microcontroller (AT89C51)
    #include<reg51.h>
    #include<intrins.h> //For using [_nop_()]
    
    sbit sda=P1^0;
    sbit scl=P1^1;
    sbit led=P0^1;
    bit ack;
    sbit led1=P0^2;
    sbit sav=P0^4;
    sbit up=P0^5;
    sbit down=P0^6;
    sfr lcd_data_pin=0xA0;//p2 port
    sfr output=0x80;//p0 port
    sbit rs=P3^1;
    
    sbit en=P3^0;
    unsigned char reead,write;
    unsigned int temp,new_value1,new_value,test=0,num=0,i,j;
    void init() // to initialize the output pins and Timer0
    { up=down=1;
    
    TMOD=0x01;
    TL0=0xf6;
    TH0=0xFf;
    IE=0x82;
    TR0=1;
    } 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; delay(1); en=0;
    } void lcd_data(unsigned char disp)
    { lcd_data_pin=disp; en=1; rs=1; delay(1); en=0;
    } lcd_strng(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 int value) //send byte serially
    {
    
    unsigned int i; unsigned int 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
    { init(); while(1) { if(up==0&&down==1) //check if up pin is pressed { test++; num=test; new_value=num%10; num=num/10; if(test==9) test=0;
    
    } if(up==1&&down==0) //check if down pin is pressed { test--; num=test; new_value=num%10; num=num/10; if(test==0) test=9;
    
    }
    
    start(); send_byte(0xA0); //device address aknowledge(); send_byte(0x00); //word address aknowledge(); send_byte(new_value); //send data aknowledge(); stop(); if(ack==0) { /* new_value1=new_value1+48; */ led1=1; delay(100); led1=0; delay(100); lcd_command(0x86); lcd_data(new_value);
    
    } 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(); stop(); if(i==new_value) { led=0; delay(100); led=1; delay(100); write=i+48; lcd_command(0xC6); lcd_data(write); } else led=1;
    
    aknowledge();
    }
    
    void main()
    { lcd_ini();
    
    lcd_strng("Sent :"); lcd_command(0xC0); lcd_strng("Read :"); temp=0; while(1) { save(); Read(); } }
    
    
    
    If you can not follow instructions, then do not post here
    
    The 'stuff' in your post as shown is NOT (code given below) but a collection of random stuff.
    
    Did you not wonder when you did the preview if anyone could make heads or tail of what you posted?
    
    Is it REALLY that big a deal to follow the instructions above the entry window?
    
    Erik
    
    
    

Reply
  • 
    
    //Program to display String on LCD
    
    //Program to interface Serial EEPROM AT24C02 with 8051 microcontroller (AT89C51)
    #include<reg51.h>
    #include<intrins.h> //For using [_nop_()]
    
    sbit sda=P1^0;
    sbit scl=P1^1;
    sbit led=P0^1;
    bit ack;
    sbit led1=P0^2;
    sbit sav=P0^4;
    sbit up=P0^5;
    sbit down=P0^6;
    sfr lcd_data_pin=0xA0;//p2 port
    sfr output=0x80;//p0 port
    sbit rs=P3^1;
    
    sbit en=P3^0;
    unsigned char reead,write;
    unsigned int temp,new_value1,new_value,test=0,num=0,i,j;
    void init() // to initialize the output pins and Timer0
    { up=down=1;
    
    TMOD=0x01;
    TL0=0xf6;
    TH0=0xFf;
    IE=0x82;
    TR0=1;
    } 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; delay(1); en=0;
    } void lcd_data(unsigned char disp)
    { lcd_data_pin=disp; en=1; rs=1; delay(1); en=0;
    } lcd_strng(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 int value) //send byte serially
    {
    
    unsigned int i; unsigned int 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
    { init(); while(1) { if(up==0&&down==1) //check if up pin is pressed { test++; num=test; new_value=num%10; num=num/10; if(test==9) test=0;
    
    } if(up==1&&down==0) //check if down pin is pressed { test--; num=test; new_value=num%10; num=num/10; if(test==0) test=9;
    
    }
    
    start(); send_byte(0xA0); //device address aknowledge(); send_byte(0x00); //word address aknowledge(); send_byte(new_value); //send data aknowledge(); stop(); if(ack==0) { /* new_value1=new_value1+48; */ led1=1; delay(100); led1=0; delay(100); lcd_command(0x86); lcd_data(new_value);
    
    } 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(); stop(); if(i==new_value) { led=0; delay(100); led=1; delay(100); write=i+48; lcd_command(0xC6); lcd_data(write); } else led=1;
    
    aknowledge();
    }
    
    void main()
    { lcd_ini();
    
    lcd_strng("Sent :"); lcd_command(0xC0); lcd_strng("Read :"); temp=0; while(1) { save(); Read(); } }
    
    
    
    If you can not follow instructions, then do not post here
    
    The 'stuff' in your post as shown is NOT (code given below) but a collection of random stuff.
    
    Did you not wonder when you did the preview if anyone could make heads or tail of what you posted?
    
    Is it REALLY that big a deal to follow the instructions above the entry window?
    
    Erik
    
    
    

Children
  • So you take the already destroyed code from the first post, and pasted into a new post - new with tags?

    Don't you think that is pointless, since the indentation information have already been lost? What was wrong with copying your source code from the editor, and paste - using proper tags?

    Next thing - why did you continue your post with including Erik's text within the "pre" tags?

    Do you notice how totally broken this thread looks low, because someone (that would be you) have made a post, where you pasted "source code" that have lines that are several hundred characters long? Looking good? Feeling you have done a proper job? Nothing strange at all visible on the preview?

    Now, who do you think will care about looking at your "code" and help you, when you don't care the slightest about the instructions given?