温度传感器DS18B20
温度传感器DS18B20
DS18B20 中的温度传感器可完成对温度的测量, 以 12 位转化为例:用 16 位符号扩展的二进制补码读 数形式提供,以0.0625℃/LSB形式表达,其中S为符 号位。 LS Byte:
Bit7 23 Bit6 22 Bit5 21 Bit4 20 Bit3 2-1 Bit2 2-2 Bit1 2-3 Bit0 2-4
DS18B20参考子程序2
WRITE_1820: ;写DS18B20的子程序(有具体的时序要求) MOV R2,#8 ;一共8位数据 CLR C WR1: CLR P1.0 MOV R3,#6 DJNZ R3,$ RRC A MOV P1.0,C MOV R3,#23 DJNZ R3,$ SETB P1.0 NOP DJNZ R2,WR1 SETB P1.0 RET
DS18B20参考子程序3
READ_18200: ; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据 MOV R4,#2 ; 将温度高位和低位从DS18B20中读出 MOV R1,#28H ; 低位存入28H(TEMPER_L),高位存入29H(TEMPER_H) RE00:MOV R2,#8 ; 数据一共有8位 RE01:CLR C SETB P1.0 NOP NOP CLR P1.0 NOP NOP NOP SETB P1.0 MOV R3,#9 RE10:DJNZ R3,RE10 MOV C,P1.0 MOV R3,#23 RE20:DJNZ R3,RE20 RRC A DJNZ R2,RE01 MOV @R1,A INC R1 DJNZ R4,RE00 RET
温度传感器DS18B20
实验系统采用的温度传感器DS18B20是美国 DALLAS公司推出的增强型单总线数字温度传感器。 DS18B20的主要特征: 全数字温度转换及输出。 先进的单总线数据通信。 最高12位分辨率,精度可达土0.5摄氏度。 12位分辨率时的最大工作周期为750毫秒。 可选择寄生工作方式。 检测温度范围为–55°C ~+125° 内置EEPROM,限温报警功能。 64位光刻ROM,内置产品序列号,方便多机挂接。 多样封装形式,适应不同硬件系统。
实验电路
实验要求与任务
本实验要求示例程序为读取 DS18B20 温度转 换数据,并在数码管上以十进制形式显示。 提示:这里用两位数码管来显示温度。显示 范围00到99度,显示精度为1度。因为12位转化时 每一位的精度为0.0625度,我们不要求显示小数所 以可以抛弃低4位,将高位中的低4位和低位中的 高4位合并获得一个新字节,这个字节就是实际测 量获得的温度。这个转化温度的方法非常简洁无 需乘于0.0625系数
DS18B20读时间隙
读时间隙时控制时的采样时间应该更加的精确才行,读时间 隙时也是必须先由主机产生至少1uS的低电平,表示读时间的起 始。随后在总线被释放后的15uS中DS18B20会发送内部数据位, 这时控制如果发现总线为高电平表示读出“1”,如果总线为低电 平则表示读出数据“0”。每一位的读取之前都由控制器加一个起 始信号。注意:如图所示,必须在读间隙开始的15uS内读取数据 位才可以保证通信的正确。
DS28B20芯片存储器操作指令表
Write Scratchpad (向RAM中写数据)[4EH] Read Scratchpad (从RAM中读数据)[BEH] Copy Scratchpad (将RAM数据复制到EEPROM中) [48H] Convert T(温度转换)[44H] Recall EEPROM(将EEPROM中的报警值复制到 RAM)[B8H]
Read Power Supply(工作方式切换)[B4H]
DS18B20写时间隙
写时间隙分为写“0”和写“1”,时序如图。在写数据时间 隙的前15uS总线需要是被控制器拉置低电平,而后则将是芯片 对总线数据的采样时间,采样时间在15~60uS,采样时间内如 果控制器将总线拉高则表示写“1”,如果控制器将总线拉低则 表示写“0”。每一位的发送都应该有一个至少15uS的低电平起 始位,随后的数据“0”或“1”应该在45uS内完成。整个位的发 送时间应该保持在60~120uS,否则不能保证通信的正常。
温度传感器DS18B20
DS18B20 的管脚排列如图: DQ 为数字信号输入/输出端; GND 为电源地; VDD 为外接供电电源输入端 (在寄生电源接线方式时接地)。
温度传感器DS18B20
DS18B20 内部结构主要由四部分组成: 64 位光刻 ROM、 温度传感器、 非挥发的温度报警触发器 TH 和 TL、 配置寄存器。
控制器对DS18B20操作流程
若要读出当前的温度数据我们需要执行 两次工作周期, 第一个周期为复位、跳过ROM指令、执行 温度转换存储器操作指令、等待500uS温度 转换时间。 紧接着执行第二个周期为复位、跳过ROM 指令、执行读RAM的存储器操作指令、读 数据(最多为9个字节,中途可停止,只读 简单温度值则读前2个字节即可)。
MS Byte:
Bit15 S Bit14 S Bit13 S Bit12 S Bit11 S Bit10 26 Bit9 25 Bit8 24
Bit7 23 Bit15 S
Bit6 22 Bit14 S
Bit5 21 Bit13 S
Bit4 20 Bit12 S
Bit3 2-1 Bit11 S
Bit2 2-2 Bit10 26
Bit1 2-3 Bit9 25
Bit0 2-4 Bit8 24
这是 12 位转化后得到的 12 位数据,存储在 18B20 的两个 8 比特的 RAM 中,二进制中的前面 5 位是符号位,如果测得的 温度大于 0,这 5 位为 0,只要将测到的数值乘于 0.0625 即可得 到实际温度;如果温度小于 0,这 5 位为 1,测到的数值需要取 反加 1 再乘于 0.0625 即可得到实际温度。 例如:+125℃的数字输出为 07D0H,+25.0625℃的数字输 出为 0191H,-25.0625℃的数字输出为 FF6FH,-55℃的数字输 出为 FC90H。
DS28B20芯片ROM指令表
Read ROM(读ROM)[33H] (方括号中的 为16进制的命令字) Match ROM(指定匹配芯片)[55H] Skip ROM(跳跃ROM指令)[CCH] Search ROM(搜索芯片)[F0H] Alarm Search(报警芯片搜索)[ECH]
实验流程图
DS18B20参考子程序1
INIT_1820: ; 这是DS18B20复位初始化子程序 SETB P1.0 NOP CLR P1.0 MOV R1,#3 ;主机发出延时复位低脉冲 TSR1:MOV R0,#163 DJNZ R0,$ DJNZ R1,TSR1 SETB P1.0 ;然后拉高数据线 NOP NOP NOP MOV R0,#25H TSR2:JNB P1.0,TSR3 ;等待DS18B20回应 DJNZ R0,TSR2 LJMP TSR4 ; 延时 TSR3:SETB FLAG1 ; 置标志位,表示DS1820存在 LJMP TSR5 TSR4:CLR FLAG1 ; 清标志位,表示DS1820不存在 LJMP TSR7 TSR5:MOV R0,#117 TSR6:DJNZ R0,TSR6 ; 时序要求延时一段时间 TSR7:SETB P1.0 RET
控制器对DS18B20操作流程
1.
2.
3.
4.
5.
复位:由单片机给DS18B20单总线500uS的低电平信号。当18B20 接到此复位信号后则会在15~60uS后回发一个芯片的存在脉冲。 存在脉冲:在复位电平结束之后,控制器应该将数据单总线拉高, 以便于在15~60uS后接收存在脉冲,存在脉冲为一个60~240uS的 低电平信号。 控制器发送ROM指令:双方打完了招呼之后最要将进行交流了, ROM指令共有5条,每一个工作周期只能发一条,ROM指令分别 是读ROM数据、指定匹配芯片、跳跃ROM、芯片搜索、报警芯 片搜索。ROM指令在下文有详细的介绍。 控制器发送存储器操作指令:在ROM指令发送给18B20之后,紧 接着(不间断)就是发送存储器操作指令了。存储器操作指令的 功能是命令18B20作什么样的工作,是芯片控制的关键。 执行或数据读写:一个存储器操作指令结束后则将进行指令执行 或数据的读写,这个操作要视存储器操作指令而定。如执行温度பைடு நூலகம்转换指令则控制器(单片机)必须等待18B20执行其指令,一般 转换时间为500uS。如执行数据读写指令则需要严格遵循18B20的 读写时序来操作。