ST_VL53L0X开发记录_IIC读一个字节的函数的个人理解

来源:互联网 发布:淘宝详情页图片上传 编辑:程序博客网 时间:2024/06/06 06:51

在看VL53L0X代码的过程中,发现了这样一句话看不懂,没办法,代码小菜鸟只能一点点学习了。

//读一个字节,ack=1时,发送ACK,ack=0时,发送nACK
u8 IIC_Read_Byte(unsigned char ack)

{
unsigned char i,receive=0;
SDA_IN();                             //SDA设置为输入,这里已经对SDA対应的IO口进行了 宏定义
    for(i=0;i<8;i++ )                         //循环8次
{               
                IIC_SCL=0;                           
                delay_us(2);
IIC_SCL=1;                   /前面都是SCL的读写数据的始终准备
                receive<<=1;                    //注意这句话:类比于a=+1,即变量receive右移一位再赋给自己
                if(READ_SDA)  receive++;   //这句话是SDA传输的重点!!!如果是读8位的话,循环8次,这个数据有多大,就看8位里面有多少个1,这是每移位一次,都要判断当前
delay_us(1);                          //SDA上是高还是低,対应的receive移位的这一位是高是低
    }  
    if (!ack)                                             //ack应答,注意,什么时候发送 应答     
        IIC_NAck();//·
    else
        IIC_Ack(); // 
    return receive;
}