⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 18b20ziliao.txt

📁 本资料为温度传感器18B20的应用与程序.
💻 TXT
字号:
18b20程序及应用 
 

 
  
DS18B20-p.htm" target="_blank" title="DS18B20货源和PDF资料">DS18B20原理及引脚介绍

DS18B20-p.htm" target="_blank" title="DS18B20货源和PDF资料">DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。DS18B20-p.htm" target="_blank" title="DS18B20货源和PDF资料">DS18B20产品的特点

  (1)、只要求一个端口即可实现通信。

  (2)、在DS18B20-p.htm" target="_blank" title="DS18B20货源和PDF资料">DS18B20中的每个器件上都有独一无二的序列号。

  (3)、实际应用中不需要外部任何元器件即可实现测温。

  (4)、测量温度范围在-55。C到+125。C之间。

  (5)、数字温度计的分辨率用户可以从9位到12位选择。

  (6)、内部有温度上、下限告警设置。

TO-92封装的DS18B20-p.htm" target="_blank" title="DS18B20货源和PDF资料">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温度传感器温度计程序 window.google_render_ad();
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -