EngineersGarage

  • Engineers Garage Main Site
  • Visit our active EE Forums
    • EDABoard.com
    • Electro-Tech-Online
  • Projects & Tutorials
    • Circuits
    • Electronic Projects
    • Tutorials
    • Components
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • Advertise
You are here: Home / Topics / serial EEPROM (AT24C02B)accessing problem

serial EEPROM (AT24C02B)accessing problem

|

Microcontroller › 8051 › serial EEPROM (AT24C02B)accessing problem

  • This topic has 1 reply, 1 voice, and was last updated 14 years, 11 months ago by Rajesh Vadarevu.
Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • May 18, 2011 at 7:57 am #4739
    Rajesh Vadarevu
    Participant

    with reference to the above post, I forget to put the code. Please see the code which is given below for your reference.

    Tell me what could be the problem either in circuit or code? I am able to write into eeprom succeessfully but naot able to read. Please help me in this regard. I am using AT89C55WD instead of AT89C51 and AT24C02B instead of AT24C02 which are shown in circuit .

     

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

     

    Circuit:

     

     

    May 19, 2011 at 4:10 am #6278
    Rajesh Vadarevu
    Participant

    I am able to write the data into eeprom successfully without pullup resistors, then how pullup can help while reading back from eeprom. I verified the write data with universal programmer.

  • Author
    Posts
Viewing 2 posts - 1 through 2 (of 2 total)
  • You must be logged in to reply to this topic.
Log In

RSS Recent Posts

  • isolating S-params in of PCB board without connectors April 11, 2026
  • Assistance locating a 'trail' camera gadget, please ? April 10, 2026
  • Raise your hand if your car had one of these: April 10, 2026
  • Some opamp advice please April 10, 2026
  • Voltage comparator circuit verification April 10, 2026

Stay Up To Date

Newsletter Signup
EngineersGarage

Copyright © 2026 WTWH Media LLC. All Rights Reserved. The material on this site may not be reproduced, distributed, transmitted, cached or otherwise used, except with the prior written permission of WTWH Media
Privacy Policy | Advertising | About Us

Search Engineers Garage

  • Engineers Garage Main Site
  • Visit our active EE Forums
    • EDABoard.com
    • Electro-Tech-Online
  • Projects & Tutorials
    • Circuits
    • Electronic Projects
    • Tutorials
    • Components
  • Digi-Key Store
    • Cables, Wires
    • Connectors, Interconnect
    • Discrete
    • Electromechanical
    • Embedded Computers
    • Enclosures, Hardware, Office
    • Integrated Circuits (ICs)
    • Isolators
    • LED/Optoelectronics
    • Passive
    • Power, Circuit Protection
    • Programmers
    • RF, Wireless
    • Semiconductors
    • Sensors, Transducers
    • Test Products
    • Tools
  • Advertise