|
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit scl=P2^1;
sbit sda=P2^0;
void delay5us(uchar z)
{
do
{
_nop_();
_nop_();
_nop_();
_nop_();
}while(--z);
}
void init() //释放总线
{
scl=1;
delay5us(1);
sda=1;
delay5us(1);
}
void start() //起始信号
{
sda=1;
delay5us(1);
scl=1;
delay5us(1);
sda=0;
delay5us(1);
}
void stop() //终止信号
{
sda=0;
delay5us(1);
scl=1;
delay5us(1);
sda=1;
delay5us(1);
}
void response() //应答信号
{
uchar i=0;
scl=1;
delay5us(1);
while((sda==1)&&(i<250)) i++;
scl=0;
delay5us(1);
}
void writebyte(uint dat)
{
uchar i,temp; //这里的变量temp定义成 unsigned int 数据读不回来,为什么??
temp=dat;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay5us(1);
sda=CY;
delay5us(1);
scl=1;
delay5us(1);
}
scl=0;
delay5us(1);
sda=1;
delay5us(1);
}
uchar readbyte()
{
uint j,k,t;
scl=0;
delay5us(1);
//sda=1;
//delay5us(1);
for(j=0;j<8;j++)
{
scl=1;
delay5us(1);
k=sda;
t=k|t<<1;
delay5us(1);
scl=0;
delay5us(1);
}
delay5us(1);
return t;
sda=1;
delay5us(1);
}
void write(uchar add,uchar oder)
{
start();
writebyte(0xa0);
response();
writebyte(add);
response();
writebyte(oder);
response();
stop();
}
void read(uchar add)
{
start();
writebyte(0xa0);
response();
writebyte(add);
response();
start();
writebyte(0xa1);
response();
P1=readbyte();
stop();
}
void main()
{
init();
write(0x00,0x55);
delay5us(200);
read(0x00);
while(1);
}
|
|