原子,我用IIC向MPU6050的寄存器写入数据
void Single_WriteI2C(unsigned char SlaveAddress1,unsigned char REG_Address,unsigned char REG_data)
{
IIC_Start();
IIC_Send_Byte(SlaveAddress1);//器件地址
IIC_Wait_Ack();
IIC_Send_Byte(REG_Address);//寄存器地址
IIC_Wait_Ack();
IIC_Send_Byte(REG_data);//写入的数值
IIC_Wait_Ack();
IIC_Stop();//产生一个停止条件
delay_ms(10);
}
用IIC读MPU6050的寄存器的数据,代码如下
unsigned char Single_ReadI2C(unsigned char REG_Address)
{
unsigned char REG_data;
IIC_Start(); //起始信号
IIC_Send_Byte(SlaveAddress); //发送设备地址+写
IIC_Wait_Ack();
IIC_Send_Byte(REG_Address); //发送存储单元地址
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(SlaveAddress+1); //发送设备地址+读信号
IIC_Wait_Ack();
REG_data=IIC_Read_Byte(0);
IIC_Stop();//产生一个停止条件
return REG_data;
}
void READ_MPU6050(void)
{
BUF[0]=Single_ReadI2C(ACCEL_XOUT_H);
BUF[1]=Single_ReadI2C(ACCEL_XOUT_L);
T_X=(BUF[1]<<8)|BUF[0];
T_X/=16.4;
}
主函数:
int main(void)
{
u16 i=0;
SystemInit();
delay_init(72); //延时初始化
NVIC_Configuration();
uart_init(9600);
LED_Init();
LCD_Init();
InitMPU6050();
IIC_Init();
POINT_COLOR=BLUE;//设置字体为蓝色
while(1)
{
//InitMPU6050();
READ_MPU6050();
printf("[%6d]\n", T_X); //printf("jie");
//Div_Value(dis,T_X);
i++;
delay_ms(30);
if(i==20)
{
LED0=!LED0;//提示系统正在运行
i=0;
}
}
}
读跟写寄存器有错吗?读不到T_X值啊,用PRINTF函数,输出总为0.用示波器测SDA口,有高低的电平变化,但是就是测不到值,麻烦大家帮我看看
|