ds18b20怎么读数怎么编程

时间:2025-01-27 22:21:17 网络游戏

DS18B20的读数和编程方法如下:

读数方法

初始化

将数据线置为高电平“1”。

延时一段时间(建议480-960微秒)。

数据线拉到低电平“0”。

延时750微秒。

数据线拉高到高电平“1”。

延时等待(15-60毫秒),直到检测到DS18B20返回的低电平“0”为止。

读操作

将数据线拉高到高电平“1”。

延时2微秒。

数据线拉低到低电平“0”。

延时15微秒。

数据线拉高到高电平“1”。

延时15微秒。

读取数据线的状态,得到1个状态位,并进行数据处理。

延时30微秒。

编程方法

1. 写入一个字节

```c

void WriteOneChar(unsigned char dat) {

unsigned char i = 0;

for (i = 8; i > 0; i--) {

DQ = 0; // 高电平拉至低电平时,写周期的开始

DQ = dat & 0x01; // 数据的最低位先写入

delay_18B20(5); // 60us到120us延时

DQ = 1;

dat >>= 1; // 从最低位到最高位传入

}

}

```

2. 读取一个字节

```c

unsigned char ReadOneChar(void) {

uchar i = 0;

uchar dat = 0;

for (i = 8; i > 0; i--) {

DQ = 0; // 高电平拉成低电平时读周期开始

dat >>= 1;

DQ = 1; // 给脉冲信号

if (DQ) dat |= 0x80;

delay_18B20(4);

}

return(dat);

}

```

3. 读取当前温度(9位模式)

```c

void ReadTemperature9Bit(void) {

WriteOneChar(0x44); // 开始转换命令

delay_18B20(750); // 转换时间

WriteOneChar(0xBE); // 读存储器命令

unsigned char temp = ReadOneChar(); // 读取温度值(低字节)

temp |= (ReadOneChar() << 8); // 读取温度值(高字节)

// 处理温度值

}

```

4. 读取当前温度(12位模式)

```c

void ReadTemperature12Bit(void) {

WriteOneChar(0x44); // 开始转换命令

delay_18B20(93); // 转换时间

WriteOneChar(0xBE); // 读存储器命令

unsigned char temp_low = ReadOneChar(); // 读取温度值(低字节)

unsigned char temp_high = ReadOneChar(); // 读取温度值(高字节)

unsigned int temp = (temp_high << 8) | temp_low; // 组合成12位温度值

// 处理温度值

}

```

注意事项

在进行读写操作时,务必遵循DS18B20的时序要求,否则可能导致读取失败。

延时时间建议根据具体硬件和实际情况进行调整。

编程时使用的库函数或自定义延时函数应确保准确性。

通过以上步骤和代码示例,你可以实现DS18B20的读数和编程。