前几天按照手册写的随机读取AT24C08的程序一直无法成功,今天写了一个类似的简单程序拿来调试,结果错误依旧,百思不得其解!不知道为什么伪写总是无法得到ACK(应该也没有写成功,因为运行程序的结果和Sequential Read方式的结果想相同。)。
思考了挺久(当然也搜索了挺久),无解。。。望大神伸出援手。代码简单,过目。。。
flag=2;buf=0x0;locate=0x10;
rIICDS=0xa0;//伪写第一阶段,写从机地址
delay(1000);
rIICCON=0xe1;
rIICSTAT=0xf0;
return 0;
}
void irq_process()
{
int puts(unsigned char*);
int printx(unsigned long);
int i;
rSRCPND=~0;
rINTPND=~0;
if(flag==1)//NO ACK
{
puts("flag 1\r\n");
buf=rIICDS;
printx(rIICDS); puts(" ");printx(rIICCON);puts(" ");printx(rIICSTAT);
rIICCON=0x61;//no ACK
flag=0;
}
else if(flag==2)//伪写的第二个阶段,发送数据起始地址
{
puts("flag 2\r\n");
printx(rIICDS); puts(" ");printx(rIICCON);puts(" ");printx(rIICSTAT);
puts("\r\n");
rIICDS=locate;//想读的数据起的始地址
delay(1000);
printx(rIICDS); puts(" ");printx(rIICCON);puts(" ");printx(rIICSTAT);
rIICCON=0xe1;
flag=3;
}
else if(flag==3)//M_R restart
{
puts("flag 3\r\n");
printx(rIICDS); puts(" ");printx(rIICCON);puts(" ");printx(rIICSTAT);
puts("\r\n");
rIICDS=0xa0;//以主读方式再次发送开始信号