51单片机DS18B20无小数测温C程序详解

需积分: 3 2 下载量 51 浏览量 更新于2024-09-20 收藏 2KB TXT 举报
本篇文章主要介绍了如何使用8051单片机和DS18B20温度传感器进行测温编程,不包含小数位的处理。以下是关键知识点的详细解读: 1. **头文件导入**: 首先,代码导入了必要的头文件 `<reg51.H>` 和 `<intrins.h>`,这可能包含了8051单片机的硬件定义以及一些内联函数,用于简化程序的编写。 2. **数据类型定义**: 定义了 `uint` 为无符号整型和 `uchar` 为无符号字符型,分别用于后续的数值操作和I/O操作。 3. **引脚配置**: `sbit dq = P3^3;` 表示将P3.3引脚设置为数据输入/输出(Data Input/Output)模式,用于与DS18B20通信。 4. **全局变量**: `temp_value` 用于存储读取到的温度值,而 `codetable` 是一个字符数组,用于转换十进制温度值为对应的ASCII码显示。 5. **定时函数**: - `delay_18B20(uint i)`:这是一个18B20特定的延迟函数,接受微秒(us)作为参数,用于确保通信协议的正确执行。 - `delay(uint xms)`:通用的延迟函数,接受毫秒(ms)作为参数,内部通过循环计时实现延时。 6. **DS18B20初始化函数**: - `Init_DS18B20()` 函数负责初始化DS18B20通信,包括拉高DQ引脚、发送起始信号、等待应答、读取ROMID等步骤。 7. **读取一个字符函数**: `ReadOneChar()` 用于从DS18B20读取一个数据字符,通过逐位读取并解析寄存器内容完成。 8. **写入一个字符函数**: `WriteOneChar(uchardat)` 负责向DS18B20发送数据,按位发送以便与DS18B20进行通信。 9. **测温过程**: 由于标题强调不含小数位,所以实际的测温计算可能在文章中没有明确给出。通常,读取到的温度值需要转换为二进制或十进制,然后查找温度表 (`codetable`) 获取对应的ASCII码显示。在这个代码片段中,这部分内容可能是在其他部分实现,例如一个外部的温度计算函数或者在主函数中调用相关函数处理温度值。 10. **LED显示**: 文档提到的 `display[]` 数组用于临时存储温度值,但实际的LED显示功能可能在其他地方处理,如显示温度值到LCD或其他显示器。 这个C程序的核心是DS18B20与8051单片机的通信接口和温度值的获取,其中涉及到硬件初始化、数据传输和处理,以及可能的温度单位转换。由于标题强调的是整数温度值,因此在解析和显示过程中,温度值会精确到整数部分,不涉及小数点后的精度。如果需要将温度值转换为十进制或二进制显示,需要结合温度表并根据具体需求编写额外的计算逻辑。