#include // 包含51单片机寄存器定义的头文件
#include //包含_nop_()函数定义的头文件
#define uchar unsigned char
#define uint unsigned int
sbitSDA=P2^1; //将串行数据总线SDA位定义在为P3.4引脚
sbitSCL=P2^0; //将串行时钟总线SDA位定义在为P3.3引脚
void delayms()
{
uchar i,j;
for(i=10;i>0;i--)
for(j=33;j>0;j--);
}
void delayx(uchar x)
{
uchar i;
for(i=x;i>0;i--)
delayms();
}
void delay()
{
_nop_();
_nop_();
_nop_();
_nop_();
}
void start()
{
SCL=1;
SDA=1;
delay();
SDA=0;
delay();
SCL=0;
}
void stop()
{
SCL=1;
SDA=0;
delay();
SDA=1;
delay();
SCL=0;
SDA=0;
}
bit writebyte(uchar y)
{
uchar i;
bit ACK;
for(i=0;i<8;i++)
{
SCL=0;
delay();
y=y<<1;
SDA=CY;
_nop_();
_nop_();
SCL=1;
delay();
SCL=0; //必须将其置低电平为下一次SDA数据传送做准备
}
SDA=1;
delay();
SCL=1;
delay();
ACK=SDA;
SCL=0; //为下面SDA改变做改变
return ACK;
}
uchar readbyte()
{
uchar i,k;
for(i=0;i<8;i++)
{
SCL=1;
delay();
k=(k<<1)|(uchar)SDA;
_nop_();
_nop_();
SCL=0;
delay();
}
return k;
}
void writeset(uchar address,uchar dat)
{
SCL=1;
SDA=1;
start();
writebyte(0xa0);
writebyte(address);
writebyte(dat);
stop();
delayx(5);
}
uchar read_byte( )
{
uchar x;
start();
writebyte(0xa1);
x=readbyte();
stop();
return x;
}
uchar readset(uchar address)
{
start();
writebyte(0xa0);
writebyte(address);
return (read_byte());
}
void main()
{
while(1)
{
SCL=1;
SDA=1;
writeset(0X36,0XAA);
P1=readset(0X36);
}
}