求大神帮忙看AT89C51从AT24C02连续读取数据,为什么读不出来,好着急!

qq_20746627 2016-05-13 09:54:19
这是24C02.h
#include <i2c.h>
#define WRITE 0xA0
#define READ 0xA1

//**********数据存储读写部分**************//
//描述:地址写入函数
//功能:向24C02写入器件地址和一个指定的字节地址。
//****************************************//
bit E_Address(uchar Address){
I_start();
if(I_send(WRITE))
return (I_send(Address));
else
return (FALSE);
}

//************5ms延时*******************//
void wait_5ms(void){
int I;
for ( I=0 ;I<1000 ;I++){
;
}
}

//描述:数据写入函数
//功能:将数据写入到24C04指定地址开始的BLOCK_SIZE个字节,采用字节写方式
//每次写入都要指定片内地址
//****************************************//
bit E_write_block(uchar start, uint dataNumber, uchar* transfer){
uchar i;
for ( i = 0; i < dataNumber ; i++ ){
if ( E_Address(i+start) && I_send(transfer[i])){
I_stop();
wait_5ms();
}
else
return(FALSE);
}
return(TRUE);
}

//描述:数据读取函数
//功能:从24C04中读取BLOCK_SIZE个字节的数据,转存于51片内RAM,采用序列读操作方式连续读取数据
//****************************************//
bit E_read_block(uchar start, uint dataNumber, uchar* transfer){
uchar i;
if (E_Address(start)){
I_start();
if (I_send(READ)){
for (i = 0; i < dataNumber; i++ ){
transfer[i] = (I_recieve());
if (i!=dataNumber-1)
I_Ack();
else{
I_clock();
I_stop();
}
}
return TRUE;
}
else{
I_stop();
return (FALSE);
}
}
else
I_stop();
return (FALSE);
}
#endif

~~~~~~~~~~~~~~通过按键存储和按键读取七次的数据

void keyScan(){
if (0 == writeData)
{
delay_ms(10);
enableFlag = 0;
if (0 == writeData)
{
writeFlag += 1;
if (writeFlag > 8)
{
writeFlag = 0;
}
readOrWrite = 1;
}
while(!writeData);

if (writeFlag>0)
{
calTotalTime();
calTotalSteps();
I_init();
E_write_block(addr+(writeFlag-1)*16, 9, totalTime2Char);
E_write_block(addr+(writeFlag-1)*16 + 9, 7, steps2Char);
led = ~led;
}
}

if (0 == readData)
{
delay_ms(10);
if (0 == readData)
{
readFlag += 1;
if (readFlag > 8)
{
readFlag = 0;
}
readOrWrite = 0;
}
while(!readData);

if (readFlag>0)
{
I_init();
E_read_block(addr+(readFlag-1)*16, 9, totalTime2Char);
E_read_block(addr+(readFlag-1)*16 + 9, 7, steps2Char);

GotoXY(0,0);
Print("Time:");
Print(totalTime2Char);
Print(" ");

GotoXY(0,1);
Print("Steps:");
Print(steps2Char);

led2 = ~led2;
}
}



...全文
582 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Atti_csdn 2016-06-08
  • 打赏
  • 举报
回复
1:检测下I2C时序是否正确 2:看AT24C02怎么连续读,涉及到每页是多大(具体不记得了)
dceacho 2016-05-13
  • 打赏
  • 举报
回复
仿真看哪一步不符合预期 直接看代码很难发现哪出问题

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧