代码意义unsigned char readByteDS18B20(void) { unsigned char i; unsigned char retVal=0; RLS_DS18B20; //释放总线 for(i=8;i>0;i--) { retVal>>=1; HLD_DS18B20; //Maga16控制总线 CLR_DS18B20; //强制拉低 delay_nus(5); //延时大于1us SET_DS18B20; //释放总线,DS18B20会将总线强制拉低 //delay_nus(8); RLS_DS18B20; //释放总线 delay_nus(20); //延时大于1us if(STU_DS18B20) retVal|=0x80; delay_nus(50); //31us HLD_DS18B20; //释放总线 SET_DS18B20; //释放总线,DS18B20会将总线强制拉低 delay_nus(30); //30.38us } delay_nus(5); //2.71us(大于1us就行了) return(retVal); }
时间: 2024-04-09 20:28:12 浏览: 154
ds18b20程序c语言
以下是这段代码的C++版本:
```cpp
unsigned char readByteDS18B20() {
unsigned char i;
unsigned char retVal = 0;
RLS_DS18B20; // 释放总线
for (i = 8; i > 0; i--) {
retVal >>= 1;
HLD_DS18B20; // Maga16控制总线
CLR_DS18B20; // 强制拉低
delay_nus(5); // 延时大于1us
SET_DS18B20; // 释放总线,DS18B20会将总线拉低
// delay_nus(8);
RLS_DS18B20; // 释放总线
delay_nus(20); // 延时大于1us
if (STU_DS18B20)
retVal |= 0x80;
delay_nus(50); // 31us
HLD_DS18B20; // 释放总线
SET_DS18B20; // 释放总线,DS18B20会将总线拉低
delay_nus(30); // 30.38us
}
delay_nus(5); // 2.71us(大于1us就行了)
return retVal;
}
```
这段代码用于从DS18B20温度传感器读取一个字节的数据。通过循环进行8次操作,每次将retVal右移一位,并根据STU_DS18B20的状态判断是否将retVal的最高位设置为1。在每次操作之间,使用延时函数进行一些等待,以确保总线电平的稳定性。最后返回读取到的字节数据。
阅读全文