多点测试:(两个)
步骤:
1.先读出每个传感器的唯一ROM序列;
/*********************************
* @函数名:DS18B20_Read_64Rom
* @描 述:读64位的ROM 唯一标识
* @说 明:
* @参 数:*buffer 读出的8个字节的数据
* @返回值:无
*********************************/
void DS18B20_Read_64Rom(uchar *buffer)
{
uchar i;
DS18B20_Reset();//复位
DS18B20_Write_Com(0x33);//读64位ROM
for(i=0;i<8;i++) //读取64个字节
buffer[i]=DS18B20_Read_Data();
}
2.用两个数组存读出来的序列号:
3.写入ROm序列号,并启动转换温度:
/*********************************
* @函数名:DS18B20_Write_Rom
* @描 述:写64ROM
* @说 明:发送匹配ROM命令 0x55再写入8字节的ROM
* @参 数:*buffer 要发送的存放ROM的数组
* @返回值:无
*********************************/
void DS18B20_Write_Rom(uchar *buffer)
{
uchar i;
DS18B20_Write_Com(0x55); //ROM匹配
for(i = 0;i < 8;i++)
DS18B20_Write_Com(buffer[i]); //写入8个字节的ROM
}
/*********************************
* @函数名:DS18B20_Handle
* @描 述:温度处理
* @说 明:1. 复位 2.发送ROM命令 3.发送暂存器指令 读RAM 4.数据
* @参 数:无
* @返回值:无
*********************************/
void DS18B20_Handle(uchar *buffer)
{
uchar xdata value_High,value_Low;
float num;//保存小数
DS18B20_Reset();//复位
//DS18B20_Write_Com(0xcc);//发送指令CCH,跳过ROM操作
//DS18B20_Write_Com(0x33);//读64位ROM
DS18B20_Write_Rom(buffer); //匹配ROM 并写入64ROM
DS18B20_Write_Com(0x44);//发送指令44H,启动温度转换
Delay10us();
DS18B20_Reset();//复位
DS18B20_Write_Rom(buffer); //匹配ROM 并写入64ROM
DS18B20_Write_Com(0xbe);//发送指令BEH,读取9字节RAM数据的前两个数据
Delay10us();
value_Low=DS18B20_Read_Data();//先读低字节Byte0
value_High=DS18B20_Read_Data();//高字节Byte1
value_High<<=4;//整数的高3位
value_High+=(value_Low&0xf0)>>4;//整数的低4位
DS18B20_Buffer[0]=value_High;//整数
num=(value_Low&0x0f)*0.0625;//小数
DS18B20_Buffer[1]=(uchar)(num*100);//小数
}
|