收藏 分享(赏)

单片机最小系统.doc

上传人:11xg27ws 文档编号:7131763 上传时间:2019-05-06 格式:DOC 页数:6 大小:33.50KB
下载 相关 举报
单片机最小系统.doc_第1页
第1页 / 共6页
单片机最小系统.doc_第2页
第2页 / 共6页
单片机最小系统.doc_第3页
第3页 / 共6页
单片机最小系统.doc_第4页
第4页 / 共6页
单片机最小系统.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、实验二十五 DS18B20 数字温度计设计一、实验目的1.了解 DS18B20 数字温度计的设计原理。2掌握 DS18B20 的用法。3掌握采集数据的方法。二、设计原理如图 25.1,用一片 DS18B20 构成测温系统,测量的温度精度达到 0.1 度,测量的温度的范围在20 度到100 度之间,用 3 位数码管完成相应的显示。三、参考电路图 25.1 DS18B20 数字温度计电路原理图四、电路硬件说明(1)在“单片机系统” 区域中,把单片机的 P0.0P0.7 端口通过跳线 J3 连接到“动态数码显示”区域中的 ABCDEFGH 端子上。(2)在“单片机系统” 区域中,把单片机的 P2.0

2、P2.7 通过 8 联拨动拨码开关 JP1 连接到“动态数码显示” 区域中的 S1、S2、S3、S4、S5 、S6、S7 、S8 端子上。(3)把 DS18B20 的 DQ 端子通过 2 联拨动拨码开关 JP5 连接到“单片机系统”区域中的 P1.1 端子上。五、程序设计内容由于 DS18B20 采用的是 1Wire 总线协议方式,即在一根数据线实现数据的双向传输,而对 AT89S51 单片机来说,硬件上并不支持单总线协议,因此,必须采用软件的方法来模拟单总线的协议时序来完成对 DS18B20 芯片的访问。由于 DS18B20 是在一根 I/O 线上读写数据,因此,对读写的数据位有着严格的时序

3、要求。DS18B20 有严格的通信协议来保证各位数据传输的正确性和完整性。该协议定义了几种信号的时序:初始化时序、读时序、写时序。所有时序都是将主机作为主设备,单总线器件作为从设备。而每一次命令和数据的传输都是从主机主动启动写时序开始,如果要求单总线器件回送数据,在进行写命令后,主机需启动读时序完成数据接收。数据和命令的传输都是低位在先。(1)DS18B20 的复位时序:(2)DS18B20 的读时序:对于 DS18B20 的读时序分为读 0 时序和读 1 时序两个过程。对于 DS18B20 的读时隙是从主机把单总线拉低之后,在 15 秒之内就得释放单总线,以让 DS18B20 把数据传输到单

4、总线上。DS18B20 在完成一个读时序过程,至少需要 60us才能完成。(3)DS18B20 的写时序对于 DS18B20 的写时序仍然分为写 0 时序和写 1 时序两个过程。对于 DS18B20 写 0 时序和写 1 时序的要求不同,当要写 0 时序时,单总线要被拉低至少 60us,保证 DS18B20 能够在 15us 到 45us 之间能够正确地采样 IO 总线上的“0”电平,当要写 1 时序时,单总线被拉低之后,在 15us 之内就得释放单总线。六、程序流程图(如图 25.2 所示 )图 25.2 DS18B20 数字温度计程序流程图七、汇编源程序;定义单元;TEMPER_L EQU

5、 29HTEMPER_H EQU 28HFLAG1 EQU 38H ;是否检测到 DS18B20 标志位A_BIT EQU 20H ;数码管个位数存放内存位置B_BIT EQU 21H ;数码管十位数存放内存位置XS EQU 30HORG 0000HLJMP STARTORG 0003HRETIORG 000BHRETIORG 0013HRETIORG 001BHRETIORG 0023HRETIORG 0100H;主程序;START: LCALL CHUSHIHUALCALL MAINLJMP START;初始化程序;CHUSHIHUA: MOV TEMPER_L,#00HMOV TEMPE

6、R_H,#00HMOV FLAG1,#00HMOV A_BIT,#00HMOV B_BIT,#00HMOV XS,#00HRET;温度测量,转换,显示程序;MAIN: LCALL GET_TEMPER ;调用读温度子程序MOV A,29HMOV B,ACLR CRLC ACLR CRLC ACLR CRLC ACLR CRLC ASWAP AMOV 31H,AMOV A,BMOV C,40H ;将 28H 中的最低位移入 CRRC AMOV C,41HRRC AMOV C,42HRRC AMOV C,43HRRC AMOV 29H,ALCALL DISPLAY ;调用数码管显示子程序AJMP

7、MAIN; 这是 DS18B20 复位初始化子程序;INIT_1820: SETB P1.1NOPCLR P1.1;主机发出延时 537 微秒的复位低脉冲;MOV R1,#2TSR1: MOV R0,#107DJNZ R0,$DJNZ R1,TSR1SETB P1.1 ;然后拉高数据线NOPNOPNOPMOV R0,#25HTSR2: JNB P1.1,TSR3 ;等待 DS18B20 回应DJNZ R0,TSR2LJMP TSR4 ; 延时TSR3: SETB FLAG1 ; 置标志位,表示 DS1820 存在LJMP TSR5TSR4: CLR FLAG1 ; 清标志位,表示 DS1820

8、 不存在LJMP TSR7TSR5: MOV R0,#117TSR6: DJNZ R0,TSR6 ; 时序要求延时一段时间TSR7: SETB P1.1RET; 读出转换后的温度值 ;GET_TEMPER: SETB P1.1LCALL INIT_1820 ;先复位 DS18B20JB FLAG1,TSS2 ; 判断 DS1820 是否存在?RET TSS2: MOV A,#0CCH ; 跳过 ROM 匹配LCALL WRITE_1820MOV A,#44H ; 发出温度转换命令LCALL WRITE_1820;这里通过调用显示子程序实现延时一段时间,等待 AD 转换结束,12 位的话 750

9、 微秒LCALL DISPLAYLCALL INIT_1820 ;准备读温度前先复位MOV A,#0CCH ; 跳过 ROM 匹配LCALL WRITE_1820MOV A,#0BEH ; 发出读温度命令LCALL WRITE_1820LCALL READ_18200 ; 将读出的温度数据保存到 35H/36H RET;写 DS18B20 的子程序 (有具体的时序要求);WRITE_1820: MOV R2,#8 ;一共 8 位数据CLR CWR1: CLR P1.1MOV R3,#6DJNZ R3,$RRC AMOV P1.1,CMOV R3,#23DJNZ R3,$SETB P1.1NOP

10、DJNZ R2,WR1SETB P1.1RET; 读 DS18B20 的程序,从 DS18B20 中读出两个字节的温度数据 ;READ_18200: MOV R4,#2 ; 将温度高位和低位从 DS18B20 中读出MOV R1,#29H ; 低位存入 29H(TEMPER_L),高位存入 28H(TEMPER_H)RE00: MOV R2,#8 ;数据一共有 8 位RE01: CLR CSETB P1.1NOPNOPCLR P1.1NOPNOPNOPSETB P1.1MOV R3,#9RE10: DJNZ R3,RE10MOV C,P1.1MOV R3,#23RE20: DJNZ R3,RE

11、20RRC ADJNZ R2,RE01MOV R1,ADEC R1DJNZ R4,RE00RETGJDQ: LJMP XIANSHIKJDQ: LJMP XIANSHIDISPLAY: MOV A,29H ;将 29H 中的十六进制数转换成 10 进制MOV B,ARLC ARLC ARLC AJC KJDQRLC AJC ZANKANJNC GJDQZANKAN: RLC AJC ZANKAN1JNC GJDQZANKAN1: RLC AJC ZANKAN2JNC GJDQZANKAN2: RLC AJC KJDQ XIANSHI: MOV A,BMOV B,#10 ;10 进制/10=10

12、 进制DIV ABMOV B_BIT,A ;十位在 AMOV A_BIT,B ;个位在 BMOV R0,#4 CLR C ;多加的DPL1: MOV R1,#250 ;显示 1000 次DPLOP: MOV DPTR,#NUMTAB1MOV A,A_BIT ;取个位数MOVC A,A+DPTR ;查个位数的 7 段代码MOV P0,A ;送出个位的 7 段代码CLR P2.1 ;开个位显示ACALL D1MS ;显示 1MSSETB P2.1MOV DPTR,#NUMTABMOV A,B_BIT ;取十位数MOVC A,A+DPTR ;查十位数的 7 段代码MOV P0,A ;送出十位的 7

13、段代码CLR P2.2 ;开十位显示ACALL D1MS ;显示 1MSSETB P2.2JC XSW ;多加的MOV A,31HMOV B,#160DIV ABMOV XS,B XSW: MOV A,XS MOVC A,A+DPTRMOV P0,A CLR P2.0 ACALL D1MS SETB P2.0SETB C ;多加的DJNZ R1,DPLOP ;250 次没完循环DJNZ R0,DPL1 ;4 个 250 次没完循环RET;1MS 延时(按 12MHZ 算);D1MS: MOV R7,#80 DJNZ R7,$RETNUMTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB 7FH,6FH,7FH,7FH,7FH,7FH,7FH,7FHNUMTAB1: DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFHEND八、注意事项在单片机程序中,0CCH、0BEH 是 DS18B20 的指令命令。在硬件电路中要把 2 联拨动拨码开关 JP5 的 TP 键拨上去。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报