单片机是怎么读取ds18b20的温度的
时间: 2024-05-18 09:11:34 浏览: 20
单片机通常通过1-Wire总线协议来读取DS18B20传感器的温度。以下是读取DS18B20温度的基本步骤:
1. 主机向总线发送启动信号,即发送低电平信号至少480us,然后释放总线,等待DS18B20的响应。
2. DS18B20接收到启动信号后,会发送存在脉冲信号,即将总线拉低60-240us,然后拉高,持续15-60us。
3. 主机在接收到存在脉冲信号后,需要向总线发送读取温度命令,即发送0x44命令码。
4. DS18B20接收到读取温度命令后,开始进行温度转换,转换完成后,会将温度值通过1-Wire总线发送给主机。
5. 主机接收到温度值后,需要将其转换成实际温度值。
具体温度转换的方法可以参考DS18B20的手册。需要注意的是,读取DS18B20的温度需要按照上述步骤进行,且读取过程中需要保证总线的稳定性,避免读取错误。
相关问题
51单片机怎么读取DS18B20上面的温度
要读取DS18B20上面的温度,可以使用51单片机的GPIO口与DS18B20进行通信,具体步骤如下:
1. 发送复位脉冲:将GPIO口输出低电平,保持至少480us,然后释放总线,等待15-60us。
2. 发送读取温度命令:将GPIO口输出低电平,保持至少1us,然后输出高电平,等待15-60us。
3. 等待DS18B20的应答信号:DS18B20会在15-60us内拉低总线,持续60-240us表示应答。
4. 读取温度数据:DS18B20会在总线上发送64位bit数据,其中前8位是温度数据的整数部分,后8位是小数部分,剩余的48位为保留位。
5. 计算温度值:将读取到的数据进行转换,得到实际温度值。
需要注意的是,DS18B20的通信协议较为复杂,需要按照时序要求进行操作,否则会导致读取失败。
52单片机DS18B20温度读取代码
以下是52单片机通过单总线读取DS18B20温度传感器的代码:
```
#include <reg52.h>
sbit DQ = P1^0; // 定义DS18B20数据线接口
// DS18B20初始化函数
void Init_DS18B20()
{
DQ = 1;
DelayUs(2);
DQ = 0;
DelayUs(480);
DQ = 1;
DelayUs(60);
}
// DS18B20发送一个字节函数
void Write_DS18B20(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ = 0;
DelayUs(2);
DQ = dat & 0x01;
DelayUs(60);
DQ = 1;
dat >>= 1;
}
}
// DS18B20读取一个字节函数
unsigned char Read_DS18B20(void)
{
unsigned char i, dat=0;
for(i=0;i<8;i++)
{
DQ = 0;
DelayUs(2);
DQ = 1;
DelayUs(2);
dat >>= 1;
if(DQ) dat |= 0x80;
DelayUs(60);
}
return dat;
}
// DS18B20读取温度函数
int Read_Temperature()
{
unsigned char temp1, temp2;
Init_DS18B20();
Write_DS18B20(0xCC);
Write_DS18B20(0x44);
DelayMs(750);
Init_DS18B20();
Write_DS18B20(0xCC);
Write_DS18B20(0xBE);
temp1 = Read_DS18B20();
temp2 = Read_DS18B20();
return ((temp2<<8) | temp1) * 0.0625;
}
void main()
{
int temperature;
while(1)
{
temperature = Read_Temperature();
// 处理温度数据
}
}
```
需要注意的是,与51单片机相同,52单片机也需要使用GPIO端口来模拟单总线通信,并且延时函数也需要根据实际情况进行调整。另外,由于DS18B20的温度数据是16位的,因此在读取温度数据时需要将两个字节合并为一个整数。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)