1、 数字温度传感器的设计摘要 随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用。现代测温应用中,温度计向数字化方向发展。传统的机遇物理方法的温度计功能单一,而数字温度计以其便携,检测精度高,功能多等优点应用的越来越广泛。关键词单片机;温度计;智能化控制
2、 Digital temperature sensor designAuthor:xxxxxxxx Teacher:xxxxxxxxxxDept. of Computer, Jinggangshan College, Jian,343009,China;AbstractAs people living standard rise ceaselessly, SCM control is undoubtedly one of the goals of the people to pursue, it brings convenience is not negative, including dig
3、ital thermometer is one example, for modern people to work, scientific research, life, provide better more convenient facilities need microcontroller technology from several of toward all digital control system, intelligent control direction. As introduced in the digital thermometer and the traditio
4、nal thermometer, it is characterized by easy reading, temperature measuring range, temperature measurement is accurate, its output temperature using digital display, mainly used for measuring temperature is precise place, or scientific research laboratory use。Modern measuring temperature application
5、s, the thermometer to the digital development direction ,traditional physical method of thermometers opportunity single function, and digital thermometer with its portable, high accuracy, the function is much advantages of application more and more widely. Key wordsSingle chip microcomputer、 The the
6、rmometer; Intelligent control目 录第1章 前言41.1 单片机简介41.2 基于单片机和温度传感器设计数字温度计的发展现状41.3 基于单片机和温度传感器设计数字温度器的技术现状51.4 选择设计的意义5第2章 单片机温度设计制作准备62.1 电路介绍62.2 制作焊接要求及注意事项62.3 制作所需电子元件及其功能介绍72.4 安装完成调试说明及使用说明8第3章 单片机的温度计设计各个部分工作及其相关性能介绍83.1 温度计的总体设计83.1.1 总体论述83.1.2 设计思路93.2 硬件说明93.2.1 测量输入模块93.2.2 键盘输入模块133.2.3
7、显示模块143.2.4 报警模块143.2.5 设计思路143.2.6 AT89C2051的低功耗措施153.2.7 主控制部分及系统方案153.3软件和功能的说明163.3.1 数据的读取163.3.2 DS18B20的软件设计17第4章 设计制作心得体会18参考文献18致 谢18附表19第1章 前言1.1 单片机简介 单片机全称为单片微型计算机。单片机发展始于70年代,经过30多年的发展,由于其具有高集成度、低功耗、工作电压范围宽、价格便宜、使用方便等诸多优点而在广泛使用。到目前为止将单片机发展阶段分为三个阶段,分别为初级阶段、高性能阶段、以及高位单片机的推出。通常单片机内部含有中央处理部
8、件(CPU)、数据存储器(RAM)、程序存储器(ROM、EPROM、Flash ROM)、定时器、计数器和各种输入输出接口等。目前8位单片机是目前品种最丰富、应用最广泛的单片机。今天我所使用的就其中比较典型的一种8位单片机AT89C51。1.2 基于单片机和温度传感器设计数字温度计的发展现状随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。数字温度计与传统的温度计相比,具有
9、读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用。检测是控制的基础和前提,而检测的精度必须高于控制的精确度,否则无从实现控制的精度要求。不仅如此,检测还涉及国计民生各个部门,可以说在所以科学技术领域无时不在进行检测。科学技术的发展和检测技术的发展是密切相关的。现代化的检测手段能达到的精度、灵敏度及测量范围等,在很大程度上决定了科学技术的发展水平。同时,科学技术的发展达到的水平越高,又为检测技术、传感器技术提供了新的前提手段。目前温度计的发展很快,从原始的玻璃管温度计发展到了现在的热电阻温度计、热电偶温度计、数字温度计、电子温度计等等。目前的
10、温度计中传感器是它的重要组成部分,它的精度灵敏度基本决定了温度计的精度、测量范围、控制范围和用途等。传感器应用极其广泛,目前已经研制出多种新型传感器。1.3 基于单片机和温度传感器设计数字温度器的技术现状目前基于单片机的温度传感器设计的数字温度计已经很成熟,各种精度很高的温度计不断推出。数字温度计要求检测的精度必须高于控制的精确度,否则无从实现控制的精度要求。所以精度已经成为数字温度计的一项重要的性能参数。因此追求高精度是数字温度计的一个目标。不仅如此,检测还涉及国计民生各个部门,可以说在所以科学技术领域无时不在进行检测。科学技术的发展和检测技术的发展是密切相关的。现代化的检测手段能达到的精度
11、、灵敏度及测量范围等,在很大程度上决定了科学技术的发展水平。同时,科学技术的发展达到的水平越高,又为检测技术、传感器技术提供了新的前提手段。目前市场上出现了很多传感器,很多精度高的传感器已经出现,而且精度越来越高。数字温度计未来将会更精确、更人性化,为我们做出更多贡献。1.4 选择设计的意义随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。本设计所介绍的数字温度计与传统的温
12、度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用。现代测温应用中,温度计向数字化方向发展。传统的机遇物理方法的温度计功能单一,而数字温度计以其便携,检测精度高,功能多等优点应用的越来越广泛。随着技术的发展,一些环境比较恶劣的场合中也能觅得数字温度计的踪迹。在本文中,主要从功能组合,硬件组合,软件算法和降低功耗等几个方面探讨温度计的设计。第2章 单片机温度设计制作准备2.1 电路介绍该电路是由18B20温度传感器作为温度传感元件,并由AT89C2051单片机进行数据处理输出,显示模块是由0.56寸大的三位共阳极数码管显示温度值。
13、此电路可由外接5V-12V的直流电电源提供。温度显示和控制的范围为:-55-125之间,精确度到达1,即数码管显示温度为整数。如果设定的报警温度为30,则当温度到达30的时候,报警发光二极管发光同时蜂鸣器发出响声,此时继电器发生动作。如果不需要对温度控制报警,可以将报警温度设置提高。如果是为了控制局部温度,可以把18B20用引线引出,但是距离不宜过大,注意引脚要绝缘。2.2 制作焊接要求及注意事项1、形成“”摄氏度符号的单个数码管应倒置焊接,否则形成的摄氏度符号是反方向的。2、7850稳压块,应该贴板安装,节约空间,同时散热较好,常温下,7850稳压块温度不会很高。3、DS18B20、1N41
14、48、LED、三极管、发光二极管和电容不能接反,一旦接反都不能实现功能。4、电阻为卧式安放焊接。5、进行焊接的时候尽量保证焊锡不能过多,以免元件二个引脚短路。2.3 制作所需电子元件及其功能介绍表1 电子元器件及功能介绍电子元件名称规格编号主要功能与作用按钮6X6X5AN1、AN2、AN3调节报警温度和控制温度上、下限电容30PC1、C2单片机的时钟振荡电容10UFC3单片机复位电容470UFC4电源滤波电容104UFC5电源滤波单片机AT89C2051IC1把操作数据处理输出温度传感器DS18B20IC2感应外界温度稳压块L7805IC3控制工作电压为5v-12v接线柱2P5.0J1外接电源
15、USB电源插座USBJ2外接电源晶体12MJZ单片机的时钟振荡一位共阳数码管0.56LED1摄氏温度符号显示三位共阳数码管0.56LED2温度值显示发光二极管3MMLED3报警发光指示和Q1偏置三极管8550Q1、Q2、Q3、Q4Q1:报警时驱动继电器;其他数码管驱动电阻10KR1单片机复位电阻220K、470KR7R8R9R10R11R12R13R14数码管限流电阻4.7KR2R3R4R6三极管基极和温度传感器偏置电阻2KR5三极管Q1基极偏置二极管1N4148V1保护Q1跳线细铜线连接电路继电器5V2AJDQ温度到达报警极限触点动作万能板120MMX160MM电源5VUSB开关电源开关电源
16、发光二极管1N4149V2按钮操作指示灯2.4 安装完成调试说明及使用说明1、调试之前,复查电路确保焊接无误,各个引脚没有短路,才可以外接电源进行试验调试。2、调试的时候要让电路板在常温和干燥环境下工作,在此环境下才可以更加容易调试。3、继电器控制输出接线柱,为一个常开,一个为常闭,中间是公共端,通电调试之前要用万用表测试一下。4、各个按钮操作说明(1)如果电路正常,接通电源后,只是显示“”摄氏度符号,没有温度显示。(2)按下AN3,先显示上次存储下来的设定温度(报警温度值),然后再显示环境温度值,并随环境温度变化而变化。(3)再按AN3,温度数字闪烁,待调节。(4)接着AN1或者AN2:按A
17、N1为报警温度值增大,最大为125;按AN2为报警温度值减小,最小为-55。(5)调好温度值后按一下AN3,调好的报警温度值被保存,此时数码管又显示当前环境温度值。当温度达到被保存的报警温度值时,电路发出报警信号和动作。第3章 单片机的温度计设计各个部分工作及其相关性能介绍3.1 温度计的总体设计3.1.1 总体论述此次所讨论的数字温度计,除了完成基本的温度测量外,还能够满足最高最低温度设置及报警,在不同的环境中,所要求的最高温度和最低温度是不同的,因此最高温度和最低温度应能够根据环境不同而设置成不同的数值。还有些场合要求每隔一定得时间段进行读取一次数值,当相隔的时间比较长而所需要读取的数据又
18、比较多时,认为的读取就比较麻烦,因此应具备自动读取和存储若干组温度值的功能。另外,在野外工作时能够选择其工作模式以降低功耗。3.1.2 设计思路由论述可知,所设计的这种温度计的功能是传统的物理温度计无法完成的。在分析之后决定采用以单片机AT89C51为核心的系统进行设计。主要有以下几个模块:测量输入模块,键盘设置模块,运算处理模块,显示模块和报警模块。有这几个模块组成的系统框图如图一所示:图1 温度计总体框图3.2 硬件说明3.2.1 测量输入模块1、传感器的选择设计单片机数字温度计需要考虑以下3个方面温度传感器的选择;单片机和温度传感器的接口电路;控制温度传感器实现温度信息采集以及数据传输的
19、软件。单片机的接口信号是数字信号。要想用单片机获取温度这类非电信号的信息,必须使用温度传感器,将温度信息转换为电流或电压输出。如果转换后的电流或电压输出是模拟信号,还必须进行A/D转换,以满足单片机接口的需要。传统的温度检测大多以热敏电阻作为温度传感器。但是,热敏电阻的可靠性较差、测量温度准确率低,而且还必须经专门的接口电路转换成数字信号后才能由单片机进行处理。20世纪90年代中期出现了智能温度传感器(亦称数字温度传感器)。智能温度传感器的内部都包含温度传感器、A/D转换器、信号处理器、存储器(或寄存器)和接口电路,其特点是能直接输出数字化的温度数据及相关的温度控制量,适配各种微控制器(MCU
20、)。其中DS18B20就是一种应用相当广泛的单总线数字温度传感器,它结构简单、不需外接元件,采用一根I/O数据线既可供电又可传输数据、并可设置温度报警界限等特点,广泛用于工业、民用等领域的温度测量中。2、DS18B20的介绍(1) DS18B20芯片简介(此资料参考传感器应用及电路设计)DS18B20是单总线数字化智能集成温度传感器。单总线它采用单根信号线,既传输时钟又传输数据,而且数据传输是双向的,具有节省I/O口线资源、结构简单、成本低廉、便于总线扩展和维护等诸多优点。与其它温度传感器相比,DS18B20具有以下特性:独特的单线接口方式,在与微处理器连接时仅需要一条接口线即可实现微处理器与
21、DS18B20的双向通信。DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的信号线上,实现多点测温。DS18B20在使用中不需要任何外围元件。测温范围-55+125,固有测温分辨率0625。测量结果以912位数字量方式串行传送。(2)DS18B20内部结构DS18B20内部结构主要由四部分组成:64位光刻ROM,温度传感器,非挥发的温度报警触发器TH和TL,高速暂存器。64位光刻ROM是出厂前被光刻好的,它可以看作是该DS18B20的地址序列号。DS18B20的管脚排列如图2所示。图2 DS18B20引脚分布图引脚功能如下:NC:空引脚,悬空不使用;VDD:可选电源脚,电源电压
22、范围35.5V。工作于寄生电源时,此引脚应接地;DQ:数据输入/输出脚,漏极开路,常态下高电平。DSl8820的核心功能部件是它的数字温度传感器,其分辨率可配置为9、10、11和12位,出厂默认设置为12位分辨率,对应的温度值分辨率分别为0.5、0.25、0.125和0.0625。温度信息的低位、高位字节内容中,还包括了符号位S(是正温度还是负温度)和二进制小数部分,具体形式为:低位字节:MSB232221202-12-2LSB2-32-4高位字节:MSBSSSSS26LSB2524这是12位分辨率的情况,如果配置为低的分辨率,则其中无意义位为0。实测温度和数字输出的对应关系如表2所示。表2实
23、测温度和数字输出的对应关系温度/数字输出(二进制)数字输出(十六进制)+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00010191H+10.1250000 0000 1010 001000A2H+0.50000 0000 0000 10000008H00000 0000 0000 00000000H-0.51111 1111 1111 1000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FF6FH-55
24、1111 1100 1001 0000FC90H在DSl8B20完成温度变换之后,温度值与储存在TH和TL内的告警触发值进行比较。由于是8位寄存器,所以912位在比较时忽略。TH或TL的最高位直接对应于16位温度寄存器的符号位。如果温度测量的结果高于TH或低于TL,那么器件内告警标志将置位,每次温度测量都会更新此标志。只要告警标志置位,DSl8B20就将响应告警搜索命令,这也就允许单线上多个DSl8B20同时进行温度测量,即使某处温度越限,也可以识别出正在告警的器件。 3、DS18B20控制方法 ,表3 DS18B20有六条控制命令指 令 约定代码 操 作 说 明 温度转换 44H 启动DS1
25、8B20进行温度转换 读暂存器 BEH 读暂存器9个字节内容 写暂存器 4EH 将数据写入暂存器的TH、TL字节 复制暂存器 48H 把暂存器的TH、TL字节写到E2RAM中 重新调E2RAM B8H 把E2RAM中的TH、TL字节写到暂存器TH、TL字节 读电源供电方式 B4H 启动DS18B20发送电源供电方式的信号给主CPU 4、DS18B20的通信协议DS18B20器件要求采用严格的通信协议,以保证数据的完整性。该协议定义了几种信号类型:复位脉冲,应答脉冲时隙;写0,写1时隙;读0,读1时隙。与DS18B20的通信,是通过操作时隙完成单总线上的数据传输。发送所有的命令和数据时,都是字节
26、的低位在前,高位在后。复位和应答脉冲时隙每个通信周期起始于微控制器发出的复位脉冲,其后紧跟DS18B20发出的应答脉冲,在写时隙期间,主机向DS18B20器件写入数据,而在读时隙期间,主机读入来自DS18B20的数据。在每一个时隙,总线只能传输一位数据。写时隙当主机将单总线DQ从逻辑高拉到逻辑低时,即启动一个写时隙,所有的写时隙必须在60120us完成,且在每个循环之间至少需要1us的恢复时间。写0和写1时隙如图所示。在写0时隙期间,微控制器在整个时隙中将总线拉低;而写1时隙期间,微控制器将总线拉低,然后在时隙起始后15us之释放总线。读时隙DS18B20器件仅在主机发出读时隙时,才向主机传输
27、数据。所以在主机发出读数据命令后,必须马上产生读时隙,以便DS18B20能够传输数据。所有的读时隙至少需要60us,且在两次独立的读时隙之间,至少需要1us的恢复时间。每个读时隙都由主机发起,至少拉低总线1us。在主机发起读时隙之后,DS18B20器件才开始在总线上发送0或1,若DS18B20发送1,则保持总线为高电平。若发送为0,则拉低总线当发送0时,DS18B20在该时隙结束后,释放总线,由上拉电阻将总线拉回至高电平状态。DS18B20发出的数据,在起始时隙之后保持有效时间为15us。因而主机在读时隙期间,必须释放总线。并且在时隙起始后的15us之内采样总线的状态。以下图片参照图3 复位和
28、应答脉冲时隙图4 读写时序3.2.2 键盘输入模块键盘模块使用的是3个键,分别命名为确定键、+和-。确定键为确定并退出,+和-为参数菜单的选择。在开机时按确定键进入一级菜单,然后按+和-进行选择要调节的参数,在这段过程的任一时间按确定键确定并退出。菜单如表4所示:表4 相关参数菜单工作模式正常模式(默认)低功耗模式温度极限最大值(按+和-调整)最小值(按+和-调整)读取方式人为读取3.2.3 显示模块显示部分采用一位共阳数码管和三位共阳数码管,能够同时显示温度和单位。3.2.4 报警模块报警模块采用的是声光报警电路,当检测温度超过设定的上下限值时,单片机就会发出报警脉冲,使得报警电路工作,产生
29、报警信号,如图所示。光报警(指示灯亮)单片机分频电路声报警(蜂鸣器响)图5 报警模块框图3.2.5 设计思路系统设计的总体思路是围绕如何实现低功耗开展。控制功耗,必须从内部着手。对于数字化的测量系统,通过适当地选择采样周期,在一个采样周期内,迅速地测量温度,然后进入电流消耗较低的“休息”状态,就可以大幅度地减小整个系统的电流的消耗。假设采样可以在Ts=10 ms之内完成,采样时消耗的电流为Is=1mA,采样周期为TA=1 s,非测量状态的电流消耗为Ib=0.04 mA,整个系统的平均电流消耗为:I平均= (TsIs+(TA-Ts)Ib) /TA=Ib+Ts/TA(Is-Ib) =0.0496
30、mA从公式中得出,在Ts/TA采样时消耗的电流对整个系统的平均电流影响并不很大,只要恰当地选择Ib, Is,Ts,TA就可以达到降低功耗的目的。可以从以下几个方面入手:(1)减小Ib,减小休息时的电流消耗,方法一是尽量减少在“休息”状态下还要工作的模块数量,二是选用低功耗元器件。(2)减小Is,采样时,工作的元件要尽量降低功耗,选择电流消耗较小的型号。(3)减小Ts,减小工作时间,完成采样后尽快结束工作。3.2.6 AT89C2051的低功耗措施AT89C2051是采用CMOS工艺的低功耗8位单片机芯片,在工作电压为5V时,8051工作电流为150mA,而AT89C2051为2.4mA一24m
31、A。AT89C2051具有正常、空闲、掉电三种工作状态。它的时钟频率范围为1.2MHz一12MHz,在工作电压5V的正常状态下运行,工作电流为24mA;在空闲方式下运行时,工作电流为3mA,在掉电方式下,工作电流为50uA。空闲和掉电方式都可以用软件选择运行,如果单片机处在空闲方式或掉电方式下,需要时才进人正常运行状态,就可以大大减少单片机的功耗。空闲方式时,CPU停止工作,而RAM、串行口、计数器/定时器和中断系统仍在工作,CPU内部的状态(程序计数器、堆栈指针、程序状态字、累加器、片内RAM的状态)完整地保留下来。使用中断或复位可以把CPU从空闲状态唤醒进人正常状态。掉电方式时,片内振荡器
32、停止工作,所有的运行状态都停止了,只加电维持片内RAM内容不被破坏。解除掉电工作方式,只能用硬件复位的方法,复位时不改变片内RAM的内容。3.2.7 主控制部分及系统方案方案一:此方案采用PC机实现。它可在线编程,可在线仿真的功能,这让调试变得方便。且人机交互友好。但是PC机输出信号不能直接与DS18B20通信。需要通过RS232电平转换兼容,硬件的合成在线调试,较为繁琐,很不简便。而且在一些环境比较恶劣的场合,PC机的体积大,携带安装不方便,性能不稳定,给工程带来很多麻烦!方案二:此方案采用AT89S52单片机实现。单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制。而且体
33、积小,硬件实现简单,安装方便。既可以单独对多DS18B20控制工作,还可以与PC机通信.运用主从分布式思想,由一台上位机(PC微型计算机),下位机(单片机)多点温度数据采集,组成两级分布式多点温度测量的巡回检测系统,实现远程控制。另外AT89S52在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。综上所述,温度传感器以及主控部分都采用第二方案。系统采用针对传统温度测温系统测温点少,系统兼容性及扩展性较差的特点,运用分布式通讯的思想。设计一种可以用于大规模多点温度测量的巡回检测系统。通过下位机(单片机)进行现场的温度采集,温度数据既可以由下位机模块实时显示,也可以送回上位机
34、进行数据处理,具有巡检速度快,扩展性好,成本低的特点。实际采用电路方案见附表一3.3软件和功能的说明3.3.1 数据的读取其大致程序流程如图所示:开始键盘扫描键盘扫描相关参数设置温度检测是超过极限值?否报警温度显示延时结束程序并显示此刻温度图6 读取程序流程图3.3.2 DS18B20的软件设计单片机实现温度转换读取温度数值程序的流程如图所示:开始初始化DS18B20否应答脉冲发起读取的命令发起转换命令延时1s等待温度转换完成初始化DS18B20否应答脉冲是发起读取命令读取第一二字节即为温度数据图7 单片机实现温度转换读取温度数值程序是第4章 设计制作心得体会温度计的整体设计大致如上文所述,经
35、过分析可知该温度计的思路是可行的。由上述可知该温度计能够适应多种场合的需要同时其工作效率较高,而且低功耗模式的功能由让其具有较低的经济投资。随着电子技术的不断发展,按着此思路设计的温度计的性能也一定会越来越好。经过此次设计,我了解了一些传感器的知识,对智能仪器的设计有了一个整体的认识,这有利于我以后深入学习或参加工作。参考文献1 沙占友.智能温度传感器的发展趋势J.电子技术应用,2002(5):6-7. 2 于永学,葛建. 1-Wire总线数字温度传感器DS18B20及应用J.电子产品世界,2003(24):80-82.3 张萍.基于数字温度计DS18B20的温度测量仪的开发J.自动化仪表,
36、2007,28(6):64-66.4 胡学海.单片机原理及应用系统设计M.北京:电子工业出版社,2004.2李广第,朱月秀,王秀山.单片机基础M.北京:北京航空航天大学出版社,2003.5 夏晓玲.基于AT89C2051的数字温度计的设计J. 2005,12(3):38-40.6 陈书旺,张秀清,董建传感器应用及电路设计.化学工业出版社.2008-5-1致 谢 首先衷心感谢老师对我的指导和教诲。您渊博的专业知识,严谨的治学态度,精益求精的工作作风,毁人不倦的高尚师德,严以律己,宽以待人的教学风范对我影响深远。不仅使我树立了远大的学习目标,掌握了基本的自学方法等。笨设计的顺利完成,离不开各位老师
37、同学和朋友的关心和帮助。再者在一次感谢老师等同学的知道和帮助附表附表一 电路图附表二 程序设计思路程序名称:DS18B20温度测量#include#include#include#define uchar unsigned char#define tempint DBYTE0x30#define tempdf DBYTE0x31uchar code tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x83,0xf8,0x80,0x98;sbit dat=P10;void set_ds18b20(); /初始化DS18B20子程序void get_temperature();
38、 /获得温度子程序void read_ds18b20(); /读DS18B20子程序void write_ds18b20(uchar command);/向DS18B20写1字节子程序void delayms(uchar count); /延时count毫秒子程序void disp_temp(); /显示温度子程序void main() EA=0; /禁止中断 SP=0x60; /设置堆栈指针 while(1) get_temperature(); /获得温度 disp_temp(); /显示温度 void set_ds18b20() while(1) uchar delay,flag; fl
39、ag=0; dat=0; /数据线置低电平 delay=250; while(-delay); /低电平保持500us dat=1; /数据线置高电平 delay=30; while(-delay); /低电平保持60us while(dat=0) /判断DS18B20是否发出低电平信号 delay=120; /DS18B20响应,延时240us while(-delay); if(dat) /DS18B20发出高电平初始化成功,返回 flag=1; /DS18B20初始化成功标志 break; if(flag) /初始化成功,再延时480us delay=240; while(-delay)
40、; break; void get_temperature() /温度转换、获得温度子程序 set_ds18b20(); /初始化DS18B20 write_ds18b20(0xcc); /发跳过ROM匹配命令 write_ds18b20(0x44); /发温度转换命令 disp_temp(); /显示温度,等待转换结束,大于600ms set_ds18b20(); write_ds18b20(0xcc); /发跳过ROM匹配命令 write_ds18b20(0xbe); /发出读温度命令 read_ds18b20(); /将读出的温度数据保存到tempint和tempdf处void read
41、_ds18b20() uchar delay,i,j,temp,temph,templ; j=2; /读2位字节数据 do for(i=8;i0;i-) /一个字节分8位读取 temp=1; /读取1位右移1位 dat=0; /数据线置低电平 _nop_(); _nop_(); dat=1; /数据线置高电平 delay=4; while(-delay); /延时4us if(dat) /读取1位数据 temp|=0x80; delay=10; /读取以为数据后延时20us while(-delay); if(j=2) /读取的第一字节存templ templ=temp; else temph=temp; /读取的第二字节存temph while(-j); tempdf=templ&0x0f; /将读取的数据转换成温度值,整数部分存tempint,小数部分存tempdf templ=4; temph=4; tempint=temph|templ;