这两天在模拟iic从机,接收数据总是出错,看了看时序,也像也没啥问题。程序如下: while(1) { // Prints("OK1
"); temp=0; while(SCL); while(!SCL); //等待总线复位 while(1) { NN=10; Pre=SDA; while(SCL && NN--) { Cur=SDA; if(Pre && !Cur) Start_Flag=TRUE; if(Start_Flag) { Start_Flag=FALSE; //090729 while(SCL); //090729
for(i=0;i<8;i++) //接收一个字节 { while(!SCL); sla<<=1; sla=sla|SDA; // temp=temp|(c<<(7-i)); //msb first 时间太长? while(SCL); //等待高结束 } ACK(); //应答
for(i=0;i<8;i++) //接收一个字节 { while(!SCL); //c=SDA; suba<<=1; suba=suba|SDA; // temp=temp|(c<<(7-i)); //msb first 时间太长? while(SCL); //等待高结束 } ACK(); //应答
for(j=0;j<4;j++) { for(i=0;i<8;i++) //接收一个字节 { while(!SCL); temp<<=1; temp=temp|SDA; // temp=temp|(c<<(7-i)); //msb first 时间太长? while(SCL); //等待高结束 } ACK(); //应答 dat[j]=temp; temp=0; } while(!SCL); //等待stop信号 // Pre=SDA; PrintHex(sla); PrintHex(suba);
while(1); // Pre=SDA; } Pre=Cur; } } 能接收对sla,但是suba就是接收不对。 硬件:主机用的pic16f676,从机用的stc89c52rc,分别从两块单片机上引出两个脚用作sda,scl,直接相连。主机晶振4M,指令周期1us,从机晶振22.1184。看了下主机发送的波形,似乎没什么问题。 还望大家能帮忙看看。 |