dirtwillfly 发表于 2014-8-20 11:29 
是不是温度换算部分的代码有问题?
//获取温度
unsigned int Get_Tmp(void)
{
u8 a=0;
u8 b=0;
unsigned int tmp ;
// float temp=0.0f;
// __disable_irq(); //关闭总中断
TEMP_18b20Init();
TEMP_WByte(ROM_Read_Cmd);
TEMP_18b20Init();
TEMP_WByte(ROM_Skip_Cmd);//跳过读序列号操作
TEMP_WByte(Convert_T); //启动温度转换
// __enable_irq();//开放总中断
Delay_Nms(100);//等待DS18b20转换完成
// __disable_irq();//; 关闭总中断
TEMP_18b20Init();
TEMP_WByte(ROM_Skip_Cmd);
TEMP_WByte(Read_Scratchpad); //读取寄存器内容(可以从寄存器0读到寄存器8)
a= TEMP_RByte(); //温度低8位
b= TEMP_RByte(); //温度高8位
TEMP_ResetPulse(); //中断数据读取
tmp = (b<<8) | a ;
if(b & 0xF0)
{
tmp = ~tmp+1 ;
}
// __enable_irq();//开放总中断
// *interger = (tmp>>4) & 0x00FF; //整数部分
// *decimal = (tmp & 0x000F) * 625 ; //小数部分
// SysTick_CounterCmd(SysTick_Counter_Enable);
//USART_ITConfig( USART1, USART_IT_RXNE, ENABLE );
// temp=(float) (tmp * 0.0625f);
return tmp;
}
|