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 multiple character from 24c08

Hey, i have written code for i2c program for 24c08 with my uc 89c51.....If i am writing single character and then reading to the lcd then i am getting proper response but if i am writing string of character one by one then i am only getting last character of string at the lcd........

pls help me...
Here is my code:


#include<reg51.h>
sfr lcddata=0xa0;
sbit rs=P0^7;
sbit e=P0^6;

#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit SCL=P3^3;
sbit SDA=P3^2;

void delay_s(uchar n)
        {
        uint i;
        uchar j;
        for(j=0;j<n;j++)
                for(i=0;i<6000;i++);
        }

void sta()
        {
        SDA=1;
        SCL=1;
        _nop_();
        SDA=0;
        _nop_();
        SCL=0;
        }

void stop( )
        {
        SDA=0;
        SCL=1;
        delay_s(1);
        SDA=1;
        delay_s(1);
        }

void mack( )
        {
        SDA=0;
        SCL=1;
        _nop_();
        SCL=0;
        SDA=1;
        }

void mnack( )
        {
        SDA=1;
        SCL=1;
        _nop_();
        SCL=0;
        SDA=0;
        }

void cack( )
        {
        SDA=1;
        SCL=1;
        F0=0;
        if(SDA==1)
        F0=1;
        SCL=0;
        _nop_( );
        }


void wrbyt(uchar shu)
        {
        uchar i;
        for(i=0;i<8;i++)
                {
                if((shu&0x80)>0)
                        {
                        SDA=1;
                        SCL=1;
                        _nop_();
                        SCL=0;
                        SDA=0;
                        }
                else
                        {
                        SDA=0;
                        SCL=1;
                        _nop_();
                        SCL=0;
                        }
                shu=shu<<1;
                }
        }


uchar rdbyt( )
        {
        uchar nn=0xff,mm=0x80,uu=0x7f;
        uchar j;
        for(j=0;j<8;j++)
                {
                SDA=1;
                SCL=1;
                if(SDA==0)
                        {nn=(nn&uu);}
                else
                        {nn=(nn|mm);}
                nn=_crol_(nn,1);
                SCL=0;
                }
        return(nn);
        }

void wrnbyta(uchar slaw,uchar gg[],uchar n)
        {
        do
                {
                sta( );
                wrbyt(slaw);
                cack( );
                }
        while(F0==1);
                wrbyt(gg[n]);
                cack( );
        }


void wrnbyt(uchar slaw,uchar ff[],uchar number)
        {
        uchar idata k;
        do
                {
                sta( );
                wrbyt(slaw);
                cack( );
                }
        while(F0==1);
        for(k=0;k<number;k++)
                {
                wrbyt(ff[k]);
                cack( );
                while(F0==1)
                wrnbyta(slaw,ff,k);
                }
        stop( );
        }


void rdnbyt(uchar slar,uchar qq[],uchar number)
{
        uchar idata data0,l;
        do
                {
                sta( );
                wrbyt(slar);
                cack( );
                }
        while(F0==1);
        for(l=0;l<number-1;l++)
                {
                data0=rdbyt( );
                qq[l]=data0;
                mack( );
                }
        data0=rdbyt( );
        qq[l]=data0;
        mnack( );
        stop( );
        }


char eeprom_read(uchar addr_h,uchar addr_l)
        {
        char a[2],temp[1];
        a[0]=addr_h;
        a[1]=addr_l;
        wrnbyt(0xa0,a,2);
        rdnbyt(0xa1,temp,1);
        return(temp[0]);
        }


void eeprom_write(uchar addr_h,uchar addr_l,uchar data1)
        {
        char a[3];
        a[0]=addr_h;
        a[1]=addr_l;
        a[2]=data1;
        wrnbyt(0xa0,a,3);
        }


void delay1()
{
 int i,j;
 for(i=0;i<=100;i++)
 for(j=0;j<=1000;j++);
}


void delay()
{
 int i,j;
 for(i=0;i<=10;i++)
 for(j=0;j<=10;j++);
}

lcd_cmd()                        //command function for lcd
{
 rs=0;
 e=0;
 delay();
 e=1;
 delay();
 e=0;
}

lcd_data()                        //data function for lcd
{
 rs=1;
 e=0;
 delay();
 e=1;
 delay();
 e=0;
}


lcd_init()                        //lcd initialzation
{
 lcddata=0x38;
 lcd_cmd();
 delay();
 lcddata=0x01;
 lcd_cmd();
 delay();
 lcddata=0x0e;
 lcd_cmd();
 delay();
 lcddata=0x06;
 lcd_cmd();
 delay();
}


void proname(unsigned char d[])                         //function to display all lcd data
{
  e=0;
  lcd_init();

  lcddata=0x80;
  lcd_cmd();
  delay();

  lcddata=d[0];
  lcd_data();
  delay();
  lcddata=d[1];
  lcd_data();
  delay();
  lcddata=d[2];
  lcd_data();
  delay();
  lcddata=d[3];
  lcd_data();
  delay();
  lcddata=d[4];
  lcd_data();
  delay();
  lcddata=d[5];
  lcd_data();
  delay();
  lcddata=d[6];
  lcd_data();
  delay();
  lcddata=d[7];
  lcd_data();
  delay();
  lcddata=d[8];
  lcd_data();
  delay();
  lcddata=d[9];
  lcd_data();
  delay();
  lcddata=d[10];
  lcd_data();
  delay();
  lcddata=d[11];
  lcd_data();
  delay();
  lcddata=d[12];
  lcd_data();
  delay();
  lcddata=d[13];
  lcd_data();
  delay();
  lcddata=d[14];
  lcd_data();
  delay();
  lcddata=d[15];
  lcd_data();
  delay();

 lcddata=0xc0;
  lcd_cmd();
  delay();
  lcddata=d[16];
  lcd_data();
  delay();
  lcddata=d[17];
  lcd_data();
  delay();
  lcddata=d[18];
  lcd_data();
  delay();
  lcddata=d[19];
  lcd_data();
  delay();
  lcddata=d[20];
  lcd_data();
  delay();
  lcddata=d[21];
  lcd_data();
  delay();
  lcddata=d[22];
  lcd_data();
  delay();
  lcddata=d[23];
  lcd_data();
  delay();
  lcddata=d[24];
  lcd_data();
  delay();
  lcddata=d[25];
  lcd_data();
  delay();
  lcddata=d[26];
  lcd_data();
  delay();
  lcddata=d[27];
  lcd_data();
  delay();
  lcddata=d[28];
  lcd_data();
  delay();
  lcddata=d[29];
  lcd_data();
  delay();
  lcddata=d[30];
  lcd_data();
  delay();
  lcddata=d[31];
  lcd_data();
  delay();


}





void main()
        {
        char ab[32],i;
        char d[5]="ANKIT";



        for(i=0;i<=4;i++)
        {
        eeprom_write(0x00,(0x10+i),d[i]);
        }


        for(i=0;i<=4;i++)
        {
        ab[i]=eeprom_read(0x00,"(0x10+i));
        }

        proname(ab);
        while(1);

        }



Please rply as soon as possible.....