温度误报警的分析和解决方案 1.故障描述: 根据现场的反馈和仿真模拟测试,故障情况如下: 单板反复热插拔,温度读数变为85C。但重复插拔或重新上电,又可恢复正常读数。 2.故障分析: 温度传感器 DS18S20 在测试模式下,会将温度寄存器的数值设为 85C。此时如果直接读取DS18S20的温度,得到的结果就是85C。 在单片机和 DS18S20 进行通讯过程中,如果通讯被打断,比如有高一级中断发生或其它事件如瞬时断电/上电或ESD 冲击, 则DS18S20的通讯线可能挂死并进入测试模式。此时的状态,既可能无法和DS18S20 通讯,也可能始终读到 85C的数据或其它随机数据。 3.解决方案: 为避免以上情况的发生,可在每次单片机和 DS18S20 进行通讯读取温度的子程序的前面增加以下语句,确保 DS18S20 从总线挂死或测试模式下退出来,并完成正常的温度转换和数据上报。 Reset / Presence Detect 总线初始化启动/检测过程 0xCC /忽略ROM码 (或 0x55 /核对ROM码,) 0x64 / 内部复位指令,将温度寄存器设为85C初始值,退出测试模式 Reset / Presence Detect 总线初始化启动/检测过程 0xCC /忽略ROM码 (或 0x55 /核对ROM码,) 0x44 / 温度转换指令,进行温度转换并将结果存入温度寄存器 请特别注意,内部复位指令 64H 执行后必须紧跟着执行温度转换指令 44H,因为 64H 指令在复位 DS18S20 并使其退出测试模式时,给温度寄存器设置的初始值是 85C。在执行了温度转换指令44H 之后,温度寄存器的数据才是实际的温度值。