数字温度传感器ds18b20什么时候进行报警搜索,怎样检测报警标志位

报警标志位具体怎么检测

数字温度传感器DS18b20只能测量温度,本身并无报警功能。当需要用它来监控温度时,需要在程序中,设定报警温度的上限与下限。然后实时读取温度值并与这个温度限值进行比较,高于 上限或低于下限量,通过点亮不同颜色的LED灯或驱动蜂鸣器来完成报警功能。

比如,设定温度上限为32℃,下限设定为25℃,
void deal(uint t) //报警温度范围设定
{
uchar i; //定义变量
if((t>warn_l2)&&(t<=warn_l1)) //大于25度小于27度
warn(40,0x01); //长音报警,显示温度
else if(t<=warn_l2) //小于25度
warn(10,0x03); //短音报警,显示温度
else if((t<warn_h2)&&(t>=warn_h1)) //小于32度大于30度
warn(40,0x04); //长音报警,显示温度
else if(t>=warn_h2) //高于32度
warn(10,0x0c); //短音报警,显示温度
else //正常范围
{
for(i=40;i>0;i--) //循环
dis_temp(get_temp()); //显示正常温度
}
}追问

哦 谢谢 有一点不明白 数据手册里有报警标志位flag不知道能不能用来判断是否报警

追答

可以用。所谓18b20的报警标志位,只是由18b20提供一个存储温度上、下限设定值的寄存空间,这个设定值是需要编程写入的,然后由18b20内部去比较设定值与测量值的高低,当高于或低于设定范围时,它会通过总线向CPU发出一串脉冲,这串脉冲也是需要编程指挥CPU去读取,然后再编程来区分是高于设定温度还是低于设定温度,最后再编程通过CPU端口输出相应控制信号去驱动蜂鸣器发声或者是驱动LED发光来完成报警功能。
两相比较,这岂止是绕了360度,简直是绕了720度的弯,所以但凡编程人员都不会去做这种得不偿失的工作。不信你去网上搜一搜,看看有谁采用这样的操作方法?

追问

原来这么麻烦 谢谢了

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-09-17
  数字温度传感器根据温度的设置来达到报警的目的。
  数字温度传感器DS18b20只能测量温度,本身并无报警功能。当需要用它来监控温度时,需要在程序中,设定报警温度的上限与下限。然后实时读取温度值并与这个温度限值进行比较,高于 上限或低于下限量,通过点亮不同颜色的LED灯或驱动蜂鸣器来完成报警功能。
比如,设定温度上限为32℃,下限设定为25℃,
void deal(uint t) //报警温度范围设定
{
uchar i; //定义变量
if((t>warn_l2)&&(t<=warn_l1)) //大于25度小于27度
warn(40,0x01); //长音报警,显示温度
else if(t<=warn_l2) //小于25度
warn(10,0x03); //短音报警,显示温度
else if((t<warn_h2)&&(t>=warn_h1)) //小于32度大于30度
warn(40,0x04); //长音报警,显示温度
else if(t>=warn_h2) //高于32度
warn(10,0x0c); //短音报警,显示温度
else //正常范围
{
for(i=40;i>0;i--) //循环
dis_temp(get_temp()); //显示正常温度
}
}
相似回答