#include"reg52.h"
#include"intrins.h"
sbit SDA=P3^7;
sbit SCL=P3^6;
#define DELAY_TIME 5
#define WriteDeviceAddress 0xa0
#define ReadDeviceAddress 0xa1
void delay10us()
{ unsigned char a,b;
for(b=1;b>0;b--)
{
for(a=2;a>0;a--);
}
}
void IIC_Start(void)
{
SDA=1;
delay10us();
SCL=1;
delay10us();
SDA=0;
delay10us();
SCL=0;
delay10us();
}
void IIC_Stop(void)
{
SDA=0;
delay10us();
SCL=1;
delay10us();
SDA=1;
delay10us();
}
unsigned char IIC_Sendbyte(unsigned char dat)
{
unsigned char a=0,b;
for(a=0;a<8;a++)
{
SDA=dat>>7;
dat=dat<<1;
delay10us();
SCL=1;
delay10us();
SCL=0;
delay10us();
}
SDA=1;
delay10us();
SCL=1;
while(SDA)
{
b++;
if(b>200)
{
SCL=0;
delay10us();
return 0;
}
}
SCL=0;
delay10us();
return 1;
}
unsigned char IICReadbyte()
{
unsigned char a=0,dat=0;
for(a=0;a<8;a++)
{
SCL=1;
delay10us();
dat<<=1;
dat|=SDA;
delay10us();
SCL=0;
delay10us();
}
return dat;
}
void at24c04write(unsigned char addr,unsigned char dat)
{
IIC_Start();
IIC_Sendbyte(WriteDeviceAddress);
IIC_Sendbyte(addr);
IIC_Sendbyte(dat);
IIC_Stop();
}
unsigned char at24c04read(unsigned char addr)
{
unsigned char num;
IIC_Start();
IIC_Sendbyte(WriteDeviceAddress);
IIC_Sendbyte(addr);
IIC_Start();
IIC_Sendbyte(ReadDeviceAddress);
num=IICReadbyte();
IIC_Stop();
return num;
}
#ifndef IIC_H
#define IIC_H
void IIC_Start(void);
void IIC_Stop(void);
void delay10us();
unsigned char IICReadbyte();
unsigned char at24c04read(unsigned char addr);
unsigned char IIC_Sendbyte(unsigned char dat);
void at24c04write(unsigned char addr,unsigned char dat);
#endif