DS18B20内部数据结构
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、光刻ROM——只读存储器
光刻——使用紫外光将数据存储进入寄存器64位序列号相当于每个DS18B20的身份证2、EEPROM——非易失性的可电擦除的随机存储器。
可读可写,掉电不丢失。
3个字节(DS18B20报警上下限和配置寄存器的值)
3、RAM——随机存储器(可读可写,掉电丢失)
DS18B20的RAM是一个高速暂存器,它有9个字节的内容,内部结构如下表。
①配置寄存器
R1、
②温度数据寄存器
a.两个字节的共同组成一个完整的数据;
b.最高的5位为符号位(正温度时为全0,负温度时为全1)
1)单片机控制DS18B20测量温度需要四个大致过程:
发送命令要求其转换温度→等待其测量温度→发送命令要求其将温度结果发送给单片机→接收温度数据。
2)四个大致过程可以分解成十个具体流程:
发送初始化信号→等待其应答及应答完成→发送ROM命令(0xcc)→发送RAM命令
(0x44)→延时等待→发送初始化信号→等待其应答及应答完成→发送ROM命令(0xcc)→发送RAM命令(0xbe)→接收温度数据。
3)十个流程中包含了三个单片机对DS18B20基本操作:初始化及等待应答;发送命令(写
操作);接受数据(读操作)
5、时序要求及程序编写
1)初始化及等待应答
a)时序过程:发送480~960us低电平脉冲;检测DS18B20是否产生应答信号(低
电平);检测DS18B20的应答信号是否结束(恢复高电平)。
b)按照初始化及等待应答的时间要求编写功能函数Init_DS18B20
u
2)写操作
a)写1位数据的时序过程:拉底数据线产生下降沿;将数据传递至数据线;保持
一段时间(60us);拉高数据线保持高电平。
b)写1字节数据的时序过程:产生下降沿;将数据的最低位传递至数据线;保持
一段时间;拉高数据线保持高电平;数据右移一位;依次循环八次。
将1字节
数据按从低到高的顺序依次通过数据线发送出去。
c)解读Write_DS18B20函数运行过程
u
u
写“0”时序写“1”时序
3)读操作
a)读1位数据的时序过程:产生下降沿;延时1us;拉高数据线(释放数据线);
读取数据线状态;延时(控制整个过程在60us左右)。
b)读1字节数据的时序过程:产生下降沿;将变量右移1位;拉高数据线;读取
数据线状态并保存在变量的最高位;延时;重复八次,可以将DS18B20发送
的8位数据存入变量中。
c)解读Read_DS18B20函数运行过程
u
u
读“0”时序读“1”时序
6、DS18B20测温函数
void GetTemperature() //温度转换函数
{
unsigned char teml,temh;//定义变量存储温度值的两字节数据
Init_DS18B20(); //初始化DS18B20及等待其应答
Write_DS18B20(0xCC); // ROM命令,含义:忽略ROM操作
Write_DS18B20(0x44); //RAM命令,含义:要求开始温度转换
delay_ms(750); //延时等待温度转换完成
Init_DS18B20(); //初始化DS18B20及等待其应答
Write_DS18B20(0xCC); //ROM命令,含义:忽略ROM操作
Write_DS18B20(0xBE); //RAM命令,含义:要求读取转换后的温度值
teml=Read_DS18B20(); //读取存储DS18B20发送的温度值的低8位
temh=Read_DS18B20(); //读取存储DS18B20发送的温度值的高8位
}
7、DS18B20温度转换函数
温度数据寄存器
a.两个字节的共同组成一个完整的数据;
b.最高的5位为符号位(正温度时为全0,负温度时为全1)
★实际温度值和温度数据寄存器中的值的换算
1.已知寄存器的值(T),找出实际温度t
步骤:
(1)观察T换算成二级制的高五位,如果高五位都为0,则表示温度为正值;如果都为1,则表示温度为负值;
(2)如果温度为正值,则t=T*0.0625(即:t=T / 16.0);
如果温度为负值,首先计算出T的补码(先按位取反再加1),然后用该数据乘以0.0625可以得到温度的绝对数值,最后添加负号。
2.已知实际温度t,找出寄存器的值T
如果t为正值,T=t/0.0625,再将T换算为二进制即可。
如果t温度转换函数值,首先使用t的绝对数值除以0.0625,然后将结果进行取反加1的求补码操作,结果即为T。
3. 温度转换函数。