你好,你曾经贴出一篇名为"I2C的问题"的帖子,内容如下:<br /> void Send_N_byte(uint8 Sla,uint8 Subaddr,uint8 Data)<br />{<br /> uint8 ii=0;<br /> I2C0CONCLR =(1<<3); <br /> I2C0CONSET = (1<<5); <br /> <br /> I2C0DAT = Sla&0xfe; // 和屏蔽部分对照,改成这样,第2步读到的状态位正常--18,使用屏蔽部分,第2步读到的状态位为 20,不是18<br />// while ( ((I2C0STAT & 0xf8)!=0x08) && ((I2C0STAT & 0xf8)! =x10) ); // && (ii++<0xff) );<br />// temptemp = I2C0STAT;<br />// I2C0DAT = 0x34;<br /> I2C0CONCLR = 1<<3;<br /> <br /> while ( ((I2C0STAT & 0xf8)!=0x18) && ((I2C0STAT & 0xf8)!=0x20) );// && (ii++<0xffff) );<br />// temptemp = I2C0STAT;<br />// if((I2C0STAT & 0xf8)!=0x18)<br />// {<br /> I2C0DAT = Subaddr; <br /> I2C0CONCLR = 1<<3;<br />// }<br />// else<br />// {<br />// I2C0CONCLR =0x28;<br />// I2C0CONSET=1<<4;<br />// return ;<br />// } <br /> <br />// ii=0; <br /> while ( ((I2C0STAT & 0xf8)!=0x28) && ((I2C0STAT & 0xf8)!=0x30) && (ii++<0xff) );<br /> temptemp = I2C0STAT; //该句测试用 状态变为08H,不懂为什么,求助<br /> if(((I2C0STAT & 0xf8)!=0x28))<br /> {<br /> I2C0DAT = Data; <br /> I2C0CONCLR = 1<<3;<br /> ii=0; <br /> } else {<br /> I2C0CONCLR =0x28;<br /> I2C0CONSET=1<<4;<br /> return ;<br /> } <br /> while ( ((I2C0STAT & 0xf8)!=0x28) && ((I2C0STAT & 0xf8)!=0x30) && (ii++<0xffff) );<br /> temptemp = I2C0STAT;<br /> I2C0CONCLR =0x28; // 清零 SI 和 STA <br /> I2C0CONSET=1<<4; // 1<<3 he 1<<5 <br /> temptemp = I2C0STAT; <br />} <br />你说你读到的状态码是20不是18,我和你也遇到了同样的问题,请问你是怎么解决的?<br /> |
|