编程环境为MDK5
正确的代码:
float hmc5883l_z_read( void )
{signed short int x,y;
double angle ;
unsigned char xmsb = 0,xlsb =0 ;
unsigned char ymsb = 0,ylsb =0 ;
xmsb = iic_read_reg(HMC_ADDR,HMC_X_MSB);
xlsb = iic_read_reg(HMC_ADDR,HMC_X_LSB);
ymsb = iic_read_reg(HMC_ADDR,HMC_Y_MSB);
ylsb = iic_read_reg(HMC_ADDR,HMC_Y_LSB);
x = xmsb << 8 | xlsb ;
y = ymsb << 8 | ylsb ;
if( x > 32678 ){
x = -(0xFFFF - x + 1);
}
if( y > 32678 ){
y = -(0xFFFF - y + 1);
}
angle= atan2((double)y,(double)x) * (180 / 3.14159265) + 180;
iic_write_reg(HMC_ADDR,HMC_REG_C,0X00);
return angle ;
}
错误代码:
float hmc5883l_z_read( void )
{signed short int x,y;
double angle ;
unsigned char xmsb = 0,xlsb =0 ;
unsigned char ymsb = 0,ylsb =0 ;
xmsb = iic_read_reg(HMC_ADDR,HMC_X_MSB);
xlsb = iic_read_reg(HMC_ADDR,HMC_X_LSB);
ymsb = iic_read_reg(HMC_ADDR,HMC_Y_MSB);
ylsb = iic_read_reg(HMC_ADDR,HMC_Y_LSB);
x = (int)((xmsb << 8) | xlsb) ;
y = (int)((ymsb << 8) | ylsb) ;
angle= atan2((double)y,(double)x) * (180 / 3.14159265) + 180;
iic_write_reg(HMC_ADDR,HMC_REG_C,0X00);
return angle ;
}