大家帮看看AVR单片机24C02的多字节读程序,在读数据的时候为什么只能读出一个数据,求指教
voidread_page_24c02(uchar*b,ucharaddr,uintlen){uinti;start_signed();write_byte(0xA0);...
void read_page_24c02(uchar *b,uchar addr,uint len)
{
uint i;
start_signed();
write_byte(0xA0);//写标志位
if(ACK_signed() != 0)
{
return;
}
write_byte(addr);//指定地址
if(ACK_signed() != 0)
{
return;
}
start_signed();
write_byte(0xA1);
if(ACK_signed() != 0)
{
return;
}
for(i = 0;i < len-1;i++)
{
*b = read_byte();
putchar0(*b);
b++;
delay(10);
if(ACK_signed() != 0)
{
break;
//continue;
}
}
*b = read_byte();
SDA_high();
delay_us(10);
SCL_high();
delay_us(10);
SCL_low();
delay_us(10);
putchar0(*b);
stop_signed();
delay(1); //延时1MS等待写操作完成
} 展开
{
uint i;
start_signed();
write_byte(0xA0);//写标志位
if(ACK_signed() != 0)
{
return;
}
write_byte(addr);//指定地址
if(ACK_signed() != 0)
{
return;
}
start_signed();
write_byte(0xA1);
if(ACK_signed() != 0)
{
return;
}
for(i = 0;i < len-1;i++)
{
*b = read_byte();
putchar0(*b);
b++;
delay(10);
if(ACK_signed() != 0)
{
break;
//continue;
}
}
*b = read_byte();
SDA_high();
delay_us(10);
SCL_high();
delay_us(10);
SCL_low();
delay_us(10);
putchar0(*b);
stop_signed();
delay(1); //延时1MS等待写操作完成
} 展开
3个回答
展开全部
*b = read_byte();为什麽不取地址?
b++了,指针地址是加了,可数据存储地址并没装在指针裏面,怎麼让它读下一位数据。
b++了,指针地址是加了,可数据存储地址并没装在指针裏面,怎麼让它读下一位数据。
追问
我这个因为是24C02的,24C02里说在读数据时,地址是自动加的,但是那是产生应答以后,可是我这边的读数据应答没能产生,检查了好多次也没能看到是哪错了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for(i = 0;i < len-1;i++)
{
*b = read_byte();
putchar0(*b);
b++;
delay(10);
if(ACK_signed() != 0)
{
break;
//continue;
}
}
把 delay(10); 延时去掉。
{
*b = read_byte();
putchar0(*b);
b++;
delay(10);
if(ACK_signed() != 0)
{
break;
//continue;
}
}
把 delay(10); 延时去掉。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-09-20
展开全部
不懂
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询