制作DS18B20数字温度计我还想具有报警功能

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 00:46:00

制作DS18B20数字温度计我还想具有报警功能
制作DS18B20数字温度计我还想具有报警功能

制作DS18B20数字温度计我还想具有报警功能
DS18B20引脚定义:
(1)DQ为数字信号输入/输出端;(需要加个上拉电阻加到电源上)
(2)GND为电源地;
(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地).
本人做过它的课程设计.
以下是程序,你要是有DS18B20的资料最好,没有的话我可以传给你.
2个数码管显示.精确到1°C.程序没加报警功能,你可以在最后一段中,比较一下TEMPER_L和TEMPER_H中的数值 与你要报警的数值.自己试一下吧!
ORG 0000H
;单片机内存分配申明!
TEMPER_L EQU 29H;用于保存读出温度的低8位
TEMPER_H EQU 28H;用于保存读出温度的高8位
FLAG1 EQU 38H;是否检测到DS18B20标志位
a_bit EQU 20H;数码管个位数存放内存位置
b_bit EQU 21H ;数码管十位数存放内存位置
DQ EQU P1.2
CHECK EQU P1.0
CHECK1 EQU P1.3
NEGTIVE EQU P1.4
MAIN:LCALL GET_TEMPER;调用读温度子程序
;进行温度显示,用两位数码管来显示
;显示范围-55到99度,显示精度为1度
LCALL DISPLAY;调用数码管显示子程序
AJMP MAIN
; DS18B20复位初始化子程序
INIT_1820:
SETB DQ
NOP
CLR DQ
;主机发出延时637微秒的复位低脉冲
MOV R1,#3H
TSR1:MOV R0,#6BH
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存在
CLR CHECK1;检查到DS18B20就点亮LED
LJMP TSR5
TSR4:CLR FLAG1 ; 清标志位,表示DS1820不存在
LJMP TSR7
TSR5:MOV R0,#117
TSR6:DJNZ R0,TSR6 ; 时序要求延时一段时间
TSR7:SETB DQ
RET
; 读出转换后的温度值
GET_TEMPER:
SETB DQ
BCD:LCALL INIT_1820;先复位DS18B20
JB FLAG1,TSS2
LJMP BCD ; 判断DS1820是否存在?若DS18B20不存在则返回
TSS2:; MOV R3,#23
; DJNZ R3,$
CLR CHECK ;DS18B20已经被检测到!
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#44H ; 发出温度转换命令
LCALL WRITE_1820
LCALL DELAY;延时750微秒
LCALL INIT_1820;准备读温度前先复位
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 发出读温度命令
LCALL WRITE_1820
LCALL READ_1820; 将读出的温度数据保存
RET
;延时程序
DELAY:MOV R2,#4H
DELAYA:MOV R3,#0FFH
DELAYB:MOV R4,#0FFH
DELAYC:DJNZ R4,DELAYC
DJNZ R3,DELAYB
DJNZ R2,DELAYA
RET
;写DS18B20的子程序(有具体的时序要求)
WRITE_1820:
MOV R2,#8;一共8位数据
CLR C
SETB DQ
NOP
NOP
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_1820:
MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
MOV R1,#TEMPER_L ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)
RE00:MOV R2,#8;数据一共有8位
RE01:CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#8 ;16us
RE10:DJNZ R3,RE10
MOV C,DQ
MOV R3,#23 ;70us
RE20:DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
;显示子程序
;根据TEMPER_H高5位是1来判断温度是否为负,若为负,则取反再+1
DISPLAY:
MOV A,TEMPER_H
JNB ACC.1,POSI
CLR NEGTIVE
CPL A
MOV TEMPER_H,A
MOV A,TEMPER_L
CPL A
CLR C
INC A
MOV TEMPER_L,A
MOV A,TEMPER_H
ADDC A,#0H
MOV TEMPER_H,A
;TEMPER_H高4位为0,根据温度计算方法,TEMPER_H,TEMPER_L的数值除16就是实际温度
;右移4位即实际温度,把TEMPER_L高4位和TEMPER_H低4位合并再对换,后转换为10进制即得实际温度数据
POSI:MOV A,TEMPER_L
ANL A,#0F0H
MOV a_bit,A
MOV A,TEMPER_H
ADD A,a_bit
SWAP A
CLR C
DA A
MOV b_bit,A
ANL A,#0FH
MOV DPTR,#ZIXING
MOVC A,@A+DPTR
MOV P3,A
MOV A,b_bit
SWAP A
ANL A,#0FH
MOV DPTR,#ZIXING
MOVC A,@A+DPTR
MOV P2,A
RET
ZIXING:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END

制作DS18B20数字温度计我还想具有报警功能 数字温度计工作原理是什么啊~我用的是DS18B20和AT89S52单片机~ 用c51单片机和热敏电阻制作温度计不用ds18b20做 基于AT89C2051和DS18B20的数字温度计的原理图 关于温度传感器DS18B20的疑问我做的数字温度计,利用DS18B20作为检测元件,外接51单片机最小系统.烧完程序后为什么一直只显示85.0度呢? 用AT89S51单片机和DS18B20温度传感器如何设计数字温度计急用!我是新手. 急求基于DS18B20的单片机数字温度计的Proteus仿真文件我做基于单片机的数字温度计,用的是DS18B20温度传感器,可是在Proteus里面仿真不了,但是要求必须仿真,电路原理图也行,源程序也行,最好有Pro 急求基于51单片机和DS18B20的数字温度计设计要proteus原理图能仿真和汇编程序,466851514谢了 数字温度传感器ds18b20有什么特点 在proteus上仿真数字温度计为什么能测到温度?用DS18B20是怎么做到的?温度是怎么在仿真软件中传进去的?我的意思是,温度是怎么传到仿真软件中去的从而测到温度? 在运行数字温度计仿真(proteus)时,怎样初始化温度? 为什么只显示0,我的DS18B20读取温度程序应该没问题就是调整proteus上的+-号,也改变不了温度.续接上面unsigned int Readtemp()//读取温度{ unsigned 一线式数字温度传感器DS18B20,一线式数字温度传感器DS18B20的“一线式”是什么意思,感激不尽. 当今世界上有许多国家禁止用汞制作温度计,这是因为汞具有 数字温度计误差分析基于DS18B20数字温度计,用MCS-51系列单片机控制.实物已经出来了,但是在此需要个误差分析(用其他温度计与自己设计的温度计测出的温度误差),误差分析.都有些什么原因 怎样制作温度计 怎样制作温度计 制作温度计的感受 温度计的制作过程