I2C调试出现的问题

1、I2C可以读到数据,但是没有收到对应响应

 Missing ACK/NCK,细看波形,出现短时间内波形变化如下图:

 

 查找资料并未发现解决,先记录下,以后在修改。

根本原因:响应时序程序不对,写完地址后,SDA高的时候,同时设置SDA为输入模式!

代码如下:

错误示范:

i2cstart();
write_byte(0xa0);
SCL=1;
SDA=1;
delay(30);
SCL=0;
delay(30);
SDAC=1;//SDA设置输入模式
while((unsigned char)(SDA)!=0)
{
   i++;
   if(i>=5000)
   {
     return 0;


   }

}
SDAC=0;
SCL=0;

正确程序

i2cstart();
write_byte(0xa0);
SCL=1;
SDA=1;
SDAC=1;//SDA设置输入模式
delay(30);
SCL=0;
delay(30);
while((unsigned char)(SDA)!=0)
{
   i++;
   if(i>=5000)
   {
     return 0;


   }

}
SDAC=0;
SCL=0;

修改后,成功解决。

猜你喜欢

转载自blog.csdn.net/weixin_58125062/article/details/130068297
I2C