本人在調試MPU6050的時候,發(fā)現(xiàn)使用的是同一個模塊,2個程序中從機的IIC的地址確不一樣,兩個程序燒錄進去都能實時顯示數(shù)據(jù)。既然從機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);//發(fā)送器件地址+寫命令
if(MPU_IIC_Wait_Ack()) //等待應答
{
MPU_IIC_Stop();
return 1;
}
MPU_IIC_Send_Byte(reg); //寫寄存器地址
MPU_IIC_Wait_Ack(); //等待應答
MPU_IIC_Send_Byte(data);//發(fā)送數(shù)據(jù)
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); //發(fā)送器件地址+寫命令
IIC_SendByte(REG_Address);
IIC_SendByte(REG_data);
IIC_Stop();
}
分析:
(0x68 << 1)|0 = 1101 0000 b =0xD0;
|