单片机学习小组
登录
直播中
王银喜
7年用户
2371经验值
私信
关注
求大佬分享DS18B20的代码初始化函数
开启该帖子的消息推送
DS18B20
求大佬分享DS18B20的代码初始化函数
回帖
(1)
陈桂英
2022-1-20 10:38:27
DS18b20的培训总结 DS18b20是一个美国公司的一个产品,可以显示温度,对比与DHT11芯片的话它的优势就是可以更加精准的显示温度,下面是进行简单的初始化介绍,我们可以根据以下时序图进行1602的初始化设置
先将数据位置为高电平,进行短暂的延时,再将数据位拉低,延时480us-960us之间,再将数据位拉高,延时等待15~60us之内会由DS18B20所返回的低电平(不用人为置为低电平),这这里要特别注意一下不能不限的延时等待,要进行一个超时判断。若单片机读取到了DS18b20所返回的一个低电平信号,还要做出延时至少480us,再将数据线拉高后结束。
以下就是DS18B20的代码初始化函数
假设数据为为 IO
uchar DS18B20Init()
{
int flag = 0;
IO = 1;
nop
();
IO = 0;
delay500us();
IO = 1;
delay60us();
If(IO == 0)
{
flag = 1;
return flag;
}
nop
();
IO = 1;
return flag;
}
以上这个函数就是DS18B20启动初始化函数,判断初始化是否成功我们可以设定一个标志位flag 这样比较好进行判断是否初始化成功
还要进行读取64位ROM指令,以下函数就是
void Read_ROM(void)
{
int i;
DS18B20Init();
write_Byte(0x33); //读取ROM指令
for(i = 0; i < 8; i++)
{
ROM
= Read_Byte();
}
}
我们需要对DS18b20进行数据的写入,当然命令也是一种数据,根据上面那个时序图进行数据的写函数
void Write_byte(uchar dat)
{
uchar i;
for(i = 0; i < 8; i++)
{
IO = 0;
nop
();
IO = dat & 0x01 ;// 将数据写入IO口中
Delay60us();
IO = 1;
dat = dat >>1;
}
delay60us();
}
函数的讲解如下
先将数据线先置为低电平,短暂的延时,按照从低位向高位发送数据(一次只能发送一位),延时等待60us,将数据线拉到高电平。
我们可以对DS18n20进行数据和命令的写入,一般的初始化写入命令如下
Write_Byte(0xcc);//跳过读序号指令
Write_Byte(0x44); //启动温度转换
Write_Byte(0xbe);
我们也需要从芯片中读取数据,读取数据也是看时序图的
在这里通过函数进行实现
uchar Read_Byte(void)
{
int i;
uchar byte = 0;
for(i = 0; i < 8; i++)
{
byte >>= 1;
IO = 0;
delay15us();
if(IO)
{
byte = byte | 0x80; //每一次读取一位数据
}
byte = byte>>1;
delay45us();
}
return byte;
}
当我们读取到芯片反馈回来的数据后,我们需要对所得到的数据进行处理才可以
先获取数据
LOW_Byte = Read_Byte(); //获取温度低八位
Hight_Byte = Read_Byte(); // 获取温度高八位
由于获取的数据是十六进制,我们需要将数据进行转化成整型数据
可以通过写一个函数进行实现
uint temper_change()
{
uint temper;
float tp;
temper = Read_Byte();
if(temper < 0)
{
temper = temper - 1;
temper = ~temper;
tp = temper * 0.062; //将16位温度转换成十进制
temper = tp * 100 + 0.5 ; //留取两个小数点
}
else
{
tp = temper * 0.0625;
temper = tp * 100 + 0.5; //保留两位小数
}
return temper;
}
最后,将获取的temper数据进行显示即可。
DS18b20的培训总结 DS18b20是一个美国公司的一个产品,可以显示温度,对比与DHT11芯片的话它的优势就是可以更加精准的显示温度,下面是进行简单的初始化介绍,我们可以根据以下时序图进行1602的初始化设置
先将数据位置为高电平,进行短暂的延时,再将数据位拉低,延时480us-960us之间,再将数据位拉高,延时等待15~60us之内会由DS18B20所返回的低电平(不用人为置为低电平),这这里要特别注意一下不能不限的延时等待,要进行一个超时判断。若单片机读取到了DS18b20所返回的一个低电平信号,还要做出延时至少480us,再将数据线拉高后结束。
以下就是DS18B20的代码初始化函数
假设数据为为 IO
uchar DS18B20Init()
{
int flag = 0;
IO = 1;
nop
();
IO = 0;
delay500us();
IO = 1;
delay60us();
If(IO == 0)
{
flag = 1;
return flag;
}
nop
();
IO = 1;
return flag;
}
以上这个函数就是DS18B20启动初始化函数,判断初始化是否成功我们可以设定一个标志位flag 这样比较好进行判断是否初始化成功
还要进行读取64位ROM指令,以下函数就是
void Read_ROM(void)
{
int i;
DS18B20Init();
write_Byte(0x33); //读取ROM指令
for(i = 0; i < 8; i++)
{
ROM
= Read_Byte();
}
}
我们需要对DS18b20进行数据的写入,当然命令也是一种数据,根据上面那个时序图进行数据的写函数
void Write_byte(uchar dat)
{
uchar i;
for(i = 0; i < 8; i++)
{
IO = 0;
nop
();
IO = dat & 0x01 ;// 将数据写入IO口中
Delay60us();
IO = 1;
dat = dat >>1;
}
delay60us();
}
函数的讲解如下
先将数据线先置为低电平,短暂的延时,按照从低位向高位发送数据(一次只能发送一位),延时等待60us,将数据线拉到高电平。
我们可以对DS18n20进行数据和命令的写入,一般的初始化写入命令如下
Write_Byte(0xcc);//跳过读序号指令
Write_Byte(0x44); //启动温度转换
Write_Byte(0xbe);
我们也需要从芯片中读取数据,读取数据也是看时序图的
在这里通过函数进行实现
uchar Read_Byte(void)
{
int i;
uchar byte = 0;
for(i = 0; i < 8; i++)
{
byte >>= 1;
IO = 0;
delay15us();
if(IO)
{
byte = byte | 0x80; //每一次读取一位数据
}
byte = byte>>1;
delay45us();
}
return byte;
}
当我们读取到芯片反馈回来的数据后,我们需要对所得到的数据进行处理才可以
先获取数据
LOW_Byte = Read_Byte(); //获取温度低八位
Hight_Byte = Read_Byte(); // 获取温度高八位
由于获取的数据是十六进制,我们需要将数据进行转化成整型数据
可以通过写一个函数进行实现
uint temper_change()
{
uint temper;
float tp;
temper = Read_Byte();
if(temper < 0)
{
temper = temper - 1;
temper = ~temper;
tp = temper * 0.062; //将16位温度转换成十进制
temper = tp * 100 + 0.5 ; //留取两个小数点
}
else
{
tp = temper * 0.0625;
temper = tp * 100 + 0.5; //保留两位小数
}
return temper;
}
最后,将获取的temper数据进行显示即可。
举报
更多回帖
rotate(-90deg);
回复
相关问答
DS18B20
DS18B20
有何作用?如何
初始化
DS
1820呢
2021-09-27
2043
ds18b20
初始化
失败的原因?如何解决?
2023-09-03
2234
DS18b20
初始化
问题
2020-07-04
2250
ds18b20
初始化
失败是什么原因导致的?
2023-02-21
787
msp430f149 电压采集与
DS18b20
温度采集不能同时显示
2017-05-18
4094
ds18b20
程序问题
2016-06-01
4560
时钟
DS
1302和
DS18B20
初始化
程序冲突
2017-12-15
9484
单片机程序问题,我定义了
函数
并且在主
函数
里使用了定义的
函数
,但编译却说我没使用定义
函数
。
2021-04-28
2935
小白求助,
求
大佬
分享
ds18b20
的驱动程序
2021-10-20
1022
DS18B20
如何使用?怎样得到输出的温度信号?
2015-05-18
14987
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
英国威廉希尔公司网站
william hill官网 版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分