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?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
操作系统
1楼-- · 2019-07-20 13:22
楼主在这里问,还不如自己去百度..
I2C写时序,就是要两个START信号.
I2C的地址是7位的.与读写位一起构成一个字节.就是这么简单.
你恒哥00
2楼-- · 2019-07-20 17:12
 精彩回答 2  元偷偷看……

一周热门 更多>