永发信息网

读写AT24C02,调试后d=ff,数码管没数据,那么是没有读到24C02里面数据了,程序有错吗?

答案:3  悬赏:50  手机版
解决时间 2021-03-07 17:00
  • 提问者网友:自食苦果
  • 2021-03-06 23:05
#include
#define uint unsigned int
#define uchar unsigned char
sbit scl=P1^0;
sbit sda=P1^1;
uchar code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f,0x67};
void delayus()
{
{;;}

}
void delayms(uint x)
{
uchar m,n;
for(m=x;x>0;x--)
for(n=110;n>0;n--);
}
void init()//两总线释放总线(都为高电平),为总线空闲状态,此时才
{ //准许启动数据传送
sda=1;
delayus();
scl=1;
delayus();
}
void sta()
{
sda=1;scl=1;delayus();
sda=0;delayus();
scl=0;
}
bit resp()
{
uchar i=0;bit ask;
sda=1;delayus();
scl=1;delayus();
ask=sda;//while((sda==1)&&(i<255)) i++;
scl=0;
return(ask);
}
void nonresp()
{
sda=1;scl=0;
scl=1;delayus();
}
void sto()
{
scl=1;
sda=0;delayus();
sda=1;delayus();
sda=0;
}
void writebyte(uchar dat)
{
uchar i,temp;
temp=dat;
for(i=8;i>0;i--)
{
scl=0;delayus();
temp=temp<<1;//delayus();
sda=CY;//delayus();
scl=1;//delayus();
}
scl=0;delayus();
sda=1;delayus();
}
uchar readbyte()
{
uchar i,dat=0;
scl=0;delayus();
sda=1;//delayus();
for(i=8;i>0;i--)
{
scl=1;//delayus();
dat=(dat<<1)|sda;//delayus();
scl=0;//delayus();
}
return(dat);
}

void main()
{
uchar d;
init();//delayus();
sta();
writebyte(0xA0);resp();
writebyte(9);resp();
writebyte(5);resp();sto();delayus();
sta();
writebyte(0xA0);resp();
writebyte(9);resp();
sta();
writebyte(0xa1);resp();
d=readbyte();sto();

while(1)
{
P2=7;
P0=table[d]; }
// p=a;
//display(p);
}
最佳答案
  • 五星知识达人网友:酒者煙囻
  • 2021-03-07 00:25
时序不对,参考网上有很多I2C源代码
全部回答
  • 1楼网友:低音帝王
  • 2021-03-07 02:37
好像有错误码
  • 2楼网友:人间朝暮
  • 2021-03-07 01:28
sadfgsagasfg 再看看别人怎么说的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯