huaidan1628 发表于 2015-8-9 11:48:40

模拟I2c出现问题,要一次接收两个字节,但现在只能接收...

本帖最后由 huaidan1628 于 2015-8-9 19:05 编辑

现在只能接受第一个,感觉应该是接收第一个高字节之后那个主机应答有问题,但是没找到怎么有问题,大家帮忙看一下

void Ack_I2c(uchar a)          //应答
{       
       
    SCL_pout1();
        SCL_1();
    if(a==0)
    {   
      SDA_pout0();   /*在此发出应答或非应答信号 */
                SDA_1();
    }
    else
    {
      SDA_pout1();
                SDA_1();
    }   
        iic_delay();         //*时钟低电平周期大于4μs
    iic_delay();
    SCL_pout0();         //*清时钟线,钳住I2C总线以便继续接收*
    SCL_1();
    iic_delay();
    iic_delay();
}

miaoguoqiang 发表于 2015-8-9 13:15:10

没有非应答信号的函数

huaidan1628 发表于 2015-8-9 13:44:26

本帖最后由 huaidan1628 于 2015-8-9 13:45 编辑

miaoguoqiang 发表于 2015-8-9 13:15
没有非应答信号的函数

不就是在接收第一个字节之后第二个字节之前主机发送一个应答么,也用不到非应答啊,
那个void Ack_I2c(uchar a)          //0时应答,1时非应答

miaoguoqiang 发表于 2015-8-9 13:53:17

huaidan1628 发表于 2015-8-9 13:44
不就是在接收第一个字节之后第二个字节之前主机发送一个应答么,也用不到非应答啊,
那个void Ack_I2c(uc ...

在最后一个字节完成后发送一个非应答信号   再发送停止信号

huaidan1628 发表于 2015-8-9 14:09:44

miaoguoqiang 发表于 2015-8-9 13:53
在最后一个字节完成后发送一个非应答信号   再发送停止信号

试过了还是不好使

huaidan1628 发表于 2015-8-9 19:04:49

miaoguoqiang 发表于 2015-8-9 13:53
在最后一个字节完成后发送一个非应答信号   再发送停止信号

已经好了,是应答少了一个时钟
页: [1]
查看完整版本: 模拟I2c出现问题,要一次接收两个字节,但现在只能接收...