ds18b20中的rom
时间: 2024-06-19 20:03:05 浏览: 64
DS18B20是一种数字温度传感器,每个DS18B20都有一个唯一的64位ROM代码,这个代码是厂家为每个传感器编程的,用于区分多个传感器。这个64位ROM代码中包含了一些信息,其中前8位是设备类型,后48位是唯一的序列号,最后8位是CRC校验码。使用这个唯一的ROM代码,我们可以在同一条总线上使用多个DS18B20传感器,并且可以轻松地区分它们。
相关问题
void Ds18b20ChangTemp() { Ds18b20Init(); delayms_ds18B20(1); Ds18b20WriteByte(0xcc); //跳过ROM操作命令 Ds18b20WriteByte(0x44); //温度转换命令 delayms_ds18B20(100); } void Ds18b20ReadTempCom() { Ds18b20Init(); delayms_ds18B20(1); Ds18b20WriteByte(0xcc); //跳过ROM操作命令 Ds18b20WriteByte(0xbe); //发送读取温度命令 }int Ds18b20ReadTemp() { int temp = 0; uchar tmh, tml; Ds18b20ChangTemp(); //先写入转换命令 Ds18b20ReadTempCom(); //然后等待转换完后发送读取温 度命令 tml = Ds18b20ReadByte(); //读取温度值共16位,先读低字节 tmh = Ds18b20ReadByte(); //再读高字节 temp = tmh; temp <<= 8; temp |= tml; return temp; }
这段代码实现了通过DS18B20传感器获取温度值的功能。其中,Ds18b20Init()函数用于初始化DS18B20传感器,delayms_ds18B20(1)函数用于延时1毫秒,Ds18b20WriteByte()函数用于向DS18B20传感器写入命令,Ds18b20ReadByte()函数用于从DS18B20传感器读取数据。
函数Ds18b20ChangTemp()用于向DS18B20传感器发送温度转换命令,函数Ds18b20ReadTempCom()用于向DS18B20传感器发送读取温度命令,函数Ds18b20ReadTemp()用于读取DS18B20传感器返回的温度值。最后,将读取到的温度值返回给调用者。
DS18B20 读取ROM指令
DS18B20是一种数字温度传感器,它使用一根单线串行总线进行通信。要读取DS18B20的ROM指令,需要按照以下步骤进行:
1. 初始化单线总线,即发送复位脉冲。
2. 发送读取ROM指令,即发送0x33命令字。
3. DS18B20会将其ROM码以9字节的形式发送回来,需要通过单线总线接收这些数据。
下面是一个示例代码,用于读取DS18B20的ROM指令:
```
#include <OneWire.h>
// 定义单线总线引脚
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS); // 创建OneWire对象
void setup() {
Serial.begin(9600);
}
void loop() {
byte i;
byte rom[9];
if (oneWire.reset()) {
// 发送复位脉冲成功
oneWire.write(0x33); // 发送读取ROM指令
for (i = 0; i < 8; i++) {
rom[i] = oneWire.read(); // 读取ROM码
}
rom[8] = oneWire.read(); // 读取校验码
if (OneWire::crc8(rom, 8) == rom[8]) {
// 校验通过,输出ROM码
Serial.print("ROM =");
for (i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(rom[i], HEX);
}
Serial.println();
}
}
delay(1000);
}
```
请注意,读取DS18B20的ROM指令需要在单线总线上进行,因此需要将DS18B20连接到单线总线上才能正确运行。
阅读全文