请问I2C代码对应答失败怎么处理

2019-07-14 18:31发布

原子哥在I2C的代码有些没有看懂下面这段代码里,IIC_Wait_Ack()函数应该会返回一个0或1,这里并没有用它的返回值,而是直接往下运行了,那如果这里的返回值是0,代码里并没有给出相应的处理啊,求大佬帮助一下,多谢多谢


void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{                                                                                                                                                                                          
    IIC_Start();  
        if(EE_TYPE>AT24C16)
        {
                IIC_Send_Byte(0XA0);            //发送写命令
                IIC_Wait_Ack();
                IIC_Send_Byte(WriteAddr>>8);//发送高地址,即WriteAddr高八位  
        }else IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));   //发送器件地址0XA0,写数据         
        IIC_Wait_Ack();           
        IIC_Send_Byte(WriteAddr%256);   //发送低地址,即WriteAddr低八位
        IIC_Wait_Ack();                                                                                                               
        IIC_Send_Byte(DataToWrite);     //发送字节                                                           
        IIC_Wait_Ack();                                 
    IIC_Stop();//产生一个停止条件
        delay_ms(10);         
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
ctwewer
1楼-- · 2019-07-15 08:10
hrt666 发表于 2018-8-17 07:13
也就是说发完一个字节的数据必须空出一个SCL脉冲的时间去读这个应答,而不能继续发数据,所以就有了IIC_Wait_Ack()这个函数。
也像楼下说的,这个应答是成功还是失败可以自己再写相应的程序去处理,只不过这里没有管应答成功还是失败就继续传下一个字节了,这个理解对吗? ...

如果器件没有接收到正确的数据,自然不会返回正确的应答信号。以此来判断本次通讯成功与否。
如楼主所述:“这个应答是成功还是失败可以自己再写相应的程序去处理”。
hrt666
2楼-- · 2019-07-15 13:35
 精彩回答 2  元偷偷看……
Mcu32bit_lsl
3楼-- · 2019-07-15 15:36
IIC_Wait_Ack() //等待应答信号
IIC_NAck() //发送高电平信号(非应答)

一周热门 更多>