DS18B20数字温度计 (原创)_工控之家--专业提供自动化控制方案_百度空间
DS18B20百度百科
DS18B20DS-18B20 数字温度传感器本公司最新推出TS-18B20数字温度传感器,该产品采用美国DALLAS公司生产的DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。
1: 技术性能描述 1.1 独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
1.2 测温范围-55℃~+125℃,固有测温分辨率0.5℃。
1.3 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。
1.4 工作电源: 3~5V/DC 1.5 在使用中不需要任何外围元件 1.6 测量结果以9~12位数字量方式串行传送1.7 不锈钢保护管直径Φ6 1.8 适用于DN15~25, DN40~DN250各种介质工业管道和狭小空间设备测温 1.9 标准安装螺纹M10X1, M12X1.5, G1/2”任选 1.10 PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。
2:应用范围 2.1 该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域 2.2 轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制。
2.3 汽车空调、冰箱、冷柜、以及中低温干燥箱等。
2.5 供热/制冷管道热量计量,中央空调分户热能计量和工业领域测温和控制3:产品型号与规格型号测温范围安装螺纹电缆长度适用管道TS-18B20 -55~125 无 1.5 m TS-18B20A -55~125 M10X1 1.5m DN15~25TS-18B20B -55~125 1/2”G 接线盒DN40~ 604:接线说明特点独特的一线接口,只需要一条口线通信多点能力,简化了分布式温度传感应用无需外部元件可用数据总线供电,电压范围为3.0 V 至5.5 V 无需备用电源测量温度范围为-55 ° C至+125 ℃。
DS18B20的工作原理
DS18B20的工作原理DS18B20是一种数字温度传感器,具有高精度和广泛的应用范围。
它采用单总线接口进行通信,可以直接与微处理器或者其他数字设备连接。
下面将详细介绍DS18B20的工作原理。
1. 原理概述DS18B20采用了数字温度传感器的工作原理,通过测量温度对应的电压值来获取温度信息。
它内部集成为了温度传感器、模数转换器和数据存储器,可以直接输出数字信号。
2. 温度传感器DS18B20使用了特殊的温度传感器,这个传感器是由一对金属导线组成的,其中一个导线是纯铜,另一个导线是由铜和镍合金组成的。
当温度发生变化时,导线的电阻值也会发生变化,通过测量电阻值的变化可以得到温度信息。
3. 单总线接口DS18B20使用单总线接口进行通信,这意味着它只需要一个引脚来连接到主控设备。
单总线接口可以减少连接线的数量,简化电路设计。
4. 工作原理DS18B20的工作原理如下:- 当主控设备发送开始信号时,DS18B20会进入工作状态,并开始测量温度。
- DS18B20将温度转换成数字信号,并将其存储在内部的数据存储器中。
- 主控设备发送读取命令后,DS18B20会将存储的温度值发送给主控设备。
- 主控设备接收到温度值后,可以进行进一步的处理和显示。
5. 精度和分辨率DS18B20具有高精度和可调节的分辨率。
它可以提供从9位到12位的温度测量分辨率,分辨率越高,测量精度越高。
例如,当分辨率设置为12位时,温度测量精度可以达到±0.0625°C。
6. 供电方式DS18B20可以通过主控设备提供的电源进行供电,也可以使用独立的电源。
它的工作电压范围为3V至5.5V,电流消耗较低,适合在低功耗应用中使用。
7. 应用领域DS18B20广泛应用于各种需要温度测量的领域,例如:- 家用电器:空调、冰箱、洗衣机等。
- 工业自动化:温度监测和控制系统。
- 农业:温室控制、畜牧业等。
- 汽车电子:发动机温度监测、空调系统等。
数字温度传感器ds18b20的原理与应用
数字温度传感器DS18B20的原理与应用1. 概述数字温度传感器DS18B20是一种广泛应用于工业控制、计算机温控等领域的传感器。
本文将介绍DS18B20的原理和应用,并对其工作原理、特点以及应用场景进行详细阐述。
2. DS18B20的工作原理DS18B20采用了数字式温度传感器技术,其工作原理基于温度对半导体材料电阻值的变化进行测量。
具体工作原理如下:1. DS18B20内部包含一个温度传感器、位移寄存器(DS)和一个多功能I/O口。
2. 温度传感器由多个晶体管组成,当温度发生变化时,晶体管的导电能力发生变化。
3. DS18B20通过I/O口与外部控制器进行通信,并将温度数据以数字形式传输。
3. DS18B20的特点DS18B20作为一种数字温度传感器,具有许多独特的特点,包括: - 高精度:DS18B20具有高精度的温度测量能力,精确到0.5°C。
- 数字输出:DS18B20通过数字信号输出温度数据,方便与其他数字设备进行连接与通信。
- 单总线接口:DS18B20采用了单总线接口通信,可以通过一根数据线与外部控制器进行连接,简化了接线工作。
- 可编程分辨率:DS18B20的分辨率可以通过配置进行调整,可以根据具体应用需求选择不同的分辨率。
4. DS18B20的应用场景DS18B20由于其特点和功能的优势,在许多领域得到了广泛应用,包括但不限于以下场景:4.1 工业控制DS18B20可以用于工业控制系统中,用于监测和控制温度。
例如,在生产线上使用DS18B20传感器实时监测设备温度,当温度超出设定范围时,及时采取控制措施,以保证生产过程的稳定性和安全性。
4.2 计算机温控DS18B20可以作为计算机温度监测的传感器,用于检测计算机主板、CPU和其他关键部件的温度。
通过DS18B20传感器的数据,可以实时监测计算机的温度状况,并进行相应的温度调控,以提高计算机的稳定性和使用寿命。
智能数字温度传感器DS18B20
智能数字温度传感器DS18B20
由美国dallas 半导体公司生产的ds18b20型单线智能温度传感器,属于新一代适配微处理器的智能温度传感器,可把温度信号直接转换成串行数字信号供微机处理。
采用严格的焊接及封装等工艺,芯片每个引脚均用热缩管隔开,防止短路,内部封胶,防水防潮提高了测量精度,延长了使用寿命。
产品应用
1 该产品适用于冷冻库,粮仓,储罐,电讯机房,电力机房,电缆线槽等测温和控制领域.
2 轴瓦,缸体,纺机,空调,等狭小空间工业设备测温和控制。
3 汽车空调、冰箱、冷柜、以及中低温干燥箱等。
4 供热/制冷管道热量计量,中央空调分户热能计量和工业领域测温和控制.
5 冷藏库温度监测、药厂GMP 监测系统、电信机房监控、啤酒生产、楼宇自控、仓库温度监测、环境监测、过程温度监测、空调监测、孵化温度控制、养殖业温度测量、温室大棚温度监测、家用冰箱、温度报警器、温度监控系统等。
参数介绍
工作电源电压(V )
DC 3~5V 测温分辨率(%)
+0.006% 工作温度范围(℃)
-55℃~ +125℃ 测量数据传送方式
9~12位数字量串行传送 输出线连接方式
黑色:GND 黄色:DATA 红色:VDD+
线长
1米 探头尺寸
不锈钢探头6*50mm ;线耳传感器;M10*1.5mm 螺纹传感器
线耳传感器螺纹传感器
深圳嘉智捷电子技术有限公司是一家以产品研发,生产加工,销售为服务的技术型公司,拥有完整、科学的质量管理体系,主要产品有温度报警器、温湿度报警器、综合报警设备、传感器、语音拨号器等。
深圳嘉智捷电子技术有限公司以诚信、实力和产品质量获得业界的认可。
欢迎各界朋友莅临参观、指导和业务洽谈。
ds18b20
描述DS18B20的数字温度计提供9位到12位摄氏温度测量,并具有报警功能,带有非易失用户可编程触发点上下。
DS18B20的通信通过1 - Wire总线上,按照定义,只需要一条数据线(和地上)通信与中央微处理器。
它有一个-55 °C至+125温度范围° C并精确到±0.5以上的-10 °C温度范围°C至+85°C的此外,DS18B20的功率可以得到直接从数据线(“寄生电源“),无需外部电源。
每个DS18B20的有一个唯一的64位序列码,它允许多个DS18B20s功能在同一1 - Wire总线。
因此,它是简单使用一个微处理器来控制在分布式多DS18B20s 大面积。
应用程序可以受益于这个功能包括空调环境控制,内建筑物,设备或机械温度监测系统,过程监控和控制系统。
概述图1显示了DS18B20的框图和引脚说明载于引脚说明表。
64位ROM存储设备的唯一序列码。
暂存器记忆体包含了2个字节温度寄存器,用于存储从温度传感器的数字输出。
此外,暂存器提供存取1个字节的上限和下限报警触发寄存器(TH和TL)和1个字节配置寄存器。
配置寄存器允许用户设置的温度分辨率数转换到9,10,11或12位。
的TH和TL,配置寄存器和非易失性(EEPROM)中,所以他们将保留在设备断电的数据。
DS18B20的采用Maxim独有的1 - Wire总线总线通信协议,实现了使用一个控制信号。
控制线需要一个弱上拉电阻,因为所有的设备都连接到总线通过3国或开漏端口(在案件的DS18B20的DQ引脚)。
在该总线系统中,微处理器(主设备)地址的识别和使用每个设备的独特总线设备64位代码。
由于每个设备都有一个独特的代码,设备的数量,可以在一个总线解决的是几乎无限的。
1 - Wire总线协议,包括命令的详细解释和“时间槽“,是覆盖在1 - Wire总线系统部分。
另一个DS18B20的特点是能够操作,无需外接电源。
ds18b20中文资料 (2)
ds18b20中文资料介绍DS18B20是一种数字温度传感器,由Maxim Integrated公司设计和制造。
它采用单总线接口和独特的数字编码技术,可直接测量环境温度。
DS18B20的小尺寸、低功耗和数字接口使其成为智能设备、电子设备和工业自动化等领域中广泛应用的理想选择。
特点1.单总线接口:DS18B20通过单一的总线进行数据传输和通信。
这种设计简化了电路连接,降低了硬件成本。
2.数字编码技术:DS18B20使用独特的数字编码技术将温度信息转换为12位二进制数据。
这种方式大大提高了测量的准确性和稳定性。
3.多种封装:DS18B20可提供不同的封装形式,包括TO-92,SOT-223和TDFN等,以适应不同的应用场景。
4.宽工作温度范围:DS18B20可在-55°C至+125°C的温度范围内工作,适应各种极端环境。
5.低功耗:DS18B20在测量温度时,功耗非常低,这对于电池供电的应用非常重要。
电气特性DS18B20的电气特性如下:•输入电压:3V至5.5V•测量范围:-55°C至+125°C•分辨率:可配置为9到12位•精度:±0.5°C(-10°C至+85°C范围内)•电流消耗:750μA(测量),千分之一微安(静态)•输出模式:数字•温度转换时间:750ms至10ms,取决于分辨率•封装形式:TO-92、SOT-223、TDFN等应用DS18B20广泛应用于以下领域:1.温度监控系统:DS18B20可以用于实时监测环境温度,例如室内温度、水温、土壤温度等。
这在农业、工业和家庭自动化等领域非常有用。
2.智能家居:DS18B20可用于智能恒温控制系统,通过检测室内温度并自动调节暖气、空调等设备,提供舒适的居住环境。
3.电子设备:DS18B20可用于电子设备的温度监测和保护。
例如,当电子元件过热时,可以触发警报或自动关闭设备以防止损坏。
DS18B20的工作原理
DS18B20的工作原理DS18B20是一种数字温度传感器,采用了单总线数据传输协议,具有精确度高、稳定性好、体积小等特点。
本文将详细介绍DS18B20的工作原理。
DS18B20传感器由三个主要部分组成:温度传感器、模数转换器和总线接口电路。
温度传感器是由一对金属导线组成的温度变化元件,通过测量导线电阻的变化来获取温度信息。
模数转换器将模拟信号转换为数字信号,以便于处理和传输。
总线接口电路负责与主控设备进行通信。
DS18B20传感器通过单总线数据传输协议与主控设备进行通信。
在通信过程中,主控设备向传感器发送指令,传感器根据指令执行相应的操作,并将结果返回给主控设备。
传感器的工作模式可以通过指令进行设置,包括温度测量模式和电源模式等。
在温度测量模式下,主控设备发送温度转换指令给传感器,传感器开始进行温度测量。
传感器通过内部的温度传感器测量温度,并将测量结果转换为数字信号。
转换完成后,传感器将数字信号发送给主控设备,主控设备通过解析数字信号获取温度值。
DS18B20传感器的精确度由其分辨率决定。
分辨率是指传感器能够测量的温度范围内温度变化的最小单位。
DS18B20传感器支持多种分辨率,包括9位、10位、11位和12位。
分辨率越高,传感器的精确度越高,但相应地,传输的数据量也会增加。
DS18B20传感器的电源模式可以通过指令进行设置。
传感器支持两种电源模式:供电模式和断电模式。
在供电模式下,传感器一直处于工作状态,可以随时进行温度测量。
在断电模式下,传感器处于低功耗状态,只有在接收到指令时才会从低功耗状态唤醒并进行温度测量。
DS18B20传感器的总线接口电路采用了单总线数据传输协议。
单总线数据传输协议是一种串行通信协议,通过一根数据线实现数据的传输和通信。
传感器和主控设备通过数据线进行双向通信,传感器通过数据线发送数据给主控设备,主控设备通过数据线发送指令给传感器。
总结:DS18B20是一种数字温度传感器,采用了单总线数据传输协议。
DS18B20中文资料
DS18B20中文资料在现代电子技术领域,温度测量是一项非常重要的任务。
而DS18B20 作为一款常用的数字温度传感器,以其出色的性能和简单的接口,在各种温度测量应用中得到了广泛的应用。
DS18B20 是由美国达拉斯半导体公司(Dallas Semiconductor)推出的一款单线数字温度传感器。
它具有体积小、硬件开销低、抗干扰能力强、精度高等优点。
从外观上看,DS18B20 通常采用小型的TO-92 封装或者SOP 封装,这使得它能够轻松集成到各种电路中,占用极小的空间。
在性能方面,DS18B20 的测量范围非常广泛,从-55℃到+125℃,能够满足大多数实际应用场景的温度测量需求。
其测量精度在-10℃到+85℃范围内可达到 ±05℃,这对于很多对温度精度要求较高的场合来说,是非常出色的表现。
DS18B20 之所以能够在众多温度传感器中脱颖而出,很大程度上得益于其独特的单线接口。
这意味着它只需要一根数据线就可以与微控制器进行通信,大大简化了电路设计和布线工作。
在使用 DS18B20 进行温度测量时,首先需要将其正确连接到微控制器。
通常,将 DS18B20 的数据线连接到微控制器的一个通用输入输出引脚(GPIO)上。
然后,通过微控制器发送特定的指令来启动温度转换,并读取转换后的温度值。
DS18B20 的工作原理基于其内部的温度敏感元件和模数转换电路。
当接收到温度转换指令后,传感器内部的温度敏感元件会感知当前环境温度,并将其转换为对应的数字信号,然后通过单线接口传输给微控制器。
在编程方面,不同的微控制器平台可能会有一些差异,但基本的流程大致相同。
一般来说,需要先初始化单线接口,然后发送复位脉冲和搜索 ROM 指令来识别总线上的 DS18B20 设备。
接着,发送启动温度转换指令,并等待转换完成。
最后,读取转换后的温度数据,并进行相应的处理和显示。
为了确保测量的准确性和稳定性,在实际应用中还需要注意一些问题。
DS18B20
温度传感器DS18B20资料(转载)2009-03-12 18:41美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持 "一线总线"接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。
全部传感元件及转换电路集成在形如一只三极管的集成电路内。
一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。
现在,新一代的DS18B20体积更小、更经济、更灵活。
使你可以充分发挥“一线总线”的优点。
目前DS18B20批量采购价格仅10元左右。
在传统的模拟信号远距离温度测量系统中,需要很好的解决引线误差补偿问题、多点测量切换误差问题和放大电路零点漂移误差问题等技术问题,才能够达到较高的测量精度。
另外一般监控现场的电磁环境都非常恶劣,各种干扰信号较强,模拟温度信号容易受到干扰而产生测量误差,影响测量精度。
因此,在温度测量系统中,采用抗干扰能力强的新型数字温度传感器是解决这些问题的最有效方案,新型数字温度传感器DS18B20具有体积更小、精度更高、适用电压更宽、采用一线总线、可组网等优点,在实际应用中取得了良好的测温效果。
新的"一线器件"DS18B20体积更小、适用电压更宽、更经济。
DS18B20、DS1822的特性DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。
可选更小的封装方式,更宽的电压适用范围。
分辨率设定,及用户设定的报警温度存储在EEPROM 中,掉电后依然保存。
DS18B20的性能是新一代产品中最好的!性能价格比也非常出色!DS1822与DS18B20软件兼容,是DS18B20的简化版本。
省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。
继"一线总线"的早期产品后,DS1820开辟了温度传感器技术的新概念。
基于ds18b20的数字温度计设计报告
基于ds18b20的数字温度计设计报告
一、引言
随着科技的进步,温度的测量和控制变得越来越重要。
DS18B20是一款数字温度传感器,具有测量准确度高、体积小、接口简单等优点,广泛应用于各种温度测量场合。
本报告将介绍基于DS18B20的数字温度计设计。
二、DS18B20简介
DS18B20是一款由美国Dallas公司生产的数字温度传感器,可以通过数据线与微处理器进行通信,实现温度的测量。
DS18B20的测量范围为-55℃~+125℃,精度为±0.5℃。
三、数字温度计设计
1.硬件设计
数字温度计的硬件部分主要包括DS18B20温度传感器、微处理器、显示模块等。
其中,DS18B20负责采集温度数据,微处理器负责处理数据并控制显示模块显示温度。
2.软件设计
软件部分主要实现DS18B20与微处理器的通信和控制显示模块显示。
首先,微处理器通过数据线向DS18B20发送命令,获取温度数据。
然后,微处理器将数据处理后发送给显示模块,实现温度的实时显示。
四、测试结果
经过测试,该数字温度计的测量精度为±0.5℃,符合设计要求。
同时,该温度
计具有测量速度快、体积小、使用方便等优点,可以广泛应用于各种温度测量场合。
五、结论
基于DS18B20的数字温度计具有高精度、低成本、使用方便等优点,可以实现高精度的温度测量和控制。
随着科技的发展,数字温度计的应用将越来越广泛,具有广阔的市场前景。
DS18B20数字温度计(原创)
DS18B20数字温度计(原创)单片机DIY 2008-01-12 19:39:27 阅读2659 评论0 字号:大中小订阅1.原理图:2.实物图:3.汇编程序:;******************************************** 汇编*********************************************************************** **;*MCU: AT892051 *;*MCU-crystal: 12M *;*Version: 01 *;*Last Updata: 2007-5-27 *;*Author: zhaojun *;*Description: *;DS18B20的读写程序,数据脚P3.4 *;温度传感器18B20汇编程序, 采用器件默认的12位转化 *;最大转化时间750微秒,显示温度-55到+125度,显示精度 *;为0.1度,显示采用4位LED共阳显示测温值*;*************************************************;单片机内存分配申明!;*************************************************TEMPER_L EQU 40H ;用于保存读出温度的低8位TEMPER_H EQU 41H ;用于保存读出温度的高8位FLAG1 EQU 38H ;是否检测到DS18B20标志位SEC EQU 20H ;数码管个位数存放内存位置MIN EQU 21H ;数码管十位数存放内存位置TEMPL EQU 30H ;用于保存读出温度的低8位TEMPH EQU 31H ;用于保存读出温度的高8位TEMPHC EQU 32H ;温度转换寄存器低8位TEMPLC EQU 33H ;温度转换寄存器高8位BUF1 EQU 34H ;显示缓冲寄存器小数位BUF2 EQU 35H ;显示缓冲寄存器个数位BUF3 EQU 36H ;显示缓冲寄存器十数位BUF4 EQU 37H ;显示缓冲寄存器百数位TEMPDIN BIT P3.4 ;数据脚定义DIN BIT P1.7 ;小数点控制;**********************************************ORG 0000H ;主程序入口地址AJMP MAIN ;转主程序ORG 0003H ;外中断0中断入口DB 00H,00H,00H,00H,00H,00H,00H;RETI ;跳至INTEX0执行中断服务程序ORG 000BH ;定时器T0中断入口地址DB 00H,00H,00H,00H,00H,00H,00H ;RETI ;跳至定时器T0执行中断服务程序ORG 0013H ;外中断1中断入口DB 00H,00H,00H,00H,00H,00H,00H ;RETI ;跳至INTEX1执行中断服务程序ORG 001BH ;定时器T1中断入口地址DB 00H,00H,00H,00H,00H,00H,00H ;RETI ;中断返回(不开中断)ORG 0023H ;串行口中断入口地址DB 00H,00H,00H,00H,00H,00H,00H ;RETI ;中断返回(不开中断);**********************************************;两位数码管来显示温度,显示范围00到99度,显示精度为1度;因为12位转化时每一位的精度为0.0625度,我们不要求显示小数所以可以抛弃29H的低4位;将28H中的低4位移入29H中的高4位,这样获得一个新字节,这个字节就是实际测量获得的温度;无需乘于0.0625系数;**********************************************MAIN:MOV SP, #50H ;MOV P1, #0FFH ;LPTEMP:LCALL GET_TEMPER ;调用读温度子程序LCALL CONVTEMP ;温度BCD码计算处理子程序LCALL DISPBCD ;显示区BCD码温度值刷新子程序;*************************************LCALL DISPLAY ;调用数码管显示子程序;*************************************;CPL P3.0 ;AJMP LPTEMP ;;*************************************; 这是DS18B20复位初始化子程序;*************************************INIT_1820:SETB TEMPDINNOPCLR TEMPDIN ;主机发出延时537微秒的复位低脉冲MOV R1,#3TSR1: MOV R0,#107DJNZ R0,$DJNZ R1,TSR1SETB TEMPDIN ;然后拉高数据线NOPNOPNOPMOV R0,#25HTSR2:JNB TEMPDIN,TSR3 ;等待DS18B20回应DJNZ R0,TSR2LJMP TSR4 ;延时TSR3:SETB FLAG1 ;置标志位,表示DS1820存在;CLR P3.7 ;检查到DS18B20就点亮P3.7LEDLJMP TSR5TSR4:CLR FLAG1 ;清标志位,表示DS1820不存在;CLR P3.1TSR5: MOV R0,#117TSR6: DJNZ R0,TSR6 ;时序要求延时一段时间TSR7: SETB TEMPDIN ;RET;****************************************; 读出转换后的温度值;****************************************GET_TEMPER:SETB TEMPDIN ;LCALL INIT_1820 ;先复位DS18B20JB FLAG1,TSS2RET ;判断DS1820是否存在?若DS18B20不存在则返回TSS2:;CLR P3.3 ;DS18B20已经被检测到!!MOV A,#0CCH ;跳过ROM匹配LCALL WRITE_1820MOV A,#44H ;发出温度转换命令LCALL WRITE_1820;*****************************************;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒;*****************************************LCALL DISPLAY;*****************************************LCALL INIT_1820 ;准备读温度前先复位MOV A,#0CCH ;跳过ROM匹配LCALL WRITE_1820MOV A,#0BEH ;发出读温度命令LCALL WRITE_1820LCALL READ_18200 ;将读出的温度数据保存到35H/36HRET;*******************************************;写DS18B20的子程序(有具体的时序要求);*******************************************WRITE_1820:MOV R2,#8 ;一共8位数据CLR C ;WR1:CLR TEMPDIN ;MOV R3,#6DJNZ R3,$RRC AMOV TEMPDIN,C ;MOV R3,#23SETB TEMPDIN ;NOPDJNZ R2,WR1 ;SETB TEMPDIN ;RET;*************************************;处理温度BCD码子程序;************************************* CONVTEMP: MOV A,TEMPH ;ANL A,#80H ;JZ TEMPC1 ; 判断温度是否在零下?CLR C ; 温度值补码变成原码MOV A,TEMPL ;CPL AADD A,#01H ;MOV TEMPL,A ;MOV A, TEMPH ; -CPL A ;ADDC A,#00H ;MOV TEMPH,A ; TEMPHC HI=符号位MOV TEMPHC,#0BH ; 置"-"标志SJMP TEMPC11 ;TEMPC1: MOV TEMPHC,#0AH ; 置"+"标志;**************************************TEMPC11: MOV A,TEMPHC ; 计算小数位温度BCD值SWAP AMOV TEMPHC,A ;MOV A,TEMPL ;ANL A,#0FH ; 乘0.0625MOV DPTR,#TEMPDOTTAB ;MOVC A,@A+DPTR ;MOV TEMPLC,A ; TEMPLC LOW= 小数部分BCD ;**************************************MOV A,TEMPL ; 计算整数位温度BCD值ANL A,#0F0H ;SWAP A ;MOV TEMPL,A ;MOV A,TEMPH ;ANL A,#0FH ;SWAP A ;ORL A,TEMPL ;MOV TEMPER_L ,A ;LCALL HEX2BCD1 ; 调用单字节十六进制转BCD子程序;************************************MOV TEMPL,A ;ANL A,#0F0H ;SWAP A ;ORL A,TEMPHC ; TEMPHC LOW = 十位数BCDMOV TEMPHC,A ;MOV A,TEMPL ;ANL A,#0FH ;SWAP A ; TEMPLC HI = 个位数BCDORL A,TEMPLC ;MOV TEMPLC,A ;MOV A,R7 ;JZ TEMPOUT ;ANL A,#0FH ;SWAP A ;MOV R7,A ;MOV A,TEMPHC ; TEMPHC HI = 百位数BCDANL A,#0FH ;ORL A,R7 ;MOV TEMPHC,A ;TEMPOUT: RET ;;**************************************;小数部分分码表;************************************** TEMPDOTTAB: DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H DB 06H,07H,08H,08H,09H,09H ;;**************************************;显示区BCD 码温度值刷新子程序;**************************************DISPBCD: MOV A,TEMPLC ; 温度数据移入显示寄存器ANL A,#0FH ;MOV BUF1,A ; 显示小数MOV A,TEMPLC ;SWAP A ;ANL A,#0FH ;MOV BUF2,A ; 显示个位MOV A,TEMPHC ;ANL A,#0FH ;MOV BUF3,A ; 显示十位MOV A,TEMPHC ;SWAP A ;ANL A,#0FH ;MOV BUF4,A ; 显示百位MOV A,TEMPHC ;ANL A,#0F0H ;CJNE A,#10H,DISPBCD0 ; 百位数=0?SJMP DISPOUT ;DISPBCD0:MOV A, TEMPHC ;ANL A, #0FH ;JNZ DISPOUT ; 十位数是0?MOV A,TEMPHC ;SWAP A ;ANL A,#0FH ;MOV BUF4,0AH ; 符号位不显示MOV BUF3,A ; 十位数显示符号DISPOUT: RET ;;*************************************;单字节十六进制转BCD;*************************************HEX2BCD1:MOV B,#64H ; 十六进制->BCD DIV AB ; B=A%100MOV R7,A ; R7=百位数MOV A,#0AH ;XCH A,B ;DIV AB ; B=A%BSWAP A ;ORL A,B ;RET ;;*************************************; Calculate CRC-8 Values, Uses The;CCITT-8 Polynomial,Expressed As; X^8+X^5+X^4+1;*************************************CRC8CAL: PUSH ACC ;MOV R7,#08H ; Number Bits Byte CRC8LOOP1:XRL A,B ; Calculate CRCRRC A ; Move T0 CarryMOV A,B ; Get The Last CRC ValueJNC CRC8LOOP2 ; Skip If Data==0XRL A,#18H ; Update The CRC Value CRC8LOOP2:RRC A ; Position The New CRCMOV B,A ; Store The New CRCPOP ACC ; Get The Remaining BitsRR A ; Possition The Next BitPUSH ACC ; Save The Remaining BitsDJNZ R7,CRC8LOOP1 ; Repeat For 9 BitsPOP ACC ;RET ;;******************************************;读DS18B20的程序,从DS18B20中读出9个字节数据;开始的两个字节为温度数据;******************************************READ_18200:MOV R4,#9 ; 将温度高位和低位从DS18B20中读出MOV R1,#TEMPER_L ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H) MOV B, #00H ;;************************************RE00:MOV R2,#8 ; 数据一共有8位RE01:CLR CSETB TEMPDIN ;NOPNOPCLR TEMPDIN ;NOPNOPNOPSETB TEMPDIN ;MOV R3,#9RE10:DJNZ R3,RE10 ;MOV C,TEMPDIN ;MOV R3,#23RE20:DJNZ R3,RE20 ;RRC ADJNZ R2,RE01 ;;************************************MOV @R1,A ;INC R1 ;LCALL CRC8CAL ;DJNZ R4,RE00 ;MOV A,B ;JNZ READ_OUT ;MOV TEMPL,TEMPER_L ;MOV TEMPH,TEMPER_H ;READ_OUT: RET;*****************************************;显示子程序;***************************************** DISPLAY:MOV DPTR,#NUMTAB ; 指定查表启始地址MOV R0,#4DP11: MOV R1,#250 ; 显示1000次DPLP: SETB P1.7MOV A,BUF1 ; 取小位数MOVC A,@A+DPTR ; 查小位数的7段代码MOV P1,A ; 送出小位的7段代码CLR P3.0 ; 开小位显示ACALL DL1ms ; 显示1msSETB P3.0 ;MOV A,BUF2 ; 取个位数MOVC A,@A+DPTR ; 查个位数的7段代码MOV P1,A ; 送出个位的7段代码CLR P1.7CLR P3.1 ; 开个位显示ACALL DL1ms ; 显示1msSETB P3.1 ;SETB P1.7MOV A,BUF3 ; 取十位数MOVC A,@A+DPTR ; 查十位数的7段代码MOV P1,A ; 送出十位的7段代码CLR P3.2 ; 开十位显示ACALL DL1ms ; 显示1msSETB P3.2 ;SETB P1.7MOV A,BUF4 ; 取百位数MOVC A,@A+DPTR ; 查百位数的7段代码MOV P1,A ; 送出百位的7段代码CLR P3.3 ; 开百位显示ACALL DL1ms ; 显示1msSETB P3.3 ;DJNZ R1,DPLP ; 250次没完循环DJNZ R0,DP11 ; 4个100次没完循环RET;****************************************;0.2MS延时(按12MHZ算);****************************************DL1MS: MOV R7,#100DJNZ R7,$RET;****************************************;7段数码管0~9数字的共阳显示代码;****************************************NUMTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0BFH ;; "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "不亮" "-";****************************************END=============================== 汇编结束===============================================4.C51程序://********************************************* C程序 *************************************************************************** **////*MCU: AT892051 ////*MCU-crystal: 12M ////*Version: 01 ////*Last Updata: 2007-6-9 ////*Author: zhaojun ////*Description: ////DS18B20的读写程序,数据脚P3.4 ////温度传感器18B20汇编程序,采用器件默认的12位转化////最大转化时间750微秒,显示温度-55到+125度,显示精度////为0.1度,显示采用4位LED共阳显示测温值////P1口为段码输入,P0~P3为位选////***************WAVE-E6000/T**********************//#include "reg52.h"#define uchar unsigned char#define uint unsigned int#define Disdata P1 // 段码入口sbit DQ=P3^4; // 温度输入口uint temp; // variable of temperature 定义一个变量uchar flag1; // 定义一个标志,标志温度是负还是正,1为负,0为正sbit DIN=P1^7; // 小数点控制#define discan P3 //扫描口uchar h; // 定义变量//位选位定义sbit DEC=P3^0; // 小数sbit POS=P3^1; // 个位sbit TEN=P3^2; // 十位sbit HUN=P3^3; // 百位,符号位unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};//共阳数码管段码表"0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "灭" "-"unsigned char code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//带小数点的编码//共阳数码管带小数点段码表"0" "1" "2" "3" "4" "5" "6" "7" "8" "9"uchar data temp_data[2]={0x00,0x00};//读出温度暂放uchar data Dis_play[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据和一个运算暂用uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09 };//小数部分对应十进制"0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "A" "B" "C" "D" "E" "F"uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7}; //列扫描控制字/***************************************//* 延时子程序*//***************************************/void delay(uint i) //delay{while(i--);}/************************************************//* 初始化ds18b2子函数* *//************************************************/Init_DS18B20(void){uchar x=0;DQ = 1; //DQ复位delay(8); //稍做延时DQ = 0; //单片机将DQ拉低delay(80); //精确延时大于480usDQ = 1; //拉高总线delay(14);x=DQ; //稍做延时后如果x=0则初始化成功x=1则初始化失败delay(20);}/*************************************************//* 读字节子函数*//*************************************************/ReadOneChar(void){uchar i = 0;uchar dat = 0;for (i=8;i>0;i--){DQ = 0; // 给脉冲信号dat>>=1; // 数据右移一位DQ = 1; // 给脉冲信号if(DQ) // DQ为1dat|=0x80; // 读出数据delay(4); // 延时}return(dat);}/*************************************************/ /* 写字节子函数*//*************************************************/ WriteOneChar(unsigned char dat){uchar i = 0;for (i=8; i>0; i--){DQ = 0;DQ = dat&0x01; //写入一位数据delay(5);DQ = 1;dat>>=1; //右移一位数据}}/*************************************************/ /* DS18B20写命令函数*//*************************************************/ /*void tmpwritebyte(uchar dat) // write a byte to ds18b20 { // 给温度传感器写一个字节uint i;uchar j;bit testb;for(j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if(testb) //写入1{DQ=0;i++;i++;DQ=1;i=8;while(i>0)i--; // 适当延时}else //写入0{DQ=0;i=8;while(i>0)i--; // 适当延时DQ=1;i++;i++;}}}*//******************************************//* 发送温度转换命令*//******************************************/void tmpchange(void) // DS18B20 begin change{Init_DS18B20(); // 初始化DS18B20delay(200); // 延时WriteOneChar(0xcc); // 跳过序列号命令WriteOneChar(0x44); // 发送温度转换命令}/******************************************//* 读出温度函数*//******************************************/uint tmp() //get the temperature{// float tt;Init_DS18B20(); // 初始化ds18b2子函数delay(1);WriteOneChar(0xcc); // 跳过ROM命令WriteOneChar(0xbe); // 发送读取数据命令temp_data[0]=ReadOneChar(); // 连续读两个字节数据temp_data[1]=ReadOneChar();temp=temp_data[1];temp<<=8;temp=temp|temp_data[0]; // 两字节合成一个整型变量。
DS18B20的工作原理
DS18B20的工作原理DS18B20是一种数字温度传感器,采用单总线接口进行通信。
它可以精确测量环境温度,并将温度值以数字形式传输给微控制器或者其他设备。
DS18B20是一种广泛应用于工业自动化、家用电器、医疗设备等领域的温度传感器。
DS18B20的工作原理如下:1. 温度测量原理:DS18B20采用了基于半导体的温度测量原理。
它内部集成为了温度传感器和模数转换器(ADC),可以将环境温度转换为数字信号。
DS18B20使用的是温度依赖的电阻器件,称为温度传感器。
当温度升高时,温度传感器的电阻值会发生变化,DS18B20利用这种变化来测量温度。
2. 单总线通信:DS18B20采用了单总线通信协议,即通过单根数据线进行数据传输。
这种通信方式简化了连接和控制的复杂性,只需使用一个引脚即可实现数据的传输和控制。
在单总线通信中,DS18B20作为从设备,由主控制器发出指令,DS18B20接收指令并返回温度数据。
3. 工作原理:DS18B20的工作原理可以分为三个步骤:初始化、温度转换和读取温度。
3.1 初始化:在通信开始前,主控制器需要发送初始化指令来识别和准备DS18B20。
初始化指令包括发送复位脉冲和读取DS18B20的存在脉冲。
复位脉冲使DS18B20进入准备接收指令的状态,存在脉冲用于检测DS18B20是否存在于总线上。
3.2 温度转换:初始化完成后,主控制器发送温度转换指令给DS18B20。
温度转换指令包括启动温度转换和等待转换完成。
DS18B20接收到指令后,开始测量环境温度,并将结果存储在内部寄存器中。
温度转换时间取决于DS18B20的分辨率设置,普通为750ms到12秒不等。
3.3 读取温度:温度转换完成后,主控制器发送读取温度指令给DS18B20。
DS18B20将温度值以数字形式传输给主控制器。
主控制器接收到温度数据后,可以进行进一步的处理和显示。
4. 分辨率设置:DS18B20支持多种温度分辨率设置,包括9位、10位、11位和12位。
DS18B20的数字温度计
创新制作总结报告(含文献综述、外文翻译)题目基于DS18B20的数字温度计姓名利宝珠学号09101132专业班级09电子3班所在学院电子与通信工程学院指导教师(职称)朱冬范二○一一年12月20日说明目录书1. 引言 (11)2. 方案论证 (11)2.1方案一:热敏电阻 (11)2.2方案二:采用数字温度芯片DS18B20 (12)3. 各电路设计及论证 (12)3.1主控制器 (13)3.1.1方案一:采用PC机实现 (13)3.1.2方案二:使用单片机 (13)3.2显示电路 (15)3.2.1方案一:采用七段LED数码显示 (15)3.2.2 方案二:采用SMCI602A液晶显示模块芯片 (15)3. 3温度传感器的选择 (15)3.3.1 方案一:采用热敏电阻 (16)3.3.2 方案二:采用数字温度芯片DS18B20 (16)3.4温度报警电路 (21)3.5电源设计 (21)4. 软件设计 (22)4.1程序流程 (22)4.1.1系统主程序流程图 (22)4.1.2各子程序流程图 (22)4.2程序 (23)5.软硬件系统的调试 (27)6.附录:电路原理图 (33)7.参考文献 (34)基于DS18B20的数字温度计摘要:随着时代的进步和发展,单片机技术已经普及到我们生活、工作、科研、各个领域,已经成为一种比较成熟的技术, 本文主要介绍了一个基于AT89S51单片机的测温系统,详细描述了利用数字温度传感器DS18B20开发测温系统的过程,重点对传感器在单片机下的硬件连接,软件编程以及各模块系统流程进行了详尽分析,对各部分的电路也一一进行了介绍,该系统可以方便的实现温度采集和显示,并可根据需要任意设定上下限报警温度,它使用起来相当方便,具有精度高、量程宽、灵敏度高、体积小、功耗低等优点,适合于我们日常生活和工、农业生产中的温度测量,也可以当作温度处理模块嵌入其它系统中,作为其他主系统的辅助扩展。
ds18b20中文资料 (2)
DS18B20中文资料1. 简介DS18B20是一款数字温度传感器,由世界知名的芯片制造商Dallas Semiconductor(现在的Maxim Integrated)生产。
它采用了单总线接口,可以通过一条数据线与微控制器通信。
DS18B20可提供高精度的温度测量,具有多种优点,所以被广泛应用于各种应用领域。
2. 特性DS18B20具有以下特性:•单一总线数字接口,方便与微控制器通信。
•温度精度高达±0.5°C。
•温度测量范围广,可测量-55°C至+125°C的温度。
•内部集成16位温度变换器,可直接输出数字温度读数。
•可编程分辨率,最高可以达到12位,提供更高的精度。
•支持多台传感器在同一总线上工作。
•从数据手册中获取更详细的硬件特性。
3. 使用方法3.1 电路连接DS18B20需要在微控制器和电源之间建立如下的电路连接: +-------------------------+| |Vdd--+ DS18B20 || |GND--+ (TO-92封装) || |DQ --+-------------------------+|Microcontroller•Vdd: 供电引脚,接5V电源。
•GND: 接地引脚,连接到微控制器的地线。
•DQ: 数据引脚,连接到微控制器的数字输入/输出引脚。
3.2 软件编程使用DS18B20时,需在软件中实现以下步骤:1.初始化总线。
2.搜索设备以获取DS18B20的ROM代码。
3.发送温度转换命令。
4.等待转换完成。
5.读取温度数据。
在不同的平台和编程语言中,实现这些步骤的代码会有所不同。
在此只提供一个示例,供参考:```python import onewire import ds18x20 import time初始化总线ow = onewire.OneWire(DQ_pin)搜索设备rom_codes = ow.scan()初始化传感器sensor = ds18x20.DS18X20(ow)发送温度转换命令sensor.convert_temp()等待转换完成time.sleep_ms(750)读取温度数据for rom_code in rom_codes: temp = sensor.read_temp(rom_code) print(。
单总线温度传感器DS18B20简介
单总线温度传感器DS18B20简介DS18B20是DALLAS公司生产的单总线式数字温度传感器,它具有微型化、低功耗、高性能、搞干扰能力强、易配处理器等优点,特别适用于构成多点温度测控系统,可直接将温度转化成串行数字信号(提供9位二进制数字)给单片机处理,且在同一总线上可以挂接多个传感器芯片。
它具有3引脚TO-92小体积封装形式,温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,也可采用寄生电源方式产生,多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与多个DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。
以上特点使DS18B20非常适用于远距离多点温度检测系统。
DS18B20外形及引脚说明外形及引脚如图2所示:图2 管脚排列图在TO-92和SO-8的封装中引脚有所不同,具体差别请查阅PDF手册,在TO-92封装中引脚分配如下:1(GND):地2(DQ):单线运用的数据输入输出引脚3(VDD):可选的电源引脚DS18B20工作过程及时序DS18B20内部的低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一频率稳定的计数脉冲。
高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。
初始时,温度寄存器被预置成-55℃,每当计数器1从预置数开始减计数到0时,温度寄存器中寄存的温度值就增加1℃,这个过程重复进行,直到计数器2计数到0时便停止。
初始时,计数器1预置的是与-55℃相对应的一个预置值。
以后计数器1每一个循环的预置数都由斜率累加器提供。
为了补偿振荡器温度特性的非线性性,斜率累加器提供的预置数也随温度相应变化。
计数器1的预置数也就是在给定温度处使温度寄存器寄存值增加1℃计数器所需要的计数个数。
温度传感器ds18b20
温度传感器ds18b20温度传感器DS18B201. 简介温度传感器DS18B20是一种数字温度传感器,可用于测量环境温度。
该传感器由Maxim Integrated公司生产,并在许多应用中得到了广泛的应用,如家庭自动化、气象站、工业控制等。
DS18B20采用了数字化接口,并具有高精度、可编程分辨率和低功耗等特点。
2. 技术规格DS18B20的技术规格如下:- 工作电源:3.0V至5.5V- 测量范围:-55°C至+125°C- 分辨率:可编程为9、10、11或12位- 精度:±0.5°C(在-10°C至+85°C范围内)- 通信接口:一线式数字接口3. 工作原理DS18B20采用了一线式数字接口,这意味着它只需要一根数据线进行通信。
传感器从控制器接收命令,并通过数据线将温度数据发送回控制器。
传感器的数据线同时起到了供电的作用。
DS18B20通过内部的精密温度传感器测量环境温度。
传感器将温度转换为数字信号,并通过数据线将其发送给控制器。
传感器的分辨率可以根据需要进行编程,从而在精度和响应速度之间进行平衡。
4. 使用方法使用DS18B20温度传感器非常简单。
首先,将传感器的电源引脚连接到可用的电源引脚,并将数据线连接到控制器的GPIO引脚。
然后,通过控制器向传感器发送命令,请求温度数据。
传感器将在一段时间后将温度数据发送回控制器,控制器可以读取这些数据并进行相应的处理。
DS18B20还具有一些特殊的命令,如启动温度转换、复位传感器和读取ROM代码等。
这些命令可以通过与控制器的通信来实现。
5. 应用领域温度传感器DS18B20在许多应用中得到了广泛的应用。
以下是一些常见的应用领域:- 家庭自动化:DS18B20可以用于监测室内温度,从而实现智能化的温控系统。
- 气象站:DS18B20可以用于监测室外温度,并将数据发送到气象站系统进行分析和显示。
温度传感器ds18b20
温度传感器ds18b20温度传感器DS18B20摘要:温度传感器DS18B20是一款数字温度传感器,具有较高的精度和稳定性。
本文将介绍DS18B20传感器的原理、特点、应用领域以及使用方法。
第一部分:引言温度传感器是一种广泛应用于各个领域的传感器,用于测量和监控环境中的温度变化。
DS18B20是一款数字温度传感器,具有高精度、数字输出、单总线操作等特点,因此在各个领域得到了广泛的应用。
本文将对DS18B20传感器进行详细的介绍。
第二部分:DS18B20传感器的原理DS18B20是基于热敏电阻技术的温度传感器,其原理是利用材料的特性,在温度变化时改变电阻值。
DS18B20采用了目前常用的数字温度传感器技术,通过读取电阻值来得到准确的温度测量结果。
第三部分:DS18B20传感器的特点1. 高精度:DS18B20传感器具有高达±0.5℃的精度,可满足多种应用场景对温度测量的要求。
2. 数字输出:DS18B20采用数字信号输出,易于与各种微控制器和芯片进行通信和集成。
3. 单总线操作:DS18B20可以通过单总线进行操作和通信,简化了传感器与控制系统之间的连接。
4. 多项配置选项:DS18B20传感器支持多种配置选项,可以根据需要调整分辨率、工作模式等参数。
5. 低功耗:DS18B20传感器具有低功耗特性,适合长时间运行。
第四部分:DS18B20传感器的应用领域1. 家用电器:DS18B20传感器可以用于家用电器中的温度控制和监测,例如空调、电冰箱等。
2. 工业自动化:DS18B20传感器在工业自动化领域中广泛应用于温度监测和控制,例如工厂、仓库等环境。
3. 农业温控:DS18B20传感器可用于农业温控系统,例如温室、畜舍等。
4. 医疗仪器:DS18B20传感器在医疗仪器中可用于体温检测和监控,例如体温计、输液器等。
5. 汽车电子:DS18B20传感器可以用于汽车电子系统中的温度监控和控制,例如发动机温度监测。
DS18B20分辨率可编程单线数字温度传感器
由于每个DS18B20都有一个唯一的硅序号,在同一根单总线上可以挂接多个DS18B20。这样可以把温度传感器放置在许多不同的地方。这个特性非常有用,经常应用在空调环境控制、检测建筑物内部温度、设备或机械领域以及过程监测和控制。p1EanqFDPw
64-位光刻ROM
每个DS18B20包含一个内容唯一的64位ROM。头8位是一个单总线产品族的编码<DS18B20的编码是28h)。接下来的48位是一个唯一的序列号。最后的8位是前56位的CRC校验码。64位的ROM和ROM控制功能使得DS18B20是一个遵循单总线协议工作的单总线器件,有关单总线协议细节请参阅单总线系统部分。只有当ROM的功能协议设定之后,控制DS18B20的各个部件的功能才可用。图5中的ROM功能协议流图描述了这个协议。kavU42VRUs
配置寄存器
暂存器的第5个字节是配置寄存器。
它包含的信息将决定温度转换的分辨率。各位配置如图7所示。
图7.DS18B20配置寄存器
表3.温度计分辨率配置
图8.DS18B20存储器映像
单总线系统
单总线系统是一个有单个主机以及一个或多个从设备的系统。DS18B20相当于一个从设备。对这个总线系统的讨论可以分成三个部分:硬件组成、处理流程和单线信号<信号类型及时序)。lzq7IGf02E
暂存器由8字节存储器组成。前2个字节分别包括测量的温度信息的最低有效字节和最高有效字节。第3和第4个字节是TH和TL暂时备份,在每次上电复位时都会被刷新。第5个字节是配置寄存器的暂时备份,每次上电复位时也会被刷新。随后在这部分的数据表中会对配置寄存器进行更详细的解释。第6、7、8字节用于内部计算,不会读出任何可预测的数据。GMsIasNXkA
DS18B20数字温度传感器
传感器原理及工程应用DS18B20是美国DALLAS公司的新一代单总线数字温度传感器,其单总线是将地址线、数据线、控制线合三为一根信号线,实现了一信号线上进行双向数据传输,最大限度使通讯线数量减到最少,使系统构成更趋于简单化。
该系统是以PC机为上位主机,以单片机为核心的数据采集为下位机,单片机只需一根端口线就能与多个DS18B20串接和通讯,单片机通过串行口跟PC机连在一起,构成三位一体的主从分布式控制系统。
该系统具有温度检测、显示、打印和故障自检等多种功能。
一、1DS18B20简介(1)独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
(2)在使用中不需要任何外围元件。
(3)可用数据线供电,电压范围:+3.0~?+5.5 V。
(4)测温范围:-55 ~+125 ℃。
固有测温分辨率为0.5 ℃。
(5)通过编程可实现9~12位的数字读数方式。
(6)用户可自设定非易失性的报警上下限值。
(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。
(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
2DS18B20的内部结构DS18B20采用3脚PR35封装或8脚SOIC封装,其内部结构框图如图1所示。
(1) 64 b闪速ROM的结构如下:开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前56位的CRC校验码,这也是多个DS18B20可以采用一线进行通信的原因。
(2) 非易市失性温度报警触发器TH和TL,可通过软件写入用户报警上下限。
(3) 高速暂存存储器DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E?2RAM。
后者用于存储TH,TL值。
数据先写入RAM,经校验后再传给E?2RAM。
而配置寄存器为高速暂存器中的第5个字节,他的内容用于确定温度值的数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。
DS18B20数字温度计 (原创)
//通过DS18B20测试当前环境温度, 并通过数码管显示当前温度值, 目前显示范围: 0.0~ +99.9度#include<AT89X52.H>#include <absacc.h>#define uchar unsigned char#define uint unsigned int#define DATAPORT P0 //定义P0口为Led数据口//#define SETTEMP P1 //定义P1口为设定温度#define SELECT P2 //定义P2口为选择信号sbit L1 = P1^1; //灯作为电机sbit L2 = P1^2;sbit L3 = P1^3;sbit DQ = P3^4; //定义ds18b20通信端口charNum[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9int temp1,temp2,ID=0,set=0,blink;int temp1=27,xs=5; //定义整数和小数unsigned int max,mid,min,flag;/////////////////////下面是小板的地址///大板对应为0xc700,0xc600,0xc500////#define led_data XBYTE[0xe000] //显示数据端口#define led_sel XBYTE[0xc000] //显示器选择端#define key_addr XBYTE[0xa000] //按键端口//uchar d[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0x0F8,0x80,0x90};//仿真时用到/*********延时>K*1ms,*//////*12.000mhz>11.0596有误差********/void delayms(int ms){uchar i;while(ms--){for(i=250;i>0;i--);}}/***********ds18b20延迟子函数(晶振11.0596MHz )*******/void delay_18B20(unsigned int i){while(i--);}/**********ds18b20初始化函数**********************/void Init_DS18B20(void){unsigned char x=0;DQ = 1; //DQ复位 ds18b20通信端口delay_18B20(8); //稍做延时DQ = 0; //单片机将DQ拉低delay_18B20(80); //精确延时大于 480usDQ = 1; //拉高总线delay_18B20(4);x=DQ; //稍做延时后如果x=0则初始化成功 x=1则初始化失败delay_18B20(20);}/***********ds18b20读一个字节**************/unsigned char ReadOneChar(void){uchar i=0;uchar dat = 0;for (i=8;i>0;i--){DQ = 0; // 高电平拉成低电平时读周期开始dat>>=1;DQ = 1; // 给脉冲信号if(DQ)dat|=0x80; // | *delay_18B20(4);}return(dat);}/*************ds18b20写一个字节****************/void WriteOneChar(uchar dat){unsigned char i=0;for (i=8; i>0; i--){DQ = 0; //从高电平拉至低电平时,写周期的开始DQ = dat&0x01; //数据的最低位先写入delay_18B20(5); //60us到120us延时DQ = 1;dat>>=1; //从最低位到最高位传入}}/**************读取ds18b20当前温度************/void ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20();WriteOneChar(0xCC); // 跳过读序号列号的操作WriteOneChar(0x44); // 启动温度转换delay_18B20(100); // this message is wery importantInit_DS18B20();WriteOneChar(0xCC); //跳过读序号列号的操作WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器)前两个就是温度delay_18B20(100);a=ReadOneChar(); //读取温度值低位b=ReadOneChar(); //读取温度值高位temp1=b<<4; //高8位中后三位数的值temp1+=(a&0xf0)>>4; //低8位中的高4位值加上高8位中后三位数的值 temp1室温整数值temp2=a&0x0f; //小数的值// temp=((b*256+a)>>4); //当前采集温度值除16得实际温度值xs=temp2*0.0625*10; //小数位,若为0.5则算为5来显示 xs小数//上、下限温度值可自动保存,掉电不会丢失。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
DQ = 1; //拉高总线
delay_18B20(4);
x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
delay_18B20(20);
//写暂存存储器 写暂存存储器 复制暂存存储器 ??
}
//////////////////////////////////////////////////////////
////////////显示//////////////////////////////////////////
delayms(1);
led_sel=0xfb; //2 灯 //小数位
led_data=0x3f;
delayms(1);
led_sel=0xfd; //1 灯
}
}
/***********ds18b20延迟子函数(晶振11.0596MHz )*******/
void delay_18B20(unsigned int i)
{
while(i--);
}
/**********ds18b20初始化函数**********TE[0xc000] //显示器选择端
#define key_addr XBYTE[0xa000] //按键端口
//uchar d[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0x0F8,0x80,0x90};//仿真时用到
led_sel=0xfd; //1 灯
led_data=Num[T%10]+128;
delayms(1);
led_sel=0xfe; //0 灯
led_data=Num[T/10];
}
return(dat);
}
/*************ds18b20写一个字节****************/
void WriteOneChar(uchar dat)
{
unsigned char i=0;
void display(int T)
{
led_sel=0xef; //选通LED4 1
led_data=0x01;
delayms(1);
led_sel=0xf7; //3 灯 c
{ led_sel=0x00; //
led_data=0x00;
delayms(1);}*/
}
/*void displaymax(void)
{ int i;
for(i=12;i>0;i--)
for(i=12;i>0;i--)
{
led_sel=0xef; //选通LED4 2
#define SELECT P2 //定义P2口为选择信号
sbit L1 = P1^1; //灯作为电机
sbit L2 = P1^2;
sbit L3 = P1^3;
sbit DQ = P3^4; //定义ds18b20通信端口
{
DQ = 0; // 高电平拉成低电平时读周期开始
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80; // | *
delay_18B20(4);
DQ = 1;
dat>>=1; //从最低位到最高位传入
}
}
/**************读取ds18b20当前温度************/
void ReadTemperature(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned char t=0;
Init_DS18B20();
WriteOneChar(0xCC); // 跳过读序号列号的操作
WriteOneChar(0x44); // 启动温度转换
#define uchar unsigned char
#define uint unsigned int
#define DATAPORT P0 //定义P0口为Led数据口
//#define SETTEMP P1 //定义P1口为设定温度
delay_18B20(100);
a=ReadOneChar(); //读取温度值低位
b=ReadOneChar(); //读取温度值高位
temp1=b<<4; //高8位中后三位数的值
temp1+=(a&0xf0)>>4; //低8位中的高4位值加上高8位中后三位数的值 temp1室温整数值
{
led_sel=0xef; //选通LED4 1
led_data=0x01;
delayms(1);
led_sel=0xf7; //3 灯 c
led_data=0x39;
char Num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9
int temp1,temp2,ID=0,set=0,blink;
int temp1=27,xs=5; //定义整数和小数
led_data=Num[max%10]+128;
delayms(1);
led_sel=0xfe; //0 灯
led_data=Num[max/10];
delayms(1);
}
/***********ds18b20读一个字节**************/
unsigned char ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--)
/*********延时>K*1ms,*//////*12.000mhz>11.0596有误差********/
void delayms(int ms)
{
uchar i;
while(ms--)
{
for(i=250;i>0;i--);
for (i=8; i>0; i--)
{
DQ = 0; //从高电平拉至低电平时,写周期的开始
DQ = dat&0x01; //数据的最低位先写入
delay_18B20(5); //60us到120us延时
}
for(i=12;i>0;i--)
{ led_sel=0x00; //
led_data=0x00;
delayms(1);}
}
void displaymid(void)
{ int i;
DS18B20数字温度计 (原创)2007-12-28 22:56
//通过DS18B20测试当前环境温度, 并通过数码管显示当前温度值, 目前显示范围: 0.0~ +99.9度
#include<AT89X52.H>
#include <absacc.h>
delayms(1);
led_sel=0xef; //选通LED4 1
led_data=0x00;
delayms(1);
/* for(i=12;i>0;i--)
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位 ds18b20通信端口
delay_18B20(8); //稍做延时
DQ = 0; //单片机将DQ拉低
unsigned int max,mid,min,flag;
/////////////////////下面是小板的地址///大板对应为0xc700,0xc600,0xc500////
#define led_data XBYTE[0xe000] //显示数据端口
led_data=0x39;
delayms(1);
led_sel=0xfb; //2 灯 //小数位
led_data=0x3f;
delayms(1);
delay_18B20(100); // this message is wery important
Init_DS18B20();
WriteOneChar(0xCC); //跳过读序号列号的操作
WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
temp2=a&0x0f; //小数的值
// temp=((b*256+a)>>4); //当前采集温度值除16得 实际温度值
xs=temp2*0.0625*10; //小数位,若为0.5则算为5来显示 xs小数
//上、下限温度值可自动保存,掉电不会丢失。?