找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9104|回复: 12
打印 上一主题 下一主题
收起左侧

用DS18B20制作数字温度计详解 汇编 有实物图

  [复制链接]
跳转到指定楼层
楼主
ID:85192 发表于 2015-7-9 23:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DALLAS最新单线数字温度传感器DS18B20简介
新的“一线器件”体积更小、适用电压更宽、更经济 Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持 “一线总线”接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。DS18B20 DS1822 “一线总线”数字化温度传感器 DS1820一样,DS18B20 支持“一线总线”接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°CDS1822的精度较差为± 2°C 。现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。 DS18B20 DS1822 的特性 DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS18B20的性能是新一代产品中最好的!性能价格比也非常出色! DS1822 DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。 继“一线总线”的早期产品后,DS1820开辟了温度传感器技术的新概念。DS18B20DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。
DS18B20的内部结构
      DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器THTL、配置寄存器。DS18B20的管脚排列如下:
      DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
       光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
      DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:16位符号扩展的二进制补码读数形式提供,以0.0625/LSB形式表达,其中S为符号位。
      这是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
DS18B20温度传感器的存储器
       DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器THTL和结构寄存器。
       暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是THTL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。
该字节各位的意义如下:
TM R1 R0 1 1 1 1 1
低五位一直都是1 TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0,用户不要去改动。R1R0用来设置分辨率,如下表所示:(DS18B20出厂时被设置为12位)
分辨率设置表:
R1 R0 分辨率 温度最大转换时间
0 0 9 93.75ms
0 1 10 187.5ms
1 0 11 375ms
1 1 12 750ms
       根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主CPU收到此信号表示复位成功。
DS1820使用中注意事项
  DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:
  (1)较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/MC等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。
  (2)DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个DS1820,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。
  (3)连接DS1820的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS1820进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。
  (4)DS1820测温程序设计中,向DS1820发出温度转换命令后,程序总要等待DS1820的返回信号,一旦某个DS1820接触不好或断线,当程序读该DS1820时,将没有返回信号,程序进入死循环。这一点在进行DS1820硬件连接和软件设计时也要给予一定的重视。
测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。
汇编源程序如下:
ORG 0000H
TEMPER_L EQU 41H ;用于保存读出温度的低8      
TEMPER_H EQU 40H ;用于保存读出温度的高8
FLAG1 EQU 38H ;是否检测到DS18B20标志位
A_BIT1 EQU 31H ;数码管个位数存放内存位置
B_BIT1 EQU 32H ;数码管十位数存放内存位置
D_BIT1 EQU 35H      ;数码管百位数存放内存位置
DQ EQU P3.7 ;30H,31H,32H,33H: X 个位 十位 X
MOD7: MOV SP,#60H
LCALL GET_TEMPER ;调用读温度子程序
LCALL TEMPCOV
LCALL DISPLAY ;调用数码管显示子程序
AJMP MOD7
TEMP0: INC A
AJMP TEMP1
TEMPCOV: MOV A,TEMPER_L ;数据处理子程序TEMPCOV
MOV B,#16
DIV AB
JB B.3,TEMP0
TEMP1: MOV 34H,A ;TEMPER_L的高四位右移四位,存入34H中(温度值)
MOV A,B ;TEMPER_L的低四位X10/16得小数后一位数.
MOV B,#10
MUL AB
MOV B,#16
DIV AB
MOV 30H,A ;将小数后一位数.存入30H
MOV A,TEMPER_H ;TEMPER_H中存放高8位数,权重16
MOV B,#16
MUL AB
ADD A,34H ;34H中存入温度值的整数部分
MOV B,#10
DIV AB
MOV 31H,B ;个位存入31H
MOV B,#10 ;
DIV AB ;
MOV 32H,B ;十位存入32H
MOV B,#10 ;
DIV AB ;
MOV 35H,B ;百位存入33H
MOV A,TEMPER_H
MOV 33H,#10H ;
JB ACC.7,EXIT7
MOV 33H,#00H
EXIT7: RET
INIT_1820: ;这是DS18B20复位初始化子程序
SETB DQ
NOP
CLR DQ ;主机发出延时537微秒的复位低脉冲
MOV R1,#3
TSR1: MOV R0,#107
DJNZ R0,$
DJNZ R1,TSR1
SETB DQ ;然后拉高数据线
NOP
NOP
NOP
MOV R0,#25H
TSR2: JNB DQ,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 DQ
RET
GET_TEMPER: ;读出转换后的温度值
SETB DQ
LCALL INIT_1820 ;先复位DS18B20
JB FLAG1,TSS2
RET ;判断DS1820是否存在?DS18B20不存在则返回
TSS2: MOV A,#0CCH ;跳过ROM匹配
LCALL WRITE_1820
MOV A,#44H ;发出温度转换命令
LCALL WRITE_1820
LCALL DISPLAY ;等待AD转换结束,12位的话750微秒
LCALL INIT_1820 ;准备读温度前先复位
MOV A,#0CCH ;跳过ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ;发出读温度命令
LCALL WRITE_1820
LCALL READ_18200 ;将读出的温度数据保存到35H/36H
RET

;DS18B20的子程序(有具体的时序要求)
WRITE_1820: MOV R2,#8 ;一共8位数据
CLR C
WR1: CLR DQ
MOV R3,#6
DJNZ R3,$
RRC A
MOV DQ,C
MOV R3,#23
DJNZ R3,$
SETB DQ
NOP
DJNZ R2,WR1
SETB DQ
RET
;DS18B20的程序,DS18B20中读出两个字节的温度数据
READ_18200: MOV R4,#2 ;将温度高位和低位从DS18B20中读出
MOV R1,#TEMPER_L ;低位存入TEMPER_L(TEMPER_L),高位存入(TEMPER_H)
RE00: MOV R2,#8 ;数据一共有8
RE01: CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#9
RE10: DJNZ R3,RE10
MOV C,DQ
MOV R3,#23
RE20: DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
;显示子程序
DISPLAY: MOV DPTR,#TABLE ;指定查表启始地址
MOV R0,#4
DPL1: MOV R1,#250 ;显示1000
DPLOP: MOV A,A_BIT1 ;取个位数
MOVC A,@A+DPTR ;查个位数的7段代码
MOV P0,A ;送出个位的7段代码
CLR P2.0 ;开个位显示
ACALL D1MS ;显示1MS
SETB P2.0
MOV A,B_BIT1 ;取十位数
MOVC A,@A+DPTR ;查十位数的7段代码
MOV P0,A ;送出十位的7段代码
CLR P2.1 ;开十位显示
ACALL D1MS ;显示1MS
SETB P2.1
MOV A,D_BIT1 ;取百位数
MOVC A,@A+DPTR ;查百位数的7段代码
MOV P0,A ;送出百位的7段代码
CLR P2.2;开百位显示
ACALL D1MS ;显示1MS
SETB P2.2
MOV P0,#00H
DJNZ R1,DPLOP ;100次没完循环
DJNZ R0,DPL1 ;4100次没完循环
RET
;1MS延时(12MHZ)
D1MS: MOV R7,#0FFH
DJNZ R7,$
RET
;7段数码管09数字的共阳显示代码
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H
      DB 92H,82H,0F8H,80H,90H
     END
注:晶振12MHZ
本程序已通过实践验证!!!












评分

参与人数 2威望 +2 黑币 +7 收起 理由
1424603412 + 5 赞一个!
lshhjx + 2 + 2 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶1 踩
回复

使用道具 举报

沙发
ID:45963 发表于 2015-7-14 16:17 | 只看该作者
点个赞,加不了分
回复

使用道具 举报

板凳
ID:85702 发表于 2015-7-14 23:56 | 只看该作者
汇编的。不容易懂呀
回复

使用道具 举报

地板
ID:86421 发表于 2015-7-21 23:07 | 只看该作者
点个赞
回复

使用道具 举报

5#
ID:85847 发表于 2015-7-24 19:08 | 只看该作者
如果有C语言版本的就更好了。
回复

使用道具 举报

6#
ID:87141 发表于 2015-7-29 09:57 | 只看该作者
点赞,不错。
回复

使用道具 举报

7#
ID:59827 发表于 2015-8-15 11:26 | 只看该作者
这个汇编语言的,值得学习啊!
回复

使用道具 举报

8#
ID:89071 发表于 2015-9-1 15:00 | 只看该作者
赞  期待C语言版本的 还有多路版本
回复

使用道具 举报

9#
ID:517951 发表于 2020-11-15 07:54 | 只看该作者

这个汇编语言的牛,18B20的资料很详细值得学习啊!
回复

使用道具 举报

10#
ID:61140 发表于 2022-4-3 14:28 | 只看该作者
无图无真相,只有个黑图,点亮的图呢?
回复

使用道具 举报

11#
ID:72088 发表于 2022-4-5 12:31 | 只看该作者
这汇编咋和我的一样呢,定义符号也一样,难道真是巧合?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表