unsigned char Ds18b20Initial(void) { unsigned char Status = 0x00; unsigned int CONT_1 = 0; unsigned char Flag_1 = 1; Ds18b20OutputInitial(); Ds18b20IO = 1; //DQ复位 Ds18b20Delay(260); //稍做延时 Ds18b20IO = 0; //单片机将DQ拉低 Ds18b20Delay(750); //精确延时 大于 480us 小于960us Ds18b20IO = 1; //拉高总线 Ds18b20InputInitial();//设置IO输入 while((Ds18b20IO != 0)&&(Flag_1 == 1))//等待ds18b20响应,具有防止超时功能 { //等待约60ms左右 CONT_1++; Ds18b20Delay(10); if(CONT_1 > 8000)Flag_1 = 0; Status = Ds18b20IO; } Ds18b20OutputInitial(); Ds18b20IO = 1; Ds18b20Delay(100); return Status; //返回初始化状态 }
时间: 2024-02-14 18:23:47 浏览: 81
这是一个函数,名为 Ds18b20Initial,返回一个 unsigned char 类型的值。该函数的作用是初始化 DS18B20 温度传感器,具体实现过程为:
1. 定义了三个变量:Status、CONT_1 和 Flag_1,分别用于存储 DS18B20 的响应状态、计时器和循环标志。
2. 调用了 Ds18b20OutputInitial 函数,该函数作用是将控制 DS18B20 的引脚初始化为输出模式。
3. 将 Ds18b20IO 置为 1,即将 DQ 引脚复位。
4. 调用 Ds18b20Delay 函数,使程序稍作延时。
5. 将 Ds18b20IO 置为 0,即将 DQ 引脚拉低。
6. 调用 Ds18b20Delay 函数,使程序精确延时,确保延时时间在 480us 到 960us 之间。
7. 将 Ds18b20IO 置为 1,即将 DQ 引脚拉高。
8. 调用 Ds18b20InputInitial 函数,该函数作用是将控制 DS18B20 的引脚初始化为输入模式。
9. 进入一个 while 循环,等待 DS18B20 响应。循环中先将 CONT_1 加 1,然后调用 Ds18b20Delay 函数使程序稍作延时,然后判断 CONT_1 是否大于 8000,如果是,则将 Flag_1 置为 0,跳出循环;否则,将 Status 赋值为 Ds18b20IO 的值。
10. 调用 Ds18b20OutputInitial 函数,将控制 DS18B20 的引脚初始化为输出模式。
11. 将 Ds18b20IO 置为 1,即将 DQ 引脚拉高。
12. 调用 Ds18b20Delay 函数,使程序稍作延时。
13. 返回 Status 的值,即 DS18B20 的响应状态。
阅读全文