东北大学秦皇岛分校毕业设计(论文) 第24页
是所测温度值。图4-10中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正减法计数器的预置值,只要计数门仍未关闭就重复上述过程,知道温度寄存器仍达到被测温度值。 2.命令序列
典型的单总线命令序列如下: 第一步:初始化;
第二步:ROM命令(跟随需要交换的数据); 第三步:功能命令(跟随需要交换的数据)。
每次访问单总线器件,必须严格遵守这个命令序列,如果出现序列混乱,则单总线器件不会响应主机。但是,这个准则对于搜索ROM命令和报警搜索命令例外,在执行两者中任何一条命令之后,主机不能执行其后的功能命令,必须返回至第一步。
1)初始化
基于单总线上的所有传输过程都是以初始化开始的,初始化过程由主机发出的复位脉冲和从机响应的应答脉冲组成。应答脉冲使主机知道,总线上有从机设备,且准备就绪。
2)ROM命令
在主机检测到应答脉冲后,就可以发出ROM命令。这些命令与各个从机设备的唯一64位ROM代码相关,允许主机在单总线上连接多个从机设备时,指定操作某个从机设备。这些命令还允许主机能够检测到总线上有多少个从机设备以及其设备类型,或者有没有设备处于报警状态。从机设备可能支持5种ROM命令(实际情况与具体型号有关),每种命令长度为8位。主机在发出功能命令之前,必须送出合适的ROM命令。ROM命令主要包括:搜索[0F0h]、读ROM[33h]、匹配ROM[55h]、跳越ROM[0CCh]、报警搜索[0ECh]。
3)功能命令
在主机发出ROM命令,以访问某个指定的单总线器件,接着就可以发出单总线器件支持的某个功能命令。功能命令主要包括:转换温度[44h]、读暂存器[0BEh]、写暂存器[4Eh]、复制暂存器[48h]、回读EEPROM[0B8h]、读供电方式[0B4h]等。
东北大学秦皇岛分校毕业设计(论文) 第25页
3.信号方式
所有的单总线器件要求采用严格的通信协议,以保证数据的完整性。该协议定义了几种信号类型:复位脉冲、应答脉冲、写O、写1、读0和读1。所有这些信号,除了应答脉冲以外,都由主机发出同步信号。并且发送所有的命令和数据都是字节的低位在前,这一点与多数串行通信格式不同(多数为字节的高位在前)。 4.软件程序设计
主机控制DSl8820完成温度转换必须经过3个步骤:初始化、ROM操作指令、存储器操作指令。单片机系统所用晶振频率为11.0592MHz,根据DSl8820的初始化、写和读时序,分别编写3个子程序:TxReset为初始化子程序,WrByte为写(命令或数据)子程序,RdByte为读数据子程序,所有的数据读写均由最低位开始。单片机实现温度转换读取温度值程序的流程如图4-10所示。
假设单片机系统所用的晶振频率为12MHz,根据DSl8820的初始化时序、写时序和读时序,分别编写了三个子程序:INT为初始化子程序,WRITE为写(命令或数据)子程序,READ为读数据子程序,所有的数据读写均由最低位开始。 DAT EQU P1.0 ???
INT: CLR EA INTl0: SETB DAT
MOV R2,#200
INTl1: SETB DAT
DJNZ R2, INTl1 ;主机发复位脉冲持续3μs*200=600
μs
SETB DAT ;主机释放总线,口线改为输人 MOV R2,#30
INll2:DJNZ R2, INll2 ;DSl8820等待2μs *30=60μs
CLR C
ORL C,DAT ;DSl8820数据线变低(存在脉冲)吗? JC INll0 ;DSl8820未准备好,重新初始化 MOV R6,#80
东北大学秦皇岛分校毕业设计(论文) 第26页
开始 初始化DS18B20 No 应答脉冲? Yes 发送Skip Rom 命令 发起Convert命令 延时1S 等待温度转换完成 初始化DS18B20 No 应答脉冲? Yes 发起 Read Scrat chpad命令 读取第1、2字节 即为温度数据
图4-10 温度读取程序流程图
东北大学秦皇岛分校毕业设计(论文) 第27页
INTl3: ORL C,DAT
JC INTl4 ;DSl8820数据线变高。初始化成功 DJNZ R6,INI13 ;数据线低电平可维持3μs*80=240μs
SJMP INT10 ;初始化失败,重来
INT14: MOV R2,#240
INT15: DJNZ R2,INT15 ;DSl8820应答最少2μs*240=480μs
RET
;-------------------------------------------------------------- WRITE: CLR EA
MOV R3, #8 ;循环8次,写一个字节
WR11: SETB DAT
MOV R4, #8
A
;写入位从A中移动CY
;等待16μs
RRC
CLR DAT WR12: DJNZ R4, WR12
MOV DAT,C ;命令字按位一次传给DSl8820
MOV R4,#20
WR13: DJNZ R4,WR13 ;保证写过程持续60μs
DJNZ R3,WR11 ;未送完一个字节继续
SETB DAT RET
;――――――――――――――――――――――――――――――――――――
REAT: CLR EA
MOV R6,#8 ;循环8次,读一个字节
RD11: CLR DAT MOV R4,#4

