I2C EEPROM 欢迎讨论


CODE:

#include
#define UCHAR unsigned char
#define UINT unsigned int
sbit SCL = P2^0;
sbit SDA = P2^1;
void Delay( UINT z )
{
UINT t1,y;
for(t1=z;t1>0;t1--)
for(y=110;y>0;y--);
}
void Init()
{
SDA = 1;
SCL = 1;
}
void Start()
{
SDA = 1;
SCL = 1;
SDA = 0;
SCL = 0;
}
void Stop()
{
SDA = 0;
SCL = 1;
SDA = 1;
SCL = 0;
}
bit GetAck()
{
bit b;
SDA = 1;
SCL = 1;
b = SDA;
SCL = 0;
return b;
}
void WBy(UCHAR ucBy)
{
char i;
for(i = 7;i >=0; i--)
{
SDA = (ucBy >> i) & 0x01;//TestBit测试某位是否为1
SCL = 1;
SCL = 0;
}
}
UCHAR RBy()
{
char i,ret=0;
for(i = 7;i >=0; i--)
{
SCL = 1;
ret |= (char)SDA << i;//SetBit设置某位为1
SCL = 0;
}
return ret;
}
void Write(UCHAR SerAddr,UCHAR MemAddr,UCHAR ucBy)
{
SerAddr <<= 1;
SerAddr |= 0xA0;
Start();
WBy(SerAddr);
GetAck();
WBy(MemAddr);
GetAck();
WBy(ucBy);
GetAck();
Stop();
}
UCHAR Read(UCHAR SerAddr,UCHAR MemAddr)
{
char ret = 0;
SerAddr <<= 1;
SerAddr |= 0xA0;
Start();
WBy(SerAddr);
GetAck();
WBy(MemAddr);
GetAck();
Start();
WBy(SerAddr + 1);
GetAck();
ret = RBy();
Stop();
return ret;
}
void main()
{
Init();
while(1)
{
Write(0x0,0x3,0xAA);
Delay(1000);
P1 = Read(0x0,0x3);
}
}
设备号0x0,,,内存地址0x3,,,存个0xAA
读出来存在P1;;;
直接可以运行......Proteus如图,,,

[ 本帖最后由 tssing 于 2008-8-2 23:28 编辑 ]


QQ截图未命名.gif