求高人帮我看看iic的问题,谢谢!

2019-03-24 19:33发布

最近刚接触IIC协议,这是个模拟协议,我在网上看了个程序段,有点不太明白。iic协议说主器件发送 第一个字节后,要等待从器件应答,然后再进行第二个字节数据发送,但是这个程序段里面看不出来, 为什么不查询呢? 。 。 。 /**************************************
接收应答信号
**************************************/
bit AT24C04_RecvACK()
{
    SCL = 1;                    //拉高时钟线
    Delay5us();                 //延时
    CY = SDA;                   //读应答信号                SCL = 0;                    //拉低时钟线
    Delay5us();                 //延时     return CY;                  //此处返回值到cy,可以明白。但是返回的值怎么判别从器件应答了呢?
} /**************************************
向IIC总线发送一个字节数据
**************************************/
void AT24C04_SendByte(BYTE dat)    //dat=0xa0=1010 0000
{
    BYTE i;     for (i=0; i<8; i++)         //8位计数器
    {
        dat <<= 1;              //移出数据的最高位
        SDA = CY;               //送数据口          CY为进位标志,0X0A左移时,产生进位CY=1,不产生进位CY为0
        SCL = 1;                //拉高时钟线
        Delay5us();             //延时
        SCL = 0;                //拉低时钟线
        Delay5us();             //延时
    }
    AT24C04_RecvACK();     
} 。 。 。
  此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
小小白
2019-03-25 13:13
这个只是一个读应答信号的程序不涉及判读至于判断是在后面的程序里面做的
bit AT24C04_RecvACK()
{
    SCL = 1;                    //拉高时钟线
    Delay5us();                 //延时
    CY = SDA;                   //读应答信号           

    SCL = 0;                    //拉低时钟线
    Delay5us();                 //延时

    return CY;                  //此处返回值到cy,可以明白。但是返回的值怎么判别从器件应答了呢?
}

一周热门 更多>