当前位置: 代码迷 >> 综合 >> DS18B20--避免盲目关中断(750ms之间是可以处理中断的)
  详细解决方案

DS18B20--避免盲目关中断(750ms之间是可以处理中断的)

热度:90   发布时间:2023-11-27 15:55:24.0

引言:单线总线系统包括一个总线控制器和一个或多个从机。

DS18B20是单总线通信器件,现在我们只讨论点对点的控制---通过一个DS18B20测得温度值

****先引述一个至关重要的问题:温度转换750ms的时间单片机是可以干其他事情的,比如说处理中断,温度转换是DS18B20自己的事情,但是以下四条指令绝对不能被中断:

Write_DS18B20(0xcc); //忽略地址
Write_DS18B20(0xbe);  //读取温度数据命令;LSB = Read_DS18B20(); //读取低八位(EEPROM的第0字节)
MSB = Read_DS18B20(); //读取高八位(EEPROM的第1字节)

(注:读写一个字节的数据大概几十微秒,相比750ms以及很好了)

       这是理论上的操作,实际操作过程中,我们其实不需要关中断,因为一直在重复执行温度测量的函数,就算一次没有成功,多测几次就行(实测有效)。实际上对时间要求不是特别高的程序来说,整个发送指令到温度数据传回单片机的过程是不需要延时的,(初始化等要求时序的步骤还是要精确延时),如果是对温度采集时间要求很高的项目,也不会用ds18b20,毕竟750ms的温度转换时间。。。。。。

首先,我们要知道它的原理以及它的内部结构:

1.***EEPROM :由两个字节组成,TL,TH,分别是温度下限和温度上限(都是用户字节);

2.高速暂存器(RAM):第0,1字节为温度数据的低八位和高八位,第2,3字节为从EEPROM的TL 和 TH 复制过来的温度下限和温度上限;

(未完待续);