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温度传感器温度计程序
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)