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

No subject

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(); }
} here if i remove the if loop then the problem exist which i had described upside
plzz help me!!!!

Parents
  • I M SORRY THIS IS MY CODE NOW!

    #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();
            }
    }
    

Reply
  • I M SORRY THIS IS MY CODE NOW!

    #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();
            }
    }
    

Children