水电电工知识
电工文库|温度传感器DS1820使用中注意事项
2017-01-10  浏览:16
水电之家讯:DS1820虽然具有测温系统简单、测温精度高、连接方便、占用口线少等优点,但在实际应用中也应注意以下几方面的问题:

(1)较小的硬件开销需要相对复杂的软件进行补偿,由于DS1820与微处理器间采用串行数据传送,因此,在对DS1820进行读写编程时,必须严格的保证读写时序,否则将无法读取测温结果。在使用PL/M、C等高级语言进行系统程序设计时,对DS1820操作部分最好采用汇编语言实现。由于本节技术复杂性,对一般读者DS18B20内容只作阅读。

(2)在DS1820的有关资料中均未提及单总线上所挂DS1820数量问题,容易使人误认为可以挂任意多个DS1820,在实际应用中并非如此。当单总线上所挂DS1820超过8个时,就需要解决微处理器的总线驱动问题,这一点在进行多点测温系统设计时要加以注意。

(3)连接DS1820的总线电缆是有长度限制的。试验中,当采用普通信号电缆传输长度超过50m时,读取的测温数据将发生错误。当将总线电缆改为双绞线带屏蔽电缆时,正常通讯距离可达150m,当采用每米绞合次数更多的双绞线带屏蔽电缆时,正常通讯距离进一步加长。这种情况主要是由总线分布电容使信号波形产生畸变造成的。因此,在用DS1820进行长距离测温系统设计时要充分考虑总线分布电容和阻抗匹配问题。 温度传感器DS18B20指令(命令)说明

命令功能 指令代码

功能说明

读ROM

33H

读DS18B20中的64位光刻ROM序列号

启动转换

44H

启动温度转换,结果存入内部高速暂存器RAM中

写温限值

4EH

向内部字节地址2和3 中写入上下限温度值

匹配ROM

55H

发出命令后,还发送64位ROM序列号寻找对应号码的18B20

读供电

B4H

读电源供给方式: 18B20发0为寄生供电,1为外接供电

读取温度

BEH

读取温度寄存器等9字节的内容

跳过ROM

CCH

单片18B20时,跳过读序列号操作,直接发温度转换

报警搜索

ECH

执行后,当温度超过上下限值时18B20才作响应

搜索ROM

F0H

搜索同一条线上挂接有几个18B20,识别ROM

(4)在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序总要等待DS18B20的返回信号,一旦某个DS18B20接触不好或断线,当程序读该DS18B20时,将没有返回信号,程序会进入死循环。这一点在进行DS18B20硬件连接和软件设计时也要给予一定的重视。测温电缆线建议采用屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接VCC和地线,屏蔽层在源端单点接地。

当用P1.0和DS18B20相连接时参考程序如下。

DQ EQU P1.0

ORG 0000H

AJMP MAIN

ORG 1000H

MAIN: LCALL INIT_18B20;调复位子程序

MOV A,#0CCH

LCALL WRITE_18B20 ; 跳过读序列号操作

MOV A,#4EH;写限制温度命令

LCALL WRITE_18B20 

MOV A, #TH;写入上限温度值

LCALL WRITE_18B20

MOVA,#TL

LCALL WRITE_18B20;写入下限温度值

MOV A, CONFIG12

LCALL WRITE_18B20;设为12位转换精度

MAIN1: LCALL INIT_18B20 ;复位子程序

LCALL RD_TEMPER ;读温度

LCALL LDVV ;调数据处理子程序,简写程序

LCALL DISPLAY;调显示子程序, 省略程序

LJMP MAIN1 

;**********DS18B20复位程序*****************

INIT_18B20: MOV R7 #06H;复位时查询次数

LOP0: SETB DQ;18B20输入端

MOV R0,#0FBH

CLR DQ

TSR1: DJNZ R0,TSR1 ;维持DQ低电平480μs~960μs

SETB DQ

MOV R0,#25H

TSR2: DJNZ R0,TSR2

JNB DQ ,TSR3 ;查看18B20把DQ拉低否

DJNZ R7,LOP0 ;未拉低则延时再查,6次结束

SETB P2.0 ;延时期未能查到18B20

SJMP TSR4

TSR3: SETB FLAG1 ;置标志位FLAG1,表明DS18B20存在

CLR P2.0 ;二极管指示

TSR5: MOV R0,#06BH

TSR6: DJNZ R0,TSR6;延时后结束

CLR C

ORL C, DQ

LOP1;JC TSR4 ;确认一次

AJMP TSR7

TSR4: CLR FLAG1 ;未能查到

SETB P2.0;取消指示灯

SETB DQ ;表明不存在

TSR7: RET

;*****************读转换后的温度值****************

RD_TEMPER:

SETB DQ

LCALL INIT_18B20

JB FLAG1,TSS2

RET ;若不存在则返回

TSS2: MOV A,#0CCH;跳过ROM

LCALL WRITE_18B20

MOV A,#44H;发出温度转换命令

LCALL WRITE_18B20

LCALL DELAY ;调延时子程序500ms

LCALL INIT_18B20 ;调复位子程序

MOV A,#0CCH ;跳过ROM

LCALL WRITE_18B20

MOV A,#0BEH ;发出读温度换命令

LCALL WRITE_18B20

LCALL READ2_18B20 ;读两个字节的温度

RET

;***************写DS18B20程序************

WRITE_18B20:

MOV R2,#8

SETB DQ

WR1: CLR DQ

MOV R3,#6

DJNZ R3,$;写前保持15μs低电平

RRC A

MOV DQ,C ;写入一位

MOV R3,#30

DJNZ R3,$ ;等待18B20读入

SETB DQ

DJNZ R2,WR1 ;8位写完否

SETB DQ ;写完结束

RET

;***********读18B20程序,读出两个字节的温度*********

READ2_18B20:

MOV R4,#2;低位存在29H,高位存在28H

MOV R1,#29H

RE00: MOV R2,#8

RE01: CLR DQ ;低电平10μs

NOP

NOP

NOP

SETB DQ ;高电平延时

MOV R3,#7

DJNZ R3,$

MOV C,DQ;读入一位温度到C中

MOV R3,#30

DJNZ R3,$

RRC A

DJNZ R2,RE01 ;共读8位

MOV @R1,A;保存

DECR1 ;保存下一数据单元地址

DJNZ R4,RE00 ;读第二字节

RET

;************读出的温度进行数据转换**************

LDVV: MOV A,29H ; 看成温度大于0

MOV C,28H.0 ;将28H中的最低位移入C

RRC A

MOV C,28H.1

RRC A

MOV C,28H.2

RRC A

MOV C,28H.3

RRC A

MOV 30H,A ;整数温度结果存30H单元

JNC LOP2 ;小数点后面的数四舍五入

INC 30H

LOP2:RET

水电之家为您提供最全面的管材,管件,水电,电线,电工,管材水电品牌的装修知识点和各种管材水电的导购与在线购买服务,拥有最便宜的管材水电价格和最优质的售后服务,每天都有秒杀的抢购活动哦!敬请登陆水电之家:http://shuidian.jc68.com/
更多»您可能感兴趣的文章:
更多»有关 电工 的产品:
  • 水电电工资讯
  • 发表评论 | 0评
  • 评论登陆
  • 移动社区 天花之家 木门之家 灯具之家 铁艺之家 幕墙之家 五金头条 楼梯头条 墙纸头条 壁纸头条 玻璃头条 老姚之家 灯饰之家 电气之家 全景头条 照明之家 防水之家 防盗之家 区快洞察 建材 枣庄建材 临沂建材 南昌建材 上饶建材 抚州建材 宜春建材 吉安建材 赣州建材 鹰潭建材 新余建材 九江建材 萍乡建材 景德镇陶瓷 石家庄建材 衡水建材 廊坊建材 沧州建材 承德建材 建材之家 企业之家 720全景
    (c)2015-2017 Bybc.cn SYSTEM All Rights Reserved