热搜词: 

ds18b20温度转换时间(ds18b20怎么读取温度)

发布:溥仲添

1、DS18B20温度转换高5位S为符号位,分辨率为0.0625。 对于正温度,将十六进数转换为十进。 对于负温度,只需翻转十六进数,加1,然后转换为十进。 即(15*16+10)*0.0625=15.62度。 ,第二个是0032,即(3*16+2)*0.0625=3.125度(负)。 2、DS18B20温度传感器的使用方法;这是DS18B20、P2.2数据引脚、11.0592MHz晶振的读写程序
;18B20温度传感器组装程序,使用器件默认12位转换,最大转换时间为750微秒;是直接在AT89C51的两个数码管上显示检测到的温度
;显示温度从00到99度,非常准确,无需修正!
ORG0000H
;MCU内存分配声明!
TEMPER_LEQU29H;用于保存读取的温度低8位
TEMPER_HEQU28H;用于保存温度读取的高8位
FLAG1EQU38H(如果检测到DS18B20标志)a_bitequ20h;数码管的位数存储在内存位置
b_bitequ21h;数码管的十位存储在内存位置
MAIN:
LCALLGET_TEMPER;读取子程序
;对于温度显示,我们正在考虑使用这里的网站。 设有两位数码管显示温度

;由于12位转换时每位数字的精度为0.0625度,所以我们不需要小数显示。 因此,可以去掉29H的低4位
;29H的高4位,从而得到一个新的字节,即为实际测量的温度
;这就是我发明的温度换算方法~~很简单,不需要乘上系数0.0625
MOVA,29H
MOVC,40H;将28H中的最低位移至C
RRCA
MOVC,41H
RRCA
MOVC,42H
RRCA
MOVC,43H
RRCA
MOV29H,A
LCALLDISPLAY;调用管数显例程
CPLP1.0
AJMPMAIN
;这是DS18B20复位初始化例程
INIT_1820:
SETBP2.2
NOP
CLRP2。 2
;主机发送复位低脉冲,延迟537微秒
MOVR1,#3
TSR1:MOVR0,#107
DJNZR0,$
DJNZR1,TSR1
SETBP2.2;br/>NOP
NOP
NOP
MOVR0,#25H
TSR2:
JNBP2.2,TSR3;等待响应DS18B20
DJNZR0,TSR2
LJMPTSR4; 延迟
TSR3:
SETBFLAG1;设置标志表明DS1820存在
CLRP1.7;检查DS18B20是否存在。 开P1.7LED
LJMPTSR5
TSR4:
CLRFLAG1;清除该标志,表明DS1820不存在
CLRP1.1
LJMPTSR7
TSR5:
MOVR0,#117
TSR6:
DJNZR0,TSR6;同步需要延迟一段时间
TSR7:
SETBP2.2
RET
;
GET_TEMPER:
SETBP2.2
LCALLINIT_1820;先复位DS18B20
JBFLAG1,TSS2
CLRP1.2
RET;判断DS1820是否存在?不存在,返回
TSS2:
CLRP1.3;检测到DS18B20!!!!!!!!!!!!
MOVA,#0CCH;
LCALLWRITE_1820
MOVA,#44H;发出温度转换命令
LCALLWRITE_1820
;这里,通过调用显示例程并等待AD转换完成获得延迟,750微秒。 12位
LCALLDISPLAY
LCALLINIT_1820;准备温度读数之前重置
MOVA,#0CCH;跳过ROM匹配
LCALLWRITE_1820
MOVA,#0BEH;发出读取温度命令
LCALLWRITE_1820
LCALLREAD_18200;保存读取温度数据为35H/36H
CLRP1.4
RET
;写入子程序DS18B20(有特定时序要求)
WRITE_1820:
MOVR2,#8;共8个数据位
CLRC
WR1:
CLRP2.2
MOVR3,#5
DJNZR3,$
RRCA
MOVP2。 2,C
MOVR3,#21
DJNZR3,$
SETBP2.2
NOP
DJNZR2,WR1
SETBP2.2
RET
READ_18200:;程读取DS18B20,从DS18B20读取两个字节的温度数据
MOVR4,#2;DS18B20
MOVR1,#29H;低位存储在29H(TEMPER_L),高位存储在28H(TEMPER_H)
RE00:
MOVR2,#8;总共8个数据位
RE01:
CLRC
SETBP2.2
NOP
NOP
CLRP2.2
NOPNOP
NOP
SETBP2.2
MOVR3,#8
RE10:
DJNZR3,RE10
MOVC,P2.2
MOVR3,#21
RE20:
DJNZR3,RE20
RRCA
DJNZR2,RE01
MOV@R1,A
DECR1
DJNZR4,RE00
RET
;显示子程序
display:mova,29H;将29H中的十六进数转换为十进
movb,#10;Decimal/10=十进
divab
movb_bit,A;数字在a
mova_bit,b中;个位在b
movdptr,#numtab中;指定表查找的起始地址
movr0,#4
dpl1:movr1,#250;显示1000次
dplop:mova,a_bit;获取个位数 movp0,a;个位
clrp2.7;启用个位显示
acalld1ms;显示1ms
setbp2.7
mova,b_bit;获取十位
MOVCA,@A+DPTR;查看十位的7段码
movp0,a;发送7-十位的段码
clrp2.6;开启十位显示
acalld1ms;1毫秒
setbp2.6
djnzr1,dplop;100次无限循环
djnzr0,dpl1;4100次无限循环
ret
;1MS延时
D1MS:MOVR7,#80
DJNZR7,$
RET
;7的代码共阴显示实验板上分段数码管0~9位
numtab:DB0CFH,03H,5DH,5BH,93H,0DAH,0DEH,43H,0DFH,0DBH
END

以上就是关于ds18b20温度转换时间(ds18b20怎么读取温度)的全部内容,希望能够帮到您。

大家都在看

查看更多综合百科