18b20程序及应用

ds18b20原理及引脚介绍
ds18b20数字温度计是dallas公司生产的1-wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。ds18b20产品的特点
(1)、只要求一个端口即可实现通信。
(2)、在ds18b20中的每个器件上都有独一无二的序列号。
(3)、实际应用中不需要外部任何元器件即可实现测温。
(4)、测量温度范围在-55。c到+125。c之间。
(5)、数字温度计的分辨率用户可以从9位到12位选择。
(6)、内部有温度上、下限告警设置。
to-92封装的ds18b20的引脚排列见下图,其引脚功能描述见下:
1.gnd
地信号
2.dq
数据输入/输出引脚。开漏单总线接口引脚。当被用着在寄生电源下,也可以向器件提供电源。
3.vdd
可选择的vdd引脚。当工作于寄生电源时,此引脚必须接地。
18b20应用电路图
18b20控制命令字
18b20的rom命令
指令 说明
读rom(33h)读18b20的序列号
匹配rom(55h)继续读完64位序列号的命令,用于多个18b20时定位
跳过rom(cch)此命令执行后的在存储器打操作针对在线所有18b20
搜rom(f0h)识别总线上各器件的编码,为操作各器件做准备
报警搜索(ech)公温度越限的器件对此命令作出响应
18b20存储控制命令
指令 说明
温度转换(44h)启动在线ds18b20做温度ad转换
读数据(beh)从高速暂存器读9位温度值和crc值
写数据(4eh)将数据写入高速暂存的第3和第4字节中
复制(48h)将高速暂存器中第3和第4字节复制到eeram
读eeram(b8h)将eeram内容写入高速暂存器中第3和第4字节
读电源供电方式(b4h)了解18b20的供电方式
18b20程序
wendu_l equ 29h;用于保存读出温度的低字节
wendu_h equ 28h;用于保存读出温度的高字节
xiaoshu equ 27h;用于保存温度的小数部分
zhengshu equ 26h;用于保存整数部分
biaozhi bit 50h;18b20检查位1为存在,0为不存在
org 0000h
ajmp main
org 0030h
main:mov scon,#00h
acall duwen
acall zhenghe
acall bcd
acall disp
acall time1
ajmp main
;----------------------------------------------------------------------------------------------------------------------------------------
;读温度子程序
;----------------------------------------------------------------------------------------------------------------------------------------
duwen:setb p2.0
acall fuwei ;读温度之前必须先复位
jb biaozhi,cunzai;查看标志位看18b20是否存在,1为存在,0为不存在
ret ;不存在则返回
cunzai: ;存在则开始读温度
mov a,#0cch ;跳过rom匹配
acall xie ;调写子程序
mov a,#44h ;发出温度转换命令
acall xie ;调写子程序
acall time1 ;调1秒延时,等等ad转换完成,现在分辨率为12位,温度最大转换时间为750ms
acall fuwei ;读温前需要复位
mov a,#0cch ;跳过rom匹配
acall xie
mov a,#0beh ;发读温度命令
acall xie
acall dushu ;将闱出数据读回
clr p1.2
ret
;------------------------------------------------------------------------------------------------------------------------------
;复位子程序
;18b20复位需要将数据位拉低500us
;18b20收到信号后要等待16-60us,然后发出60-240us的低脉冲
;-------------------------------------------------------------------------------------------------------------------------------
fuwei:setb p2.0
nop
clr p2.0
mov r0,#3
inte:mov r1,#107 ;设一个537us延时
kk1: djnz r1,kk1
djnz r0,inte
setb p2.0 ;拉高数据线,等待回应
nop
nop
nop
mov r0,#25;
inte1:jnb p2.0,inte2 ;延时延时50us等待18b20回应,若返回低脉冲则说明18b20存在
djnz r0 ,inte1
ajmp inte3 ;经过反应时间而没检测到18b20的存在,则跳转去清零标志位
inte2:setb biaozhi ;检测到18b20存在,置1标志位
clr p1.0
ajmp inte4
inte3:clr biaozhi ;没检测到18b20,清零标志位
ajmp inte5
inte4:mov r0,#120 ;延时240us,确定回应信号已发完
kk: djnz r0,kk
inte5:setb p2.0
ret
;----------------------------------------------------------------------------------------------------------------------------------------
;写18b20子程序
;-----------------------------------------------------------------------------------------------------------------------------------------
xie:mov r2,#8 ;写计数寄存器,一共有8位数据
clr c
lp:clr p2.0
mov r3,#6;设一个延时
ll1:djnz r3,ll1
rrc a;右循环,先输出低位
mov p2.0,c
mov r3,#23;设延时
ll: djnz r3,ll;
setb p2.0
nop
nop
djnz r2,lp ;判断是否完成数据传送
setb p2.0 ;完成传送拉高数据位
ret
;-----------------------------------------------------------------------------------------------------------------------------------------
;从18b20中读出温度数据子程序
;-----------------------------------------------------------------------------------------------------------------------------------------
dushu:mov r4,#2 ;设读回数据个数指针
mov r1,#wendu_l ;把温度数据低位存入29h
re: mov r2,#8 ;设数据长度指针
re1: clr c
setb p2.0
nop
nop
clr p2.0
nop
nop
nop
setb p2.0
mov r3,#9
djnz r3,$
mov c,p2.0
mov r3,#23
nn: djnz r3,nn
rrc a
djnz r2,re1
mov @r1,a
dec r1;高位存入28h
djnz r4,re
ret
;---------------------------------------------------------------------------------------------------------------------------------
;数据整合子程序
;温度源数据的整合,读出数据的高字节的低四位决定温度的整数部分
;低字节的低四位决定小数部分
;-----------------------------------------------------------------------------------------------------------------------------
zhenghe:mov a,#0fh
anl a,wendu_l;低字节的低四位就是小数部分
mov xiaoshu,a ;获得小数部分
mov a,wendu_l;将高字节的低四位移入低字节的高4位,
mov c,40h;获得的新字节就是整数部分的数据
rrc a
mov c,41h
rrc a
mov c,42h
rrc a
mov c,43h
rrc a
mov zhengshu,a
ret
;-----------------------------------------------------------------------------------------------------------------------------------------
;显示数据拆解程序、显示程序、延时程序
;----------------------------------------------------------------------------------------------------------------------------------------
;数据拆解程序
bcd:mov a,zhengshu
mov b,#10
div ab
mov 50h,a
mov 51h,b
mov a,xiaoshu
mov r0,#52h
mov r2,#4
d0:mov b,#10
mul ab
mov b,#16
div ab
mov @r0,a
inc r0
mov a,b
djnz r2,d0
ret
;-----------------------------------
;显示程序
;----------------------------------
disp:acall time
mov r7,#6
mov dptr,#tab
mov r0,#55h
lp1:mov a ,@r0;
movc a,@a+dptr
cjne r7,#2,ne1
anl a,#07fh
ne1:mov sbuf,a
jnb ti ,$
clr ti
dec r0
djnz r7,lp1
ret
;----------------------------------------
;延时程序
;----------------------------------------
time1:mov r6,#4
loop2:mov r5,#250
loop1:acall d1ms
djnz r5,loop1
djnz r6,loop2
ret
time:mov r6,#200
loop3:acall d1ms
djnz r6,loop3
ret
d1ms:mov r7,#250
loop0:nop
nop
nop
djnz r7,loop0
ret
tab:db 0c0h,0f9h,0a4h,0b0h
db 99h, 92h, 82h, 0f8h
db 80h, 90h, 88h, 83h
db 0c6h,0a1h,86h, 8eh
db 0ffh
end
18b20温度传感器温度计程序

高性能锂离子电池
中芯国际发布关于美国出口限制的进一步说明公告
该如何看待工业机器人视觉市场
加州将立法要求自动驾驶车在2025年前实现零排放
嵌入式应用对微处理器的需求
18b20程序及应用
SIA:11月份全球半导体产品销售额仍在增长 达到394亿美元
sysRq键的使用方法
乐鑫打造智能语音设备开发平台 飞荣达荣登新兴产业“领航企业50强”
三星146英寸MicroLED电视9月开始量产,设备寿命将达到10万小时
坚瑞沃能侧重于锂电池电芯的制造
英创信息技术工控主板扩展高精度时钟方案(WinCE)简介
曝LG或发布至少6款手机于CES2017展会
波峰焊不良分析原因分析
完整的RFID系统是怎样的结构
小米6和荣耀9谁更好?凭心而论,我还是喜欢小米官网的客服妹子
特斯拉为Autopilot推出新功能“Navigate”
基于CNN的汽车视觉识别系统应用介绍
DP83TC811S-Q1的优点及在T-BOX的应用中的优势
河套IT TALK 67: (原创) 基于深度学习的超分技术(万字长文)