成语大全网 - 经典成语 - 郭天祥老师视频词典

郭天祥老师视频词典

恩,这个问题困扰了两天,终于找到原因并且顺利解决了!原因是:单片机接收应答信号(向AT24C02写数据时)和发送应答信号(AT24C02向单片机发送数据)的代码是不一样的!

void ack()//acknowledge (单片机接收应答信号)

{

uchar i;

scl=1;

delay();

while((sda == 1)&&(i > 250))

i++;

scl=0;//注意此处,此处表示第九个时钟结束,不能不写

delay();

}

void ack2(bit response)//(单片机发送的应答信号,response=1时是非应答,response=0时是应答!)

{

sda=response;

scl=1;

delay();

scl=0;

delay();

}

//然后严格遵循datasheet的操作时序

//读数据的代码是这样的()

void read_add(uchar address)

{

start();

write_byte(0xa0);

ack();

write_byte(address);

ack();//dummy write

start();

write_byte(0xa1);

ack();

P1=read_byte();

ack2(0);//这个应答才正确

// ack();这个应答不正确

P1=read_byte();

ack2(1);

delay();

stop();

}

//这里注意,我用郭天祥老师的TX-1C,给P1口赋值让lcd灯来检验我的应答信号是否正确