只写主要的:
MAIN:
MOV SP,#70H
DISP_LOOP:
LCALL GET_TEMPER ;从DS18B20读出温度数据
LCALL TEMPER_COV ;转换读出的温度数据并保存
LCALL DELAY
MOV MTD,#60H
MOV MTD+1,TEMPER_NUM;温度值低位
ANL MTD+1,#0FH
MOV SLA,#ZLG7290 ;指定器件地址
MOV SUBA,#07H ;指定子地址
MOV NUMBYTE,#02H ;发送2字节数据
LCALL IWRNBYTE ;调用写2字节数据程序
MOV MTD,#61H
MOV A,TEMPER_NUM
SWAP A
ANL A,#0FH
MOV MTD+1,A ;温度值高位
MOV SLA,#ZLG7290 ;指定器件地址
MOV SUBA,#07H ;指定子地址
MOV NUMBYTE,#02H ;发送2字节数据
LCALL IWRNBYTE ;调用写2字节数据程序
LCALL DELAY
SJMP DISP_LOOP ;温度循环采集显示
;-------读出转换后的温度值
GET_TEMPER:
SETB DQ ; 定时入口
BCD:
LCALL INIT_1820
JB FLAG1,S22
LJMP BCD ; 若DS18B20不存在则返回
S22:
LCALL DELAY1
MOV A,#0CCH ; 跳过ROM匹配------0CC
LCALL WRITE_1820
MOV A,#44H ; 发出温度转换命令
LCALL WRITE_1820
NOP
LCALL DELAY
LCALL DELAY
CBA:
LCALL INIT_1820
JB FLAG1,ABC
LJMP CBA
ABC:
LCALL DELAY1
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 发出读温度命令
LCALL WRITE_1820
LCALL READ_18200 ;READ_1820
RET
;-------读DS18B20的程序,从DS18B20中读出一个字节的数据
READ_1820:
MOV R2,#8
RE1:
CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#7
DJNZ R3,$
MOV C,DQ
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE1
RET
;-------写DS18B20的程序
WRITE_1820:
MOV R2,#8
CLR C
WR1820:
CLR DQ
MOV R3,#6
DJNZ R3,$
RRC A
MOV DQ,C
MOV R3,#23
DJNZ R3,$
SETB DQ
NOP
DJNZ R2,WR1820
SETB DQ
RET
;-------读DS18B20的程序,从DS18B20中读出两个字节的温度数据
READ_18200:
MOV R4,#2 ; 将温度高位和低位从DS18B20中读出
MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)
RE00:
MOV R2,#8
RE01:
CLR C
SETB DQ
NOP
NOP
CLR DQ
NOP
NOP
NOP
SETB DQ
MOV R3,#7
DJNZ R3,$
MOV C,DQ
MOV R3,#23
DJNZ R3,$
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
;-------将从DS18B20中读出的温度数据进行转换
TEMPER_COV:
MOV A,#0F0H
ANL A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值
SWAP A
MOV TEMPER_NUM,A
MOV A,TEMPER_L
JNB ACC.3,TEMPER_COV1 ; 四舍五入去温度值
INC TEMPER_NUM
TEMPER_COV1:
MOV A,TEMPER_H
ANL A,#07H
SWAP A
ADD A,TEMPER_NUM
MOV TEMPER_NUM,A ; 保存变换后的温度数据
LCALL BIN_BCD
RET
能不能提高温度计的精度和反应速度呢?
5 个解决方案
#1
晕,又是汇编,你的DS18B20的分辨率用的多少位?转换时间与分辨率有关.
温度是缓变量,DS18B20的最大转换时间好像是750ms,在1S内处理采集的温度是可以接受的
温度是缓变量,DS18B20的最大转换时间好像是750ms,在1S内处理采集的温度是可以接受的
#2
用12位采样芯片,提高精度
温度采集,速度不需要那么快吧
温度采集,速度不需要那么快吧
#3
DS18B20精度为0.5,最高分辨率为12位,对应的转换时间为750ms
如果要提高转换速率,就降低其分辨率.设置为8位分辨率最快
看你程序好像用的8位,分辨率却设置为12位,很明显浪费时间
如果要提高转换速率,就降低其分辨率.设置为8位分辨率最快
看你程序好像用的8位,分辨率却设置为12位,很明显浪费时间
#4
联系我吧 我刚用过18b20 反映好像很快呀 qq:328997835
#5
#1
晕,又是汇编,你的DS18B20的分辨率用的多少位?转换时间与分辨率有关.
温度是缓变量,DS18B20的最大转换时间好像是750ms,在1S内处理采集的温度是可以接受的
温度是缓变量,DS18B20的最大转换时间好像是750ms,在1S内处理采集的温度是可以接受的
#2
用12位采样芯片,提高精度
温度采集,速度不需要那么快吧
温度采集,速度不需要那么快吧
#3
DS18B20精度为0.5,最高分辨率为12位,对应的转换时间为750ms
如果要提高转换速率,就降低其分辨率.设置为8位分辨率最快
看你程序好像用的8位,分辨率却设置为12位,很明显浪费时间
如果要提高转换速率,就降低其分辨率.设置为8位分辨率最快
看你程序好像用的8位,分辨率却设置为12位,很明显浪费时间
#4
联系我吧 我刚用过18b20 反映好像很快呀 qq:328997835