>
  • 学而时习之专栏
  • 温故而知新专栏



  • 小型储存24c02浅谈





    有一次有个电子称坏了,我打开检查有单片机是AT89C53,拆开单片机在里面有一块小小的芯片,当时想这块有什么用呢,当时通讯不是很发达,也没有手机,当时在想这么小有什么用呢!我看书才知道,原来是用来储存数据的,看程序才知道原来这样读取数据,又学到知识啦!


    程序如下:

    #define uchar unsigned char
    #define uint unsigned int
    #include "at89x52.h"
    #include "stdio.h"
    #include "serial_IO.h"
    __sbit scl=P3_5;
    __sbit sda=P3_4;
    uchar x24c02_read(uchar address);
    void x24c02_write(uchar address,uchar inf0);
    void x24c02_init();
    void delay1(uchar x);
    void flash();
    void x24c021_init();
    void start();
    void stop();
    void writex(uchar j);
    uchar readx();
    void clock();
    void delay(uchar x)
    { uint i;
    for(i=0;i DOG=u^DOG;
    }}
    void flash()
    {
    uchar u;
    DOG=u^DOG;
    }
    void x24c02_init()
    {
    scl=1;
    flash();
    sda=1;
    flash();
    }
    void start()
    {
    sda=1;
    flash();
    scl=1;
    flash();
    sda=0;
    flash();
    scl=0;
    flash();
    }
    void stop()
    {
    sda=0;
    flash();
    scl=1;
    flash();
    sda=1;
    flash();
    }
    void writex(uchar j)
    {
    uchar i;
    SIO_SBUF=j;
    for (i=0;i<8;i++)
    {
    SIO_SBUF=SIO_SBUF<<1;
    scl=0;
    flash();
    sda=CY;
    flash();
    scl=1;
    flash();
    scl=0;
    flash();
    sda=1;
    flash();
    }
    readx()
    {
    uchar i,j,k=0;
    scl=0;
    flash();
    sda=1;
    for(i=0;i<8;i++)
    {
    flash();
    scl=1;
    flash();
    if(sda==1) j=1;
    else j=0;
    k=(k<<1|j);
    scl=0;
    }
    flash();
    return(k)
    }
    void clock()
    {
    uchar i=0;
    scl=1;
    flash();
    while(sda==1&&i<255)
    {
    i++;
    scl=0;
    flash();
    }
    }
    uchar x24c02_read(uchar address)
    {
    uchar i;
    start();
    writex(0xa0);
    clock();
    writex(address);
    clock();
    start();
    writex(0xa1);
    clock();
    i=readx();
    stop();
    delay1(10);
    return(i);
    }
    void X24C02_write(uchar address,uchar inf0)
    {
    EA=0;
    start();
    writex(0xa0);
    clock();
    writex(address);
    clock();
    writex(inf0);
    clock();
    stop();
    EA=1;
    delay1(50);
    }

    电路如下: