D S18B20数字温度显示实验1.实验目的掌握一线式数字温度传感器的使用,了解单总线的工作方式。
掌握数字温度传感器DS18B20的工作原理及温度测量方法。
2.实验原理及内容DS18B20是DALLAS公司生产的一线式数字温度传感器,具有3引脚TO-92小体积封装形式;温度测量范围为-55℃~+125℃,可编程为9位~12位A/D转换精度,测温分辨率可达0.0625℃。
主机控制DS18B20完成温度转换必须经过三个步骤:初始化、ROM操作指令、存储器操作指令。
必须先启动DS18B20开始转换,再读出温度转换值。
本程序仅挂接一个芯片,使用默认的12位转换精度,外接供电电源,读取的温度值高位字节送WDMSB单元,低位字节送WDLSB 单元,再按照温度值字节的表示格式及其符号位,经过简单的变换即可得到实际温度值。
图118B20封装引脚 图2相关原理接线方法:1.利用S T C89C51实验板上的I R F1插孔和排针,将D S18B20插入I R F1插孔,用一根单条数据线把D S18B20的2脚接到C P U部份的P3.0;2.用一条4P I N的排线,把7474的A B C D接到P0口的P0.0,P0.1,P0.2,0.3四个端口。
(即插入P0口的上半部份)。
3.用一条8P I N的排线。
把数码管译码部份的输出端接到数码管部份的数据口;4.用一条4P I N的排线,把74138的输入端接到P0口的P0.4,P0.5,P0.6,07四个端口。
(即插入P0口的下半部份)。
5.用一条8P I N的排线。
把38译码部份的输出端接到数码管部份的显示位口。
在本系统中,为了简化程序, 采用了74L S47(数码管译码)74L S138(三八译码)。
即P0口的P0.0,P0.1,P0.2,P0.3四个端口接到74L S47进行硬件数码管译码,然后输出到数码管部分的数据口。
P0.4,P0.5,P.0.6三个端口接到74L S138进行38译码,然后输出到数码管的位控制。
系统综合原理图:图3系统原理图进行本实验时,需要使用S T C89C51、H D7279、E X P-74X X三块实验板,并且需要外接电阻等元件,接线连接复杂。
建议自制实验电路,或者使用L C D12864完成显示(若使用L C D12864,则程序需要重新设计)。
3.实验现象分析4.汇编语言参考程序图4程序设计流程;定时显示子程序,采用循环扫描方式;显示缓冲区40H~47HO R G0080HT I M E R0:M O V P0,40H;最后一位值送p0O R L P0,#70H ;点亮最后一位C A L L T1M SM O V P0,41HO R L P0,#60HC A L L T1M SM O V P0,42HO R L P0,#50HC A L L T1M SM O V P0,43HO R L P0,#40HM O V T H0,#L O W(65536-10000);定时器10M S中断M O V T L0,#H I G H(65536-10000)R E T IT1M S:M O V R5,#00h ;延时子程序T T:M O V R6,#9D J N Z R6,$D J N Z R5,T TR E T;********************************************************* ;主程序:;********************************************************** M A I N:M O V S P,#60HM O V P2,#0F F HM O V R2,#8M O V R0,#40H;O V E R:M O V@R0,#00HI N C R0D J N Z R2,O VE RM O V T M O D,#01HM O V T H0,#L O W(65536-10000)M O V T L0,#H I G H(65536-10000)S E T B E T0S E T B T R0L O O P:L C A L L D S W D;调用读出D S18B20温度程序 S J M P L O O P;读出D S18B20温度程序D S W D:C L R E AL C A L L R S TJ N B F0,K E N D ;如果没有应答,返回主程序M O V R0,#0C C HL C A L L S E N D_B Y T E;跳过R O M匹配M O V R0,#44H;发出温度转换命令L C A L L S E N D_B Y T ES E T B E AM O V P1,#00001111BM O V48H,#1;廷时75m s以上准备读 S S2: M O V49H,#255S S1: M O V4A H,#255S S0: D J N Z4A H,S S0D J N Z49H,S S1D J N Z48H,S S2M O V P1,#11111100BC L R E AL C A L L R S TJ N B F0,K E N DM O V R0,#0C C H;跳过R O M匹配L C A L L S E N D_B Y T EM O V R0,#0B E H;发出读温度命令L C A L L S E N D_B Y T EL C A L L R E A D_B Y T EM O V W D L S B,AL C A L L R E A D_B Y T EM O V W D M S B,AL C A L L T R A N S12K E N D:M O V P1,#01010101bR E T;********************************************************** ;温度转换程序:精确到:0.06;;********************************************************** T R A N S12:M O V A,30HA N L A,#0F0HM O V3A H,AM O V A,31HA N L A,#0F HO R L A,3A HS W A P AM O V B,#10D I V A BM O V43H,AM O V42H,B;M O V D P T R,#T A B BM O V A,30HA N L A,#0F HM O V B,#2M U L A BM O V C A,@A+D P T RM O V41H,AM O V A,30HA N L A,#0F HM O V B,#2M U L A BI N C AM O V C A,@A+D P T RM O V40H,AR E TT A B B:D B0,0,0,6,1,2,1,8,2,5,3,1,3,7,4,3,5,0D B5,6,6,2,6,8,7,5,8,1,8,7,9,3;*************************************************S E N D_B Y T E:;发送一个字节程序;**********************************************************M O V R5,#8S E N3:C L R CR R C AJ C S E N1L C A L L W R I T E_0S J M P S E N2S E N1:L C A L L W R I T E_1S E N2:D J N Z R5,S E N3;循环8次,写一个字节R E TR E A D_B Y T E:;读一个字节程序M O V R5,#8R E A D1:L C A L L R E A DR R C AD J N Z R5,RE A D1;循环8次,读一个字节M O V R0,AR E T;复位程序,如果复位置位F0,没有就复位F0 R S T: S E T B D A TN O PN O PC L RD A TM O V R6,#250;主机发复位脉冲持续3μs×200=600μsD J N Z R6,$M O V R6,#50D J N Z R6,$S E T B D A T;主机释放总线,口线改为输入M O V R6,#15D J N Z R6,$C A L L C H C K;调用应答检查程序M O V R6,#60D J N Z R6,$S E T B D A TR E TC H C K:M O V C,D A TJ C R S T0S E T B F0;检测到信号,置位F0S J M P C H C K0R S T0:C L R F0;未准备好F0复位C H C K0:R E TW R I T E_0:;写0C L RD A TM O V R6,#30D J N Z R6,$S E T B D A TR E TW R I T E_1:C L R D A T;写1N O PN O PN O PN O PN O PS E T B D A TM O V R6,#30D J N Z R6,$R E T;读一位数据程序R E A D:S E T B D A T;先复位至少1U S产生读起始信号 N O PN O PC L RD A TN O PN O PS E T B D A T;置位D A T准备接收数据N O PN O PN O PN O PN O PN O PN O PM O V C,D A TM O V R6,#23 D J N Z R6,$ R E TE N D。