DS18B20是常用的数字温度传感器,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。
DS18B20独特的单线接口方式,使得它可以仅凭一条口线就可与微处理器连接,十分方便。
但是这样也带来了一个问题,当我们想要同时使用多个DS18B20的时候,我们难道要为每一个DS18B20单独配置一条IO口来进行通信吗?这样显然是不现实的,那么我们有没有一种方法,可以使我们在单线上控制多个设备呢?
这就涉及到对DS18B20内部64位ROM编码的利用。
在每一个DS18B20的内部,都有64位独特的激光ROM编码,分别由一个字节的FAMILY CODE,六个字节的SERIAL NUMBER,一个字节的CRC BYTE组成。
编码就像人的身份证一样,具有唯一性。当单线上存在多个温度传感器时,我们能通过它,指定一个DS18B20进行操作。这样的目的是为了防止DS18B20回应处理器时争抢总线,导致处理器无法正确接收数据。
接下来我就说说如何利用这64位的编码,来对DS18B20进行操作。
一、最基本的驱动
需要对DS18B20进行操作,最基本的驱动文件肯定是不能少的,没有这个,我们就什么也做不了。
所以我们首先编写驱动文件。(因为这个是基础,所以我不在这里多说,直接附上代码)
延时函数:(这个函数因为芯片晶振的不同,也会有所不同,所以我们不给出具体代码)
void Delay1us();
void Delay60us();
void De