新闻中心

EEPW首页 > 物联网与传感器 > 18B20数字温度显示系统

18B20数字温度显示系统

——
作者:时间:2006-12-11来源:收藏

综合实验:用18B20(数字采集)74LS47(数码管译码)74LS138(三八译码) DS18B20是DALLAS公司生产的一线式数字传感器,具有3引脚TO-92小体积封装形式;测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字量方式串行输出.

主机控制DS18B20完成温度转换必须经过三个步骤:初始化、ROM操作指令、存储器操作指令。必须先启动DS18B20开始转换,再读出温度转换值。本程序仅挂接一个芯片,使用默认的12位转换精度,外接供电电源,读取的温度值高位字节送WDMSB单元,低位字节送WDLSB单元,再按照温度值字节的表示格式及其符号位,经过简单的变换即可得到实际温度值。



 18b20原理图

运行程序数码管后4位显示当前测试到的温度。

DS18B20的引脚:

在本系统中: 为了简化程序, 采用了74LS47(数码管译码)74LS138(三八译码)。即P0口的P0.0,P0.1,P0.2,P0.3 四个端口接到74LS47进行硬件数码管译码,然后输出到数码管部分的数据口JP5。

P0.4,P0.5,P.0.6三个端口接到74LS138进行38译码, 然后输出到数码管的位控制JP8.

系统综合原理图:

;

;本程序测量温度范围:0~125度,精确到0.06;
DAT BIT P3.0 ;数据通信口
WDLSB DATA 30H ;读出的温度低字节
WDMSB DATA 31H ;读出的温度高字节
;***************************************************************
ORG 0000H
LJMP MAIN
ORG 000BH
SJMP TIMER0 ;定时显示

;****************************************************************
;定时显示子程序,采用循环扫描方式
;显示缓冲区40H~47H
ORG 0040H
TIMER0:

MOV P0,40H ;最后一位值送p0
ORL P0,#70H; 点亮最后一位
CALL T1MS
MOV P0,41H
ORL P0,#60H
CALL T1MS
MOV P0,42H
ORL P0,#50H
CALL T1MS
MOV P0,43H
ORL P0,#40H
MOV TH0,#LOW(65536-10000) ;定时器10MS中断
MOV TL0,#HIGH(65536-10000)
RETI
T1MS: mov r5,#00h ;延时子程序
tt: mov r6,#9
djnz r6,$
djnz r5,tt
ret

;*********************************************************
;主程序:

MAIN: MOV SP,#60H
MOV P2,#0FFH
MOV R2,#8
MOV R0,#40H ;
OVER: MOV @R0,#00H
INC R0
DJNZ R2,OVER
MOV TMOD,#01H
MOV TH0,#LOW(65536-10000)
MOV TL0,#HIGH(65536-10000)
SETB EA
SETB ET0
SETB TR0
LOOP: LCALL DSWD ;调用读出DS18B20温度程序
SJMP LOOP ; 读出DS18B20温度程序
DSWD:
CLR EA
LCALL RST
JNB F0,KEND ;如果没有应答,返回主程序
MOV R0,#0CCH
LCALL SEND_BYTE ;跳过ROM匹配
MOV R0,#44H ;发出温度转换命令
LCALL SEND_BYTE
SETB EA
MOV P1,#00001111B
MOV 48H,#1 ;廷时75ms以上准备读
SS2: MOV 49H,#255
SS1: MOV 4AH,#255
SS0: DJNZ 4AH,SS0
DJNZ 49H,SS1
DJNZ 48H,SS2
MOV P1,#11111100B
CLR EA
LCALL RST
JNB F0,KEND
MOV R0,#0CCH ;跳过ROM匹配
LCALL SEND_BYTE
MOV R0,#0BEH ;发出读温度命令
LCALL SEND_BYTE
LCALL READ_BYTE
MOV WDLSB,A
LCALL READ_BYTE
MOV WDMSB,A
LCALL TRANS12
KEND: mov p1,#01010101b
SETB EA
RET
;**********************************************************
;温度转换程序:精确到:0.06 ;
TRANS12:MOV A,30H
ANL A,#0F0H
MOV 3AH,A
MOV A,31H
ANL A,#0FH
ORL A,3AH
SWAP A
MOV B,#10
DIV AB
MOV 43H,A
MOV 42H,B ;
MOV DPTR,#TABB
MOV A,30H
ANL A,#0FH
MOV B,#2
MUL AB
MOVC A,@A+DPTR
MOV 41H,A
MOV A,30H
ANL A,#0FH
MOV B,#2
MUL AB
INC A
MOVC A,@A+DPTR
MOV 40H,A
RET
TABB: DB 0,0,0,6,1,2,1,8,2,5,3,1,3,7,4,3,5,0
DB 5,6,6,2,6,8,7,5,8,1,8,7,9,3
;*************************************************

SEND_BYTE: ;发送一个字节程序
MOV A,R0
MOV R5,#8
SEN3: CLR C
RRC A
JC SEN1
LCALL WRITE_0
SJMP SEN2
SEN1: LCALL WRITE_1
SEN2: DJNZ R5,SEN3 ; 循环8次,写一个字节
RET
READ_BYTE: ;读一个字节程序
MOV R5,#8
READ1: LCALL READ
RRC A
DJNZ R5,READ1 ; 循环8次,读一个字节
MOV R0,A
RET
;复位程序,如果复位置位F0,没有就复位F0
RST: SETB DAT
NOP
NOP
CLR DAT
MOV R6,#250 ;主机发复位脉冲持续3μs



关键词: 温度

评论


相关推荐

技术专区

关闭