DS18B20 CRC校验代码
时间: 2023-07-03 15:30:18 浏览: 81
以下是DS18B20温度传感器的CRC校验代码,可用于检查数据的完整性:
```c
#include <OneWire.h>
byte crc8(const byte *data, byte len) {
byte crc = 0x00;
while (len--) {
byte inbyte = *data++;
for (byte i = 8; i; i--) {
byte mix = (crc ^ inbyte) & 0x01;
crc >>= 1;
if (mix) {
crc ^= 0x8C;
}
inbyte >>= 1;
}
}
return crc;
}
OneWire ds(DS18B20_PIN);
void setup() {
Serial.begin(9600);
}
void loop() {
byte data[9];
ds.reset();
ds.select(TEMP_SENSOR_ADDR);
ds.write(0x44, 1);
delay(1000);
ds.reset();
ds.select(TEMP_SENSOR_ADDR);
ds.write(0xBE);
for (byte i = 0; i < 9; i++) {
data[i] = ds.read();
}
if (crc8(data, 8) == data[8]) {
int raw = (data[1] << 8) | data[0];
float celsius = (float)raw / 16.0;
Serial.print("Temperature: ");
Serial.print(celsius);
Serial.println(" C");
} else {
Serial.println("Invalid CRC");
}
delay(1000);
}
```
其中 `TEMP_SENSOR_ADDR` 和 `DS18B20_PIN` 需要根据实际情况修改为你所使用的DS18B20的地址和引脚号。该代码使用了OneWire库来与DS18B20通信,通过读取传感器返回的9个字节数据,然后进行CRC校验,最后计算出温度值。如果校验失败,则输出 "Invalid CRC"。
阅读全文