📄 autotem.asm
字号:
-- 18B20的读写以及显示——89C51
TEMPER_L EQU 29H ;用于保存读出温度的低8位
TEMPER_H EQU 28H ;用于保存读出温度的高8位
FLAG1 EQU 38H ;是否检测到DS18B20标志位
ORG 0000H
LJMP START
ORG 0100H
START: MOV P1,#0FFH
MOV P2,#1FH
LJMP MAIN0
MOV R4,#50
MAIN0: LCALL INIT_1820
LCALL GET_TEMPER
LCALL WORK
LCALL DIS
BEGINK1: MOV R3,#50
LCALL DIS
BEGINK: LCALL DIS
DJNZ R3,BEGINK
DJNZ R4,BEGINK1
ajmp main0
; DS18B20复位初始化程序
INIT_1820:
SETB P3.0
NOP
CLR P3.0
MOV R0,#06BH ;主机发出延时537微秒的复位低脉冲
MOV R1,#03H
TSR1:
DJNZ R0,TSR1
MOV R0,#6BH
DJNZ R1,TSR1
SETB P3.0 ;然后拉高数据线
NOP
NOP
NOP
MOV R0,#25H
TSR2:
JNB P3.0,TSR3 ;等待DS18B20回应
DJNZ R0,TSR2
LJMP TSR4 ;延时
TSR3:
SETB FLAG1 ;置标志位,表示DS1820存在
LJMP TSR5
TSR4:
CLR FLAG1 ;清标志位,表示DS1820不存在
LJMP TSR7
TSR5:
MOV R0,#06BH
TSR6:
DJNZ R0,TSR6 ;时序要求延时一段时间
TSR7:
SETB P3.0
RET
; 读出转换后的温度值
GET_TEMPER:
SETB P3.0 ;定时入口
LCALL INIT_1820 ;先复位DS18B20
JB FLAG1,TSS2
RET ;判断DS1820是否存在?
TSS2: ;若DS18B20不存在则返回
MOV A,#0CCH ;跳过ROM匹配
LCALL WRITE_1820
MOV A,#44H ;发出温度转换命令
LCALL WRITE_1820
LCALL DIS ;这里通过调用显示子程序实
;现延时一段时间,等待AD转
;换结束,12位的话750微秒.
LCALL INIT_1820 ;准备读温度前先复位
MOV A,#0CCH ;跳过ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ;发出读温度命令
LCALL WRITE_1820
LCALL READ_18200 ;将读出的温度数据保存到35H/36H
RET
;写DS18B20的子程序(有具体的时序要求)
WRITE_1820:
MOV R2,#8 ;一共8位数据
CLR C
WR1:
CLR P3.0
MOV R3,#6
DJNZ R3,$
RRC A
MOV P3.0,C
MOV R3,#23
DJNZ R3,$
SETB P3.0
NOP
DJNZ R2,WR1
SETB P3.0
RET
; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据
READ_18200:
MOV R4,#2 ;将温度高位和低位从DS18B20中读出
MOV R1,#29H ;低位存入29H(TEMPER_L),
RE00: ;高位存入28H(TEMPER_H)
MOV R2,#8
RE01:
CLR C
SETB P3.0
NOP
NOP
CLR P3.0
NOP
NOP
NOP
SETB P3.0
MOV R3,#09
RE10:
DJNZ R3,RE10
MOV C,P3.0
MOV R3,#23
RE20:
DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
WORK: MOV A,29H
MOV C,40H ;将28H中的最低位移入C
RRC A
MOV C,41H
RRC A
MOV C,42H
RRC A
MOV C,43H
RRC A
MOV 29H,A
ret
DIS: MOV A,TEMPER_L ;显示子程序,将数据送显示单元,再调用
LCALL MBCD1 ;数据处理子程序
DIS1:
MOV DPTR,#TAB
MOV R0,#5FH
SETB P2.4
SETB P2.3
SETB P2.2
CLR P2.1
MOV A,@R0
MOVC A,@A+DPTR
MOV P1,A
INC R0
ACALL DL1MS
SETB P2.4
SETB P2.3
SETB P2.1
CLR P2.2
MOV A,@R0
MOVC A,@A+DPTR
MOV P1,A
ACALL DL1MS
RET
TAB: DB 21H,77H,0A2H,62H,74H,68H,28H,73H
DB 20H,70H
MBCD1: MOV B,#0AH ;数据处理子程序
DIV AB
MOV 60H,A
MOV 5FH,B
RET
DL1MS: MOV R2,#0AH ;延时子程序
DL2: MOV R4,#019H
DL3: DJNZ R4,DL3
DJNZ R2,DL2
RET
DALLAS最新单线数字温度传感器DS18B20简介新的"一线器件"体积更小、适用电压更宽、更经济 Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持 "一线总线"接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。DS18B20、 DS1822 "一线总线"数字化温度传感器 同DS1820一样,DS18B20也 支持"一线总线"接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。DS1822的精度较差为± 2°C 。现场温度直接以"一线总线"的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。 DS18B20、 DS1822 的特性 DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS18B20的性能是新一代产品中最好的!性能价格比也非常出色! DS1822与 DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。 继"一线总线"的早期产品后,DS1820开辟了温度传感器技术的新概念。DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。
DALLAS最新单线数字温度传感器DS18B20简介新的"一线器件"体积更小、适用电压更宽、更经济 Dallas 半导体公司的数字化温度传感器DS1820是世界上第一片支持 "一线总线"接口的温度传感器。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。DS18B20、 DS1822 "一线总线"数字化温度传感器 同DS1820一样,DS18B20也 支持"一线总线"接口,测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。DS1822的精度较差为± 2°C 。现场温度直接以"一线总线"的数字方式传输,大大提高了系统的抗干扰性。适合于恶劣环境的现场温度测量,如:环境控制、设备或过程控制、测温类消费电子产品等。与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。而且新一代产品更便宜,体积更小。 DS18B20、 DS1822 的特性 DS18B20可以程序设定9~12位的分辨率,精度为±0.5°C。可选更小的封装方式,更宽的电压适用范围。分辨率设定,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。DS18B20的性能是新一代产品中最好的!性能价格比也非常出色! DS1822与 DS18B20软件兼容,是DS18B20的简化版本。省略了存储用户定义报警温度、分辨率参数的EEPROM,精度降低为±2°C,适用于对性能要求不高,成本控制严格的应用,是经济型产品。 继"一线总线"的早期产品后,DS1820开辟了温度传感器技术的新概念。DS18B20和DS1822使电压、特性及封装有更多的选择,让我们可以构建适合自己的经济的测温系统。
DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS18B20的管脚排列如下:
DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地)。
光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -