本人在调试MPU6050的时候,发现使用的是同一个模块,2个程序中从机的IIC的地址确不一样,两个程序烧录进去都能实时显示数据。既然从机IIC的地址是固定的,那么两个软件的从机IIC地址不一样怎么可能都能通信成功呢?经过一番探讨,原来还是在软件中作了手脚。
以下是程序分析:
0x01:
#define MPU_ADDR 0X68
u8 MPU_Write_Byte(u8 reg,u8 data)
{
MPU_IIC_Start();
MPU_IIC_Send_Byte((MPU_ADDR<<1)|0);//发送器件地址+写命令
if(MPU_IIC_Wait_Ack()) //等待应答
{
MPU_IIC_Stop();
return 1;
}
MPU_IIC_Send_Byte(reg); //写寄存器地址
MPU_IIC_Wait_Ack(); //等待应答
MPU_IIC_Send_Byte(data);//发送数据
if(MPU_IIC_Wait_Ack()) //等待ACK
{
MPU_IIC_Stop();
return 1;
}
MPU_IIC_Stop();
return 0;
}
0x02:
#define SLAVEADRESS 0xD0
void IIC_WriteData(uint8_t SlaveAddress,uint8_t REG_Address,uint8_t REG_data)
{
IIC_Start(); //?eê?D?o?
IIC_SendByte(SlaveAddress); //发送器件地址+写命令
IIC_SendByte(REG_Address);
IIC_SendByte(REG_data);
IIC_Stop();
}
分析:
(0x68 << 1)|0 = 1101 0000 b =0xD0;
|