根据给定的信息,本文将对DS18B20温度传感器相关的C语言程序代码进行详细的解析与知识点总结。首先从标题“多个18B20 C语言程序代码”可以看出,文章涉及的是关于DS18B20温度传感器的C语言编程实现。在描述部分反复提到了“多个18B20 C语言程序代码”,暗示了文中将会包含多个与DS18B20相关的程序示例。
### 一、DS18B20简介
DS18B20是一种数字温度传感器,由Dallas Semiconductor制造。它具有单线通信协议,这意味着可以通过一条数据线与微控制器进行通信,简化了硬件设计。DS18B20的工作电压范围较宽,可在2.7V至5.5V之间工作,温度测量范围为-55°C至+125°C,精度为±0.5°C(在-10°C至+85°C范围内)。
### 二、DS18B20的C语言程序代码解析
#### 1. 基本定义与初始化
```c
#include<reg51.h>
#define uchar unsigned char
sbit TMDAT = P3^4;
```
- `#include<reg51.h>`:这是8051系列单片机的标准头文件,包含了所有特殊功能寄存器的定义。
- `#define uchar unsigned char`:定义了一个类型`uchar`,代表无符号字符型变量,用于存储8位数据。
- `sbit TMDAT = P3^4;`:定义了一个特殊位变量`TMDAT`,对应P3口的第4位,即P3.4端口,用于与DS18B20进行数据通信。
#### 2. 时延函数
```c
void dmsec(unsigned int count) {
unsigned int i;
while (count) {
i = 115;
while (i > 0) i--;
count--;
}
}
```
该函数实现了延时功能,通过循环计数实现,参数`count`表示需要延时的次数。
#### 3. 初始化与复位
```c
void tmreset(void) {
unsigned int i;
TMDAT = 0;
i = 103;
while (i > 0) i--; // 延时约900us
TMDAT = 1;
i = 4;
while (i > 0) i--;
}
```
该函数实现了DS18B20的复位操作,确保设备处于可通信状态。
#### 4. 读取DS18B20状态
```c
void tmpre(void) {
unsigned int i;
while (TMDAT);
while (~TMDAT);
i = 4;
while (i > 0) i--;
}
```
此函数用于检测DS18B20是否准备好进行数据交换。
#### 5. 读取一位数据
```c
bit tmrbit(void) {
unsigned int i;
bit dat;
TMDAT = 0;
i++;
TMDAT = 1;
i++;
i++;
dat = TMDAT;
i = 8;
while (i > 0) i--;
return (dat);
}
```
该函数负责从DS18B20读取一位数据。
#### 6. 读取一个字节
```c
unsigned char tmrbyte(void) {
unsigned char i, j, dat;
dat = 0;
for (i = 1; i <= 8; i++) {
j = tmrbit();
dat = (j << 7) | (dat >> 1);
}
return (dat);
}
```
此函数负责从DS18B20读取一个完整的字节数据。
#### 7. 写入一个字节
```c
void tmwbyte(unsigned char dat) {
unsigned int i;
unsigned char j;
bit testb;
for (j = 1; j <= 8; j++) {
testb = dat & 0x01;
dat = dat >> 1;
if (testb) {
TMDAT = 0;
i++;
i++;
TMDAT = 1;
i = 8;
while (i > 0) i--;
} else {
TMDAT = 0;
i = 8;
while (i > 0) i--;
TMDAT = 1;
i++;
i++;
}
}
}
```
此函数负责向DS18B20写入一个字节的数据。
### 三、小结
通过上述代码分析,我们可以了解到DS18B20温度传感器的基本操作方法,包括初始化、读取温度值等。这些基本函数是实现DS18B20温度传感器控制的关键,掌握了这些函数的应用,就能够较为容易地实现基于DS18B20的各种温度测量应用。