i2c问题,高手进来看一下
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda=P2^0;
sbit scl=P2^1;
uchar a;
void delay()
{;;}
void delay1ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void start() // 开始信号
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop()//停止
{ sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void respons()
{
uchar i=0;
scl=1;
delay();
while((sda==1)&&(i<250))i++;
scl=0;
delay();
}
void init()
{ scl=1;
delay();
sda=1;
delay();
}
void writebyte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay();
sda=1;
delay();
}
uchar readbyte()
{
uchar i,k;
scl=0;
dalay();
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
k=(k<<1)|sda;
scl=0;
delay();
}
delay();
return k;
}
void main()
{
init();
start();
writebyte(0xa0);
respons();
writebyte(3);
respons();
writebyte(0xaa);
respons();
stop();
delay1ms(200);
start();
writebyte(0xa0);
respons();
writebyte(3);
respons();
start();
writebyte(0xa1);
respons();
a=readbyte();
stop();
P1=a;
while(1);
}
用的郭天祥的板子,对着书找了几遍,实在找不出问题,i2c传送和读取,通过流水灯是否符合来验证。希望帮下忙
#define uchar unsigned char
#define uint unsigned int
sbit sda=P2^0;
sbit scl=P2^1;
uchar a;
void delay()
{;;}
void delay1ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void start() // 开始信号
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop()//停止
{ sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
void respons()
{
uchar i=0;
scl=1;
delay();
while((sda==1)&&(i<250))i++;
scl=0;
delay();
}
void init()
{ scl=1;
delay();
sda=1;
delay();
}
void writebyte(uchar date)
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delay();
sda=CY;
delay();
scl=1;
delay();
}
scl=0;
delay();
sda=1;
delay();
}
uchar readbyte()
{
uchar i,k;
scl=0;
dalay();
sda=1;
delay();
for(i=0;i<8;i++)
{
scl=1;
delay();
k=(k<<1)|sda;
scl=0;
delay();
}
delay();
return k;
}
void main()
{
init();
start();
writebyte(0xa0);
respons();
writebyte(3);
respons();
writebyte(0xaa);
respons();
stop();
delay1ms(200);
start();
writebyte(0xa0);
respons();
writebyte(3);
respons();
start();
writebyte(0xa1);
respons();
a=readbyte();
stop();
P1=a;
while(1);
}
用的郭天祥的板子,对着书找了几遍,实在找不出问题,i2c传送和读取,通过流水灯是否符合来验证。希望帮下忙
你这是读取哪种芯片的程序?我先说一下,while(1)那儿由于程序执行一次就停在那儿了,所以即使读出来数据,也是第一次写进去的数据,如果读的是时钟芯片的话,时间就会不走。你可能读的是EEPROM芯片
是eeprom,我就让流水灯第一个亮就达到目的了,但是,不行,也不知道哪里错了,程序看了几遍了。
问题已解决,小事。