MPU9250实验,IIC读器件IIC地址有点问题,IIC_Send_Byte((addr<<1)|0); //发送器件地址+写命令,这句话始终不明白啥意思

2019-07-20 12:04发布

//IIC读一个字节
//reg:寄存器地址
//返回值:读到的数据
u8 MPU_Read_Byte(u8 addr,u8 reg)
{
    u8 res;
    IIC_Start();
                        IIC_Send_Byte((addr<<1)|0); //发送器件地址+写命令????
                        IIC_Wait_Ack();             /*等待应答*/
                        IIC_Send_Byte(reg);         /*写寄存器地址*/
                        IIC_Wait_Ack();             /*等待应答*/
                IIC_Start();                 //??为啥两个停止??
                        IIC_Send_Byte((addr<<1)|1); //发送器件地址+读命令???为啥发送两个地址???
                        IIC_Wait_Ack();             /*等待应答*/
                        res=IIC_Read_Byte(0);                    /*读数据,发送nACK*/  
    IIC_Stop();                   /*产生一个停止条件*/
    return res;  
}

问题1:为啥也要两个    IIC_Start();?
问题2:IIC_Send_Byte((addr<<1)|0); //发送器件地址+写命令,这句话什么意思?为啥addr要左移1位,然后|0?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。