单片机课程设计:八路温度巡回检测系统 - 图文 联系客服

发布时间 : 星期四 文章单片机课程设计:八路温度巡回检测系统 - 图文更新完毕开始阅读53025fc8d5bbfd0a795673d5

DS18B20是DALLAS半导体公司推出的第一片支持“一线总线”接口的温度传感器,他它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,可直接将温度转化成串行数字信号供处理器处理。DS18B20具有以下优点:

(1) 适应电压范围宽,电压范围在3.0V~5.5V,在寄生电源方式下可由数

据线供电。

(2) 独特的单线接口方式,与微处理器连接时只需要一条口线即可实现

微处理器与DS18B20的双向通信。

(3) 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组

网多点测温。

(4) 在使用中不需要任何外围元件,全部传感元件以及转换电路集成在

形如一直三极管的集成电路内。

(5) 测温范围-55℃~+125℃,在-10℃~+85℃时进度为±0.5℃

(6) 可编程分辨率为9~12位,对应的可分辨温度分别为0.5℃、

0.25℃、0.125℃和0.0625℃,可实现高精度测温。

(7) 负压特性。电源极性接反时,芯片不会因为过热而烧毁,但不能正

常工作。

4.2 DS18B20结构及其工作原理

图4.1DS18B20内部结构图

DS18B20的内部结构图如图4.1所示。由此我们可以看出DS18B20主要由4部分组成:64位ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如图4.2所示,其中DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端,在寄生电源接线方式时接地。

图4.2 DS18B20引脚和封装

每颗DS18B20在出厂前都有一个64位光刻ROM,它可以看作该DS18B20的地址序列码。其各位排列顺序是:开始8位为产品类型标号,接下来48位是该DS18B20自身的序列号,最后8位是前面56位的CRC循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一条总线 挂接多个DS18B20的目的。

由于DS18B20是在一根I/O线上读写数据,因此,对读写的数据位有着严格的时序要求。DS18B20有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:复位时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。

(1) DS18B20的复位时序:

图4.3 DS18B20复位时序图

程序实现如下:

/******************************************************************** * 名 称:reset() * 功 能:18b20复位

********************************************************************/ #define DQ RB7

#define DQ_HIGH() TRISB7=1

#define DQ_LOW() TRISB7=0;DQ=0 void reset() {

uchar st=1;

DQ_HIGH(); // 先拉至高电平 NOP();NOP(); while(st) {

DQ_LOW(); // 低电平 delayus(70,30); // 延时503us

DQ_HIGH(); //释放总线等电阻拉高总线 delayus(4,4); //延时60us

}

(2) DS18B20的读时序:

对于DS18B20的读时序分为读0时序和读1时序两个过程。

对于DS18B20的读时隙是从主机把单总线拉低之后,在15uS之内释放单总线,以让DS18B20把数据传输到单总线上。DS18B20在完成一个读时序过程,至少需要60us才能完成。

}

if(DQ==1) //没有接收到应答信号,继续复位

st=1; st=0;

else //接收到应答信号 delayus(50,10); //延时430us

图4.4 DS18B20读时序图

/******************************************************************** * 名 称:read_byte() * 功 能:18b20读字节 * 出口参数:读出18B20的内容

********************************************************************/ uch read_byte() { }

(3) DS18B20的写时序:

对于DS18B20的写时序仍然分为写0时序和写1时序两个过程。 对于DS18B20写0时序和写1时序的要求不同,当要写0时序时,单总线要被拉低至少60us,保证DS18B20能够在15us到45us之间能够正确地采样IO总线上的“0”电平,当要写1时序时,单总线被拉低之后,在15us之内就得释放单总线。

uch i;

uch value = 0; //读出温度 static bit j; for (i = 8;i > 0;i--) { }

return (value);

value >>= 1; DQ_LOW();

NOP();NOP();NOP();NOP();NOP();NOP(); //6us

DQ_HIGH(); //拉至高电平 NOP();NOP();NOP();NOP();NOP(); j = DQ;

if (j) value |= 0x80;

delay(2, 7); //63us

//4us

图4.5 DS18B20写时序图

/********************************************************************