DS18B20 与数字温度计

发布者:京玩儿最新更新时间:2018-05-07 来源: eefocus关键字:DS18B20  数字温度计 手机看文章 扫描二维码
随时随地手机看文章

DS18B20 是温度检测器件,具有单总线、数字化的特点。
它的外形结构还比较脆弱,一般来说,它只是适合于检测室温的场合,环境条件稍稍恶劣一些,它就抗不住了。
在工业场合,做而论道一般还是使用 PT100,这个东西抗造。

做而论道用 18B20 和单片机制作了数字温度计,在办公室里放了 N 多年。
它和酒精温度计显示的温度,还是有些差异,也不知道谁测量的准。

做而论道编写程序,基本上以汇编为主,一般也不想拿出来,因为很少有人看汇编的程序。
用汇编语言编写程序,思维要跟着计算机、存储器、二进制、逻辑运算、...、来走。
多数人的思维,还是停留在中小学阶段,还是以十进制来分析问题,弄不了计算机本身的东西,所以都不愿意看汇编的程序。

做而论道编写的关于 DS18B20 的程序,在 PROTEUS 软件中,仿真的效果图如下:

DS18B20 与数字温度计 - 非著名博主 - 电子信息角落

图片链接:http://xiangce.baidu.com/picture/detail/544db91e604402c24acc7adc30294a86c41227d6

http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/40138fd88d1001e971fe7fa9b80e7bec56e797b3.html#

仿真实验时,可以断开 DS18B20 支路,数码管将会显示:Error。

图中的 DS18B20,可以用“属性”来设置小数。
小数的范围是:0、1/16 ~ 15/16,即十进制的:0、0.0625 ~ 0.9375。
小数共有四位,是 0.0625 的整数倍,但是它的器件上,只能显示 1 位小数。

在 18B20 的温度数据中,最低四位:0001 ~ 1111,就代表了十进制的:0.0625 ~ 0.9375。

看到过很多的文章,都谈到了,怎样才能从这四位数中求出十进制的小数。
呵呵,好多的方法,都是笨的真可以!
很有一些人,都知难而退了,就用查表来解决小数的问题。其实也就是查出一位小数,就都很满足了。

做而论道用了十余条指令吧,很简单的,就求出了两位小数,并且把第三位小数按照四舍五入,进到了前一位。
想要把四位小数都求出来,也不过20条指令而已,约 30us,就能解决问题。

程序中,使用了模块化的设计方法,相当规范。
模块中的转移指令,都已经设计好了偏移量,省去了好多的标号。这样,每个模块,仅有一个标号,看起来极为清晰。

不多说了,程序如下:
;=================================
DQ     EQU P3.7 ;18B20 接口

NO_18  BIT 20H  ;20H.0     存在标志位
D_BUF  EQU 30H  ;30H ~ 37H 显示空间
TEMP   EQU 38H  ;38H ~ 39H 温度数据
S_BOTT EQU 3AH  ;栈底位置
;=================================
    ORG   0000H
START:
    MOV   SP, #S_BOTT
    CALL  GET_T
    CALL  T_PROC
    CALL  DISPLAY
    JMP   $ - 6
;=================================
GET_T:
    CALL  INIT_18B20
    JB    NO_18, $ + 25
    MOV   A, #0CCH
    CALL  W_18B20
    MOV   A, #44H
    CALL  W_18B20
    CALL  DISPLAY
    CALL  INIT_18B20
    MOV   A, #0CCH
    CALL  W_18B20
    MOV   A, #0BEH
    CALL  W_18B20
    CALL  R_18B20
RET
;=================================
INIT_18B20:       ;初始化
    CLR   DQ       ;复位
    MOV   R3, #20   ;540us
    DJNZ  R3, $
    DJNZ  R3, $
    SETB  DQ
    MOV   R3, #30
    DJNZ  R3, $
    MOV   C,  DQ  ;读状态
    MOV   NO_18, C
    MOV   R3, #150
    DJNZ  R3, $     ;300us
RET
;=================================
W_18B20:
    MOV   R2, #8  ;写入8位数
    CLR   DQ
    MOV   R3, #6
    DJNZ  R3, $
    RRC   A
    MOV   DQ, C
    MOV   R3, #23
    DJNZ  R3, $
    SETB  DQ
    DJNZ  R2, $ - 15
RET
;=================================
R_18B20:          ;读出温度
    MOV   R0, #TEMP
    MOV   R4, #2  ;读出两字节
    MOV   R2, #8  ;读出8位数
    CLR   DQ
    NOP
    NOP
    NOP
    SETB  DQ
    MOV   R3, #9
    DJNZ  R3, $
    MOV   C, DQ
    RRC   A
    MOV   R3, #23
    DJNZ  R3, $
    DJNZ  R2, $ - 18;读出8位数
    MOV   @R0, A ;先存放到 TEMP
    INC   R0     ;后读出存 TEMP+1
    DJNZ  R4, $ - 24 
RET
;=================================
T_PROC:
    JNB   NO_18, $ + 22
;-------------------下面是显示Err
    MOV   30H, #26
    MOV   31H, #14  ;这些地址,如果是高128的地址,
    MOV   32H, #32  ;就应该使用间接寻址。
    MOV   33H, #32  ;
    MOV   34H, #31  ;现在,就用直接寻址吧。
    MOV   35H, #32
RET
;-------------------下面是数据处理
    MOV   30H, #0
    MOV   31H, #0
    MOV   32H, #0
    CLR   F0
    MOV   A, TEMP + 1
    JNB   ACC.7, $ + 16
;-------------------下面是求补
    CLR   C
    CLR   A
    SUBB  A, TEMP
    MOV   TEMP, A
    CLR   A
    SUBB  A, TEMP + 1
    MOV   TEMP + 1, A
    SETB  F0        ;负号标志
;-------------------下面处理整数
    MOV   A, TEMP
    SWAP  A
    ANL   A, #15
    MOV   B, A
    MOV   A, TEMP + 1
    ANL   A, #15
    SWAP  A
    ADD   A, B
    MOV   B, #100
    DIV   AB
    MOV   31H, A    ;百位
    MOV   A, #10
    XCH   A, B
    DIV   AB
    MOV   32H, A    ;十位
    XCH   A, B
    ADD   A, #16
    MOV   33H, A
;-------------------下面处理两位小数
    MOV   A, TEMP   ;
    ANL   A, #15    ;0001~1111=0.0625~0.9375
    MOV   B, #10
    MUL   AB        ;乘以10
    MOV   B, A      ;暂存
    SWAP  A         ;交换到低四位,就是除以16
    ANL   A, #15    ;低四位就是十分位小数
    MOV   34H, A    ;写入显示位置

    MOV   A, #10  ;再乘以10,将求出百分位小数
    XCH   A, B
    ANL   A, #15    ;这是刚才除以16的余数
    MUL   AB        ;乘以10
    MOV   C, ACC.3  ;低四位中的最高位
    SWAP  A         ;交换,就是除以16
    ANL   A, #15    ;下面是进行四舍五入 
    ADDC  A, #0     ;加上低四位中的最高位即可
    MOV   35H, A   ;写入百分位小数
;-------------------下面消除无效零
    MOV   R0, #D_BUF
    MOV   A, @R0
    JNZ   $ + 8
    MOV   @R0, #26  ;' '
    INC   R0
    CJNE  R0, #D_BUF + 3, $ - 6
;-------------------下面处理负号
    JNB   F0, $ + 6
    DEC   R0
    MOV   @R0, #28  ;'-'
RET                 ;约用100us
;=================================
DISPLAY:
    MOV   R1, #34
    CALL  DIS_ALL
    DJNZ  R1, $ - 2
RET                 ;占用时间约为200ms
;-----------------------
DIS_ALL: ;共阳数码管, P0:段, P2:反相位
    MOV   R2, #254  ;位选, 低电平有效
    MOV   R0, #D_BUF
    MOV   A, @R0
    ADD   A, #(TAB - $ - 3)
    MOVC  A, @A + PC
    MOV   P2, #255
    MOV   P0, A
    MOV   P2, R2
    DJNZ  R7, $     ;显示1ms
    DJNZ  R7, $
    MOV   A, R2
    RL    A
    MOV   R2, A
    INC   R0
    CJNE  R0, #D_BUF + 6, $ - 19 ;显示6位
    MOV   P2, #255
RET                 ;占用时间约为6.2ms
;-----------------------
TAB: ;共阳段码
    DB  0C0H, 0F9H, 0A4H, 0B0H, 099H, 092H, 082H, 0F8H;0~7
    DB  080H, 090H, 088H, 083H, 0C6H, 0A1H, 086H, 08EH;8~F
    DB  040H, 079H, 024H, 030H, 019H, 012H, 002H, 078H
    DB  000H, 010H, 0FFH  ;0.~9. ' '
    DB  08CH, 0BFH, 089H, 0C7H, 0A3H, 0AFH ;P,-,H,L,o,r
;=================================
END
;=================================


关键字:DS18B20  数字温度计 引用地址:DS18B20 与数字温度计

上一篇:单片机汇编语言编程:汽车转向灯控制器
下一篇:利用51单片机测量电容量

推荐阅读最新更新时间:2024-03-16 16:02

51单片机做的智能时钟具有闹钟功能(DS1302+DS18B20+LCD1602)
本贴针对学完单片机并且有读懂代码的非新手同学。本人目前放寒假,这个是本人在上个学期的单片机课上要求做的综合实验,现在重新修改了下增加了菜单目前测试毫无问题可以完美使用。有志向做闹钟的同学可以参考一下,原码上由本人写的大量注释可以方便看懂。 使用了LCD1602、DS1302、DS18B20用来测试温度、内部含闹钟系统但本人没有做EEPROM有需要的同学可以自行添加。 单片机源程序如下: #include reg52.h #include key.h #include LCD1602.h #include DS1302.h #include music.h #include DS18B20.H #define no
[单片机]
DS18B20,源程序测试OK
; FLAG1: 标志位,为 1 时表示检测到DS18B20 ; DQ: DS18B20的数据总线接脚 ; TEMPER_NUM:保存读出的温度数据 ; 本程序仅适合单个DS18B20和51 单片机 的连接, 晶振 为12M Hz 左右 TEMPER_L EQU 36H TEMPER_H EQU 35H DQ BIT P1.7 ; DS18B20初始化程序 ;//*****************************************// INIT_1820: SETB DQ NOP CLR DQ MOV R0,#06BH TSR1: DJNZ R0,TSR1 ;
[单片机]
智能温度传感器DS18B20的原理与应用
DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。因而使用DS18B20可使系统结构更趋简单,可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。 1DS18
[传感技术]
基于AT89C51和DS18B20的最简温度测量系统
  l引 言   温度的测量和控制在激光器、光纤光栅的使用及其他的工农业生产和科学研究中应用广泛。 温度检测 的传统方法是使用诸如 热电偶 、热电阻、半导体PN结之类的 模拟 温度 传感器 。信号经取样、放大后通过 模数转换 ,再交自单片机处理。被测温度信号从温敏元件到单片机,经过众多器件,易受干扰、不易控制且精度不高。因此,本文介绍一种新型的可编程 温度传感器 DS18B20,他能代替模拟温度传感器和信号处理电路,直接与单片机沟通,完成温度采集和数据处理。DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合于恶劣环境下进行现场 温度测量 ,有广泛的应用前景。   2温度测量系统硬件
[单片机]
STM8S - DS18B20
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-- /******** STM8S-Discovery DS18B20 Test ******** * 版本.........: 1.0 * 目标.........: STM8S105C6T6 * 文件名.......: main.c * 开发环境.....: IAR for STM8 V1.1 ***********************************************/ #include iostm8s105
[单片机]
农业大棚智能检测环境系统
0 引言 随着科学技术的不断发展,人们的生产对周围环境的要求也越来越高,比如农作物大棚、工厂以及一些大型机械设备,都需要实时掌握工作条件的温度、光照等。传统的人工测量方法浪费人力物力,效率低,安全性差。随着单片微型机技术的发展,人们已越来越多地采用单片机对一些工业控制系统参数进行检测和控制。与此同时,PC机具有强大的监控和管理功能,而单片机则具有简洁、灵活、快速的控制特点。通过PC机的RS 232串行接口与外部设备进行通信,是现在测控中常用的一种通信解决方案,所以PC机与单片机之间的通信具有非常重要的现实意义。 1 系统硬件总体设计 系统总体设计是基于上位机利用串口通信与单片机环境监控系统设计,由上位机、通信接口和下位机
[单片机]
农业大棚智能检测环境系统
采用单片微控制器的低成本数字温度计
在许多应用中,温度的检测和显示功能都是所期望或绝对需要的。温度探头、自动调温器、CPU监控器和过程控制设备就是一些这样的应用。插图示出了一个用于温度检测和显示的简单系统。该电路只需要一个微控制器(MCU),而不像其他解决方案那样需要单独的功率管理和模拟变换器芯片。而且,该电路无需对复位引脚进行任何的特殊处理,因为所使用的MCU引入了节电型的检测方法。 德州仪器(TI)公司的MSP430F412型MCU在执行快闪存储器代码的同时由一个高速内部振荡器进行计时。首先,代码运用单斜率模拟转换技术来读取电阻性传感器的信息。然后,将读数变换成BCD值并显示于LCD上。LCD不需要单独的驱动芯片;它由MCU直接驱动。LCD还会显示一个闪烁的“F”
[单片机]
基于DS18B20与TMS320LF2407A的温度测量系统
  前 言   DS18B2普遍都是和单片机配合使用,很少有关于 DSP 与DS18B20的连接的接口报道,所以此文详细介绍了TMS320LF2407与 DS18B20的连接方法,并且很详细的介绍了如何用C语言完成精确的软件延时,从而完成DS18B20与TMS320LF2407之间的基于单线总线协议的数据通讯。   1 DS18B20的时序   1. 1 复位时序   复位使用DS18B20时,首先需将其复位,然后才能执行其它命令。复位时,主机将数据线拉为低电平并保持480us~960us,然后释放数据线,再由上拉电阻将数据线拉高15~60us,等待DS18B20发出存在脉冲,存在脉冲有效时间为60~240us,这
[单片机]
基于<font color='red'>DS18B20</font>与TMS320LF2407A的温度测量系统
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
502 Bad Gateway

502 Bad Gateway


openresty
设计资源 培训 开发板 精华推荐

502 Bad Gateway

502 Bad Gateway


openresty
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
随便看看
    502 Bad Gateway

    502 Bad Gateway


    openresty
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
502 Bad Gateway

502 Bad Gateway


openresty