图1 2、DS18B20复位子程序(RESET):
此部分程序在执行前先将DAT复位,然后通过对DAT的判断来检测DS18B20的回应,并进行相应的置位,其程序流程见下图所示。
CLR DAT(复位) SETB DAT
SETB DAT(拉高数据线)
N
等待DS18B20回应 DAT=0? FLAG1=0 Y FLAG1=1(置标志位,DS18B20存在)
SETB DAT
子程序返回 word文档 可自由复制编辑
图2
3、DS18B20暂存器设定值(RECONFIG):
暂存器设定子程序主要是对TH、TL初值的设定,主要是通过对FLAG的判断来执行相应的操作,当采用9位分辨率时转换时间约为93.75ms,在本程序设计中采用1s显示程序延时法等待转换的完成,其对应流程图如下。
N Y 在TH、TL中写入初值 跳过ROM FLAG=1? 返回
图3
word文档 可自由复制编辑
选择9位分辨率 子程序返回
4、往DS18B20中写入一字节的程序(WRITE):
此子程序主要是往DS18B20中写入程序,通过R2计数的控制来将C中的数据送入数据线,一共写入一字节,本程序当R2=8时共计数8次,送入的数据正好一字节,对应流程图如下。 N R2=0?(一字节是否写完) DAT=C(C中的数据送入数据线) R2=8 CLR C RRC A(A中数据右移) SETB DAT Y 子程序返回
word文档 可自由复制编辑
图4
5、读温度值命令(GETTEMPER):
此子程序主要是通过FLAG1的判断来进行如何执行,若存在,则跳过ROM,并由DS18B20发出温度转换命令,并读取命令,最终在DS18B20中读取两字节温度。若不存在,则返回,对应程序流程图如下。
N FLAG1=1?(DS18B20是否存在?) 返回 Y RDTEMP(从DS18B20中读取两字节温度子程序) DS18B20中写入0BEH(读取温度指令) 跳过ROM匹配 DS18B20中写入44H(发出温度转换命令) 子程序返回 word文档 可自由复制编辑