Beispiel #1
0
void Multiple_Read_HMC5883L(void)
{   
	  u8 i;
    I2C_Start();                          //起始信号
    I2C_SendByte(0x3C);           //发送设备地址+写信号
    I2C_SendByte(0x03);                   //发送存储单元地址,从0x3开始	
    I2C_Start();                          //起始信号
    I2C_SendByte(0x3D);         //发送设备地址+读信号
	  for (i=0; i<6; i++)                      //连续读取6个地址数据,存储中BUF
    {
        BUF[i] = I2C_RecvByte();          //BUF[0]存储数据
        if (i == 5)
        {
           I2C_SendACK(1);                //最后一个数据需要回NOACK
        }
        else
        {
          I2C_SendACK(0);                 //回应ACK
        }
    }
    I2C_Stop();                           //停止信号


		M_X = BUFFER[0]<<8|BUFFER[1];
		M_Y = BUFFER[2]<<8|BUFFER[3];
		M_Z = BUFFER[4]<<8|BUFFER[5];
}
Beispiel #2
0
//*******************************************************************************************************
//从I2C设备读取一个字节数据
//*******************************************************************************************************
uchar Single_ReadI2C(uchar REG_Address)
{
	uchar REG_data;
	I2C_Start();                   //起始信号
	I2C_SendByte(SlaveAddress);    //发送设备地址+写信号
	I2C_SendByte(REG_Address);     //发送存储单元地址,从0开始	
	I2C_Start();                   //起始信号
	I2C_SendByte(SlaveAddress+1);  //发送设备地址+读信号
	REG_data=I2C_RecvByte();       //读出寄存器数据
	I2C_SendACK(1);                //接收应答信号
	I2C_Stop();                    //停止信号
	return REG_data;
}
Beispiel #3
0
//**************************************
//I2C read a byte
//**************************************
u8 Single_ReadI2C(u8 REG_Address)
{
		u8 REG_data;
		I2C_Start();                   
		I2C_SendByte(SlaveAddress);    
		I2C_SendByte(REG_Address);     
		I2C_Start();                   
		I2C_SendByte(SlaveAddress+1); 
		REG_data=I2C_RecvByte();       
		I2C_SendACK(1);                
		I2C_Stop();                   
		return REG_data;
}
Beispiel #4
0
//**************************************
//从I2C设备读取一个字节数据
//**************************************
uint8_t Single_ReadI2C(uint8_t REG_Address)
{
	uint8_t REG_data;
	I2C_Start();                   //起始信号
	I2C_SendByte(SlaveAddress);    //发送设备地址+写信号
	I2C_SendByte(REG_Address);     //发送存储单元地址,从0开始
	I2C_Start();                   //起始信号
	I2C_SendByte(SlaveAddress + 1); //发送设备地址+读信号
	REG_data = I2C_RecvByte();     //读出寄存器数据
	SDA = 1;                    //写应答信号
	SCL = 1;                    //拉高时钟线
	Delay2us();                 //延时
	SCL = 0;                    //拉低时钟线
	Delay2us();                 //延时
	I2C_Stop();                    //停止信号
	return REG_data;
}