//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?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
I2C写时序,就是要两个START信号.
I2C的地址是7位的.与读写位一起构成一个字节.就是这么简单.
一周热门 更多>