|
|
本人在調(diào)試MPU6050的時(shí)候,發(fā)現(xiàn)使用的是同一個(gè)模塊,2個(gè)程序中從機(jī)的IIC的地址確不一樣,兩個(gè)程序燒錄進(jìn)去都能實(shí)時(shí)顯示數(shù)據(jù)。既然從機(jī)IIC的地址是固定的,那么兩個(gè)軟件的從機(jī)IIC地址不一樣怎么可能都能通信成功呢?經(jīng)過(guò)一番探討,原來(lái)還是在軟件中作了手腳。
以下是程序分析:
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ā)送器件地址+寫(xiě)命令
if(MPU_IIC_Wait_Ack()) //等待應(yīng)答
{
MPU_IIC_Stop();
return 1;
}
MPU_IIC_Send_Byte(reg); //寫(xiě)寄存器地址
MPU_IIC_Wait_Ack(); //等待應(yīng)答
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ā)送器件地址+寫(xiě)命令
IIC_SendByte(REG_Address);
IIC_SendByte(REG_data);
IIC_Stop();
}
分析:
(0x68 << 1)|0 = 1101 0000 b =0xD0;
|
|