DS18B20与LCD1602结合显示温度文档格式.docx
- 文档编号:15112599
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:17
- 大小:206.54KB
DS18B20与LCD1602结合显示温度文档格式.docx
《DS18B20与LCD1602结合显示温度文档格式.docx》由会员分享,可在线阅读,更多相关《DS18B20与LCD1602结合显示温度文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
DS18B20的部有64位的ROM单元,和9字节的暂存器单元。
1、64位(激)光刻只读存储器
每只DS18B20都有一个唯一存储在ROM中的64位编码(跟人的号类似,一人一个号),这是出厂时被光刻好的。
最前面8位是单线系列编码:
28h。
接着的48位是一个唯一的序列号。
最后8位是以上56位的CRC编码。
64-位的光刻ROM又包括5个ROM的功能命令:
读ROM,匹配ROM,跳跃ROM,查找ROM和报警查找。
ROM的作用是使每个DS18B20各不相同,这样就可以实现一根总线上挂接多个DS18B20以实现多点监测。
2、9字节的暂存器单元
表1
DS18B20的暂存器单元如表1所示,各部分介绍如下。
1)、温度传感器
图2
暂存器的第0(LSB)字节,第1(MSB)字节为DS18B20的温度传感器,它们负责保存对温度的测量结果,用16位二进制提供,格式如图2所示。
DS18B20读取温度时共读取16位,前5个位(MSB的高5位)为符号位,当前5位为1时,读取的温度为负数;
当前5位为0时,读取的温度为正。
温度为正时读取方法为:
将16进制数转换成10进制即可。
温度为负时读取方法为(实际就是取补码):
将16进制取反后加1,再转换成10进制。
例:
0550H=+85度,FC90H=-55度,0191H为25.0625度。
LSB的低四位用于表示测量值中小数点后的数值。
2)、非挥发的温度报警触发器TH和TL
位于第2和第3字节,用于写入温度报警值,实际上就是设定温度的最高和最低界限。
3)、配置寄存器
配置寄存器位于存储器的第4字节,其组织如图3所示。
配置寄存器的0~4位和7位被器件保留,禁止写入;
在读回数据时全部为逻辑1。
R1和R0用于设置DS18B20的精度,具体如表2所示。
图3
表2
4)、CRC发生器
CRC字节作为DS18B2064位ROM的一部分存储在存储器中。
CRC码由ROM的前56位计算得到,被包含在ROM的重要字节当中。
CRC由存储在存储器中的数据计算得到,因此当存储器中的数据发生改变时,CRC的值也随之改变。
CRC能够在总线控制器读取DS18B20时进行数据校验。
为校验数据是否被正确读取,总线控制器必须用接受到的数据计算出一个CRC值,和存储在DS18B20的64位ROM中的值(读ROM时)或DS18B20部计算出的8位CRC值(读存储器时)进行比较。
如果计算得到的CRC值和读取出来的CRC值相吻合,数据被无错传输。
CRC值的比较以及是否进行下一步操作完全由总线控制器决定。
当在DS18B20中存储的或由其计算到CRC值和总线控制器计算的值不相符时,DS18B20部并没有一个能阻止命令序列进行的电路。
CRC的计算等式如下:
CRC
=
X8
+
X5
X4
1
单总线CRC可以由一个由移位寄存器和XOR门构成的多项式发生器来产生。
这个回路包括一个移位寄存器和几个XOR门,移位寄存器的各位都被初始化为0。
从ROM中的最低有效位或暂存器中的位0开始,一次一位移入寄存器。
在传输了56位ROM中的数据或移入了暂存器的位7后,移位寄存器中就存储了CRC值。
下一步,CRC的值必须被循环移入。
此时,如果计算得到的CRC是正确的,移位寄存器将复0。
其他字节保留用,不需要看。
三、关于单总线系统
单总线系统包括一个总线控制器和一个或多个从机。
DS18B20总是充当从机。
当只有一只从机挂在总线上时,系统被称为“单点”系统;
如果由多只从机挂在总线上,系统被称为“多点”。
所有的数据和指令的传递都是从最低有效位开始通过单总线。
单总线需要一个约5KΩ的外部上拉电阻;
单总线的空闲状态是高电平。
无论任何理由需要暂停某一执行过程时,如果还想恢复执行的话,总线必须停留在空闲状态。
在恢复期间,如果单总线处于非活动(高电平)状态,位与位间的恢复时间可以无限长。
如果总线停留在低电平超过480us,总线上的所有器件都将被复位。
四、操作流程
1.DS18B20复位。
2.执行ROM指令。
就是访问,搜索,匹配每个DS18B20独有的64位序列号。
实验板上只连有一个DS18B20,故不需识别,也就是不需读出此序列号,写代码时直接写命令0xcc跳过。
3.执行DS18B20功能指令(RAM指令,就是读写暂存器指令)。
DS18B20的功能指令很多,比较常用的有两个:
0x44:
开始转换温度。
转换好的温度会储存到暂存器字节0和1。
0xBE:
读暂存指令。
读暂存指令,会从暂存器0到9,一个一个字节读取,如果要停止
的话,必须写下DS18B20复位。
ROM指令和RAM指令的具体情况见表3。
表3
五、读写DS18B20的时序
1、DS18B20的复位时序:
1).单片机拉低总线480us~960us,然后释放总线(拉高电平)。
2).这时DS18B20会拉低信号,大约60~240us表示应答。
3).DS18B20拉低电平的60~240us之间,单片机读取总线的电平,如果是低电平,那么表示复位成功。
4).DS18B20拉低电平60~240us之后,会释放总线。
/********************************************************************************
复位:
主机t0时刻发送一复位脉冲(最短为480us的低电平信号),接着在t1时刻释放总线(
拉高总线电平)进入接收状态。
DS18B20在检测到总线的上升沿之后等待15~60us。
接着DS18B20在t2时刻发出存在脉冲(持续60~240us的低电平)
**********************************************************************************/
voidDS18B20_Reset()
{
DQ=1;
_nop_();
DQ=0;
//拉低总线
delay2us(280);
//持续280*2+5=565s
//释放总线
while(DQ);
//等待应答(电平拉低)
while(!
DQ);
//应答电平大约持续60~240us后重新拉高总线
}
2、读时序:
1).在读取的时候单片机拉低电平大约1us;
2).单片机释放总线,然后读取总线电平。
3).这时候DS18B20会拉低电平(0)或拉高电平
(1)。
4).读取电平过后,延迟大约40~45us。
/*****************************************************************
读字节:
主机总线t0时刻从高拉至低电平时,总线只须保持低电平l.7us。
之后在t1时刻将总线拉高产生读时间隙,读时间隙在t1时刻后t2时刻前有效。
t2距t0为15us,也就是说t2时刻前主机必须完成读位,并在t0后的60us-120us
释放总线.注意读的时候从最低位向最高位读。
******************************************************************/
ucharDS18B20_Read_Byte()
uchari,temp=0;
for(i=0;
i<
8;
i++)
{
temp=temp>
>
1;
DQ=0;
//主机将总线拉至低电平,只需保持1.7us
_nop_();
//保持一个时钟周期,也即1us
DQ=1;
delay2us
(1);
//延时7us,一般读数在后半段读
if(DQ)
temp=temp|0x80;
delay2us
(2);
//这里延时45us+前面7us+1us=53us,接近60us
}
returntemp;
3、写时序:
1).单片机拉低电平大约10~15us;
2).单片机持续拉低电平(0)或拉高电平
(1)大约20~45us的时间;
3).释放总线。
/*******************************************************************
写字节:
当主机总线t0时刻从高拉至低电平时就产生写时间隙。
从to时刻开始
15us之应将所需写的位送到总线上,在随后15-60us间DS18B20对总线采样若
低电平写入的位是0;
若高电平写入的位是1,连续写2位间的间隙应大于1us。
注意:
无论读写都是从最低位开始。
********************************************************************/
voidDS18B20_Write_Byte(uchardat)
uchari;
//直接拉到低电平即可产生写时间隙。
DQ=dat&
0x01;
//从最低位依次传输
delay2us(25);
//在15us之将需写的位送到总线上。
然后等待总线采样
//此处至少延时60us
dat=dat>
}
4、读取温度流程
读温度:
流程:
复位--写命令(跳过读序列号,单个DS18B20时用)--启动温度转换
--等待转换完成(完成总线会跳回高电平)--复位--写命令(跳过ROM编码命令)--
读取暂存寄存器字节命令---读低字节---读高字节--复位--合并高低字节--判断
正负
DS18B20_Read_Temperature()
uchartemp_low,temp_high;
DS18B20_Reset();
DS18B20_Write_Byte(0xcc);
DS18B20_Write_Byte(0x44);
//等待转换完成
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS18B20 LCD1602 结合 显示 温度