AT24c16 Eprom Code not Working

Hi all...
I am trying to Interface AT24C16 Eeprom with AT89S52 microcontroller.
My concept is to save the data's from string Eprom_data in which user input's using keypad. and then again read the data and then store it to string chanuser and then display it on the LCD.
but what the problem is the code only works perfect with AT24C32 and AT24C64 but does not work properly with AT24C16.
I have tried stimulating in Proteus.
if i use AT24C16 and try writing data to any page address or any other block, it wont write to that specific address.. it will write only to 0x0001.
but if i work with the same code using 24C32 and 24C64. the things work prefect.




Parents
  • #include<reg51.h>
    #include<stdio.h>
    #include<intrins.h>
    
    sbit row0=P2^4;
    sbit row1=P2^5;
    sbit row2=P2^6;
    sbit row3=P2^7;
    sfr COL=0xA0;
    
    sfr ldata=0x90; //assigning PORT-1 for LCD data
    sbit rs=P0^0;
    sbit rw=P0^1;
    sbit en=P3^0;
    sbit busy=P1^7;
    
    sbit SCL=P3^1;                   // EEPROM PIN CONFIGRATION
    sbit SDA=P3^2;                   // EEPROM PIN CONFIGRATION
    
    void lcdcmd(unsigned char value);
    void lcddata(unsigned char value);
    void lcdready(void);
    void printstring(unsigned char ch[]);
    void lcdclear(void);
    void lcdinit();
    
    void msdelay(unsigned int value);
    int keypad();
    void timer(unsigned int msec);
    
    void delay_us(unsigned int us_count);
    void Eprom_Read(unsigned int Page_Add);
    void Eprom_Write(unsigned int Page_Add);
    void I2CStart();
    void I2CStop();
    unsigned char I2CSend(unsigned char Data);
    unsigned char eeprom_not_ready();
    unsigned char I2CRead();
    void I2CNak();
    void I2CAck();
    
    unsigned char Eprom_data[11];
    unsigned char chanuser[11];
    
    void main()
    {
    unsigned int i;
    while(1)
      {
        lcdinit();
            msdelay(50);
            lcdcmd(0x80);
            printstring("ENTER NUMBER:");
            lcdcmd(0xC0);
            for(i=0;i<6;i++)
            {
             Eprom_data[i]=keypad();
             lcddata(Eprom_data[i]);
            }
            Eprom_data[6]='\0';
            Eprom_Write(0x0050);
            msdelay(500);
            Eprom_Read(0x0050);
            for(i=0;i<6;i++)
            chanuser[i]=Eprom_data[i];
            lcdclear();
            lcdcmd(0x80);
            printstring(chanuser);
            msdelay(2000);
     }
    }
    

Reply
  • #include<reg51.h>
    #include<stdio.h>
    #include<intrins.h>
    
    sbit row0=P2^4;
    sbit row1=P2^5;
    sbit row2=P2^6;
    sbit row3=P2^7;
    sfr COL=0xA0;
    
    sfr ldata=0x90; //assigning PORT-1 for LCD data
    sbit rs=P0^0;
    sbit rw=P0^1;
    sbit en=P3^0;
    sbit busy=P1^7;
    
    sbit SCL=P3^1;                   // EEPROM PIN CONFIGRATION
    sbit SDA=P3^2;                   // EEPROM PIN CONFIGRATION
    
    void lcdcmd(unsigned char value);
    void lcddata(unsigned char value);
    void lcdready(void);
    void printstring(unsigned char ch[]);
    void lcdclear(void);
    void lcdinit();
    
    void msdelay(unsigned int value);
    int keypad();
    void timer(unsigned int msec);
    
    void delay_us(unsigned int us_count);
    void Eprom_Read(unsigned int Page_Add);
    void Eprom_Write(unsigned int Page_Add);
    void I2CStart();
    void I2CStop();
    unsigned char I2CSend(unsigned char Data);
    unsigned char eeprom_not_ready();
    unsigned char I2CRead();
    void I2CNak();
    void I2CAck();
    
    unsigned char Eprom_data[11];
    unsigned char chanuser[11];
    
    void main()
    {
    unsigned int i;
    while(1)
      {
        lcdinit();
            msdelay(50);
            lcdcmd(0x80);
            printstring("ENTER NUMBER:");
            lcdcmd(0xC0);
            for(i=0;i<6;i++)
            {
             Eprom_data[i]=keypad();
             lcddata(Eprom_data[i]);
            }
            Eprom_data[6]='\0';
            Eprom_Write(0x0050);
            msdelay(500);
            Eprom_Read(0x0050);
            for(i=0;i<6;i++)
            chanuser[i]=Eprom_data[i];
            lcdclear();
            lcdcmd(0x80);
            printstring(chanuser);
            msdelay(2000);
     }
    }
    

Children
More questions in this forum