|
还要read那个里面的的状态标志位?那如果不读的话,我是不是应该对有无应答位做个判断,无的话就重新不停发设备地址,而不是发设备地址+1去读。这有没有影响。你有没有用过这传感器?而且现在我也没搞到那个数据该怎么保存,然后什么生产消费的阶段,我现在就是收到个数显示个数而已。你看源程序这么写的
void Multiple_read_ADXL345(void)
{ uchar i;
IIC_Start(); //起始信号
IIC_Send_Byte(SlaveAddress) ; //发送设备地址+写信号
IIC_Send_Byte(0x32) ; //发送存储单元地址,从0x32开始
IIC_Start() ; //起始信号
IIC_Send_Byte(SlaveAddress+1) ; //发送设备地址+读信号
for (i=0; i<6; i++) //连续读取6个地址数据,存储中BUF
{
BUF = IIC_Read_Byte(); //BUF[0]存储0x32地址中的数据
if (i == 5)
{
IIC_NAck(); //最后一个数据需要回NOACK
}
else
{
IIC_Ack(); //回应ACK
}
}
IIC_Stop() ;
}
u8 IIC_Wait_Ack(void)
{
u8 a=0;
SDA_IN(); //SDA设置为输入
GPIO_SetBits(GPIOA,SDA);
GPIO_SetBits(GPIOA,SCL);
delay_us(2);
a = GPIO_ReadInputDataBit( GPIOA, SDA);
//while(a==1);
GPIO_ResetBits(GPIOA, SCL) ;//时钟输出0
delay_us(2);
return a;
}
void IIC_Send_Byte(u8 txd)
{
u8 t;
SDA_OUT();
for(t=0;t<8;t++)
{
if((txd&0x80)>>7) GPIO_SetBits(GPIOA,SDA);
else GPIO_ResetBits(GPIOA, SDA);
txd<<=1;
GPIO_SetBits(GPIOA,SCL);
delay_us(1);
GPIO_ResetBits(GPIOA, SCL);
delay_us(1);
}
IIC_Wait_Ack();
} |
|