52单片机DS18B20温度读取代码
时间: 2023-07-09 16:53:04 浏览: 66
以下是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位的,因此在读取温度数据时需要将两个字节合并为一个整数。
相关推荐
![](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)
![](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)