小型储存24c02浅谈
小型储存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
}}
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);
}
电路如下:
