void Init_DS18B20(void) { unsigned char x=0; DQ=1; Delayns(8); DQ=0; Delayns(80); DQ=1; Delayns(14); x=DQ; Delayns(20); } unsigned char ReadOneChar(void) { unsigned char i=0; unsigned char dat=0; for(i=8;i>0;i--) { DQ=0; dat>>=1; DQ=1; if(DQ) dat|=0x80; Delayns(4); } return(dat); } void WriteOneChar(unsigned char dat) { unsigned char i=0; for(i=8;i>0;i--) { DQ=0; DQ=dat&0x01; Delayns(5) ; DQ=1; dat>>=1; } } unsigned int ReadTemperature(void) { unsigned char a =0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B20(); WriteOneChar(0XCC); WriteOneChar(0X44); Init_DS18B20(); WriteOneChar(0XCC); WriteOneChar(0XBE); a=ReadOneChar(); b= ReadOneChar(); t=b; t<<=8; t=t|a; tt=t*0.0625; t=tt*10+0.5; return(t); }请帮我看看代码有没有错,为什么我读的有问题

时间: 2023-10-22 13:09:45 浏览: 37
这段代码看起来是用来读取DS18B20温度传感器的温度值的。根据代码逻辑来看,它的实现流程是: 1. 初始化DS18B20传感器 2. 发送读取温度的指令 3. 从DS18B20传感器中读取温度值 4. 将读取到的温度值转换成实际温度,并返回结果 从代码实现上看,似乎没有明显的错误。但是,我们还需要考虑一些问题: 1. DS18B20传感器的连接方式是否正确? 2. DS18B20传感器的工作电压是否正确? 3. 温度值的转换是否正确? 如果出现读取有问题的情况,可能是上述问题导致的。你可以先检查一下这些方面,看看是否存在问题。如果还是不能解决问题,可以提供更多的信息,让我们更好地帮助你解决问题。
相关问题

解释一下这串代码void delay_18B20(uint i) { while(i--); } void Init_DS18B20(void) { uchar x=0; DQ =1; delay_18B20(8); DQ =0; delay_18B20(80); DQ =1; delay_18B20(14); x=DQ; delay_18B20(20); } uchar ReadOneChar(void) { unsigned char i=0; unsigned char dat0 = 0; for(i=8;i>0;i--){ DQ= 0; dat0>>=1; DQ= 1; if(DQ) dat0|=0x80; delay_18B20(4); } return(dat0); }

这段代码是用来操作DS18B20温度传感器的函数。 - `delay_18B20`函数用于实现延时功能,参数`i`表示延时的次数。函数内部使用了一个简单的`while`循环,通过不断递减`i`的值来实现延时。 - `Init_DS18B20`函数用于初始化DS18B20温度传感器。在初始化过程中,通过设置`DQ`引脚的电平和调用`delay_18B20`函数来实现相应的延时。具体的初始化步骤包括: - 将`DQ`引脚设置为高电平。 - 延时一段时间(约8微秒)。 - 将`DQ`引脚设置为低电平。 - 延时一段时间(约80微秒)。 - 将`DQ`引脚设置为高电平。 - 延时一段时间(约14微秒)。 - 读取`DQ`引脚的电平,并将结果保存在变量`x`中。 - 延时一段时间(约20微秒)。 - `ReadOneChar`函数用于从DS18B20温度传感器读取一个字节的数据。在读取过程中,通过控制`DQ`引脚的电平和调用`delay_18B20`函数来实现相应的延时。具体的读取步骤包括: - 使用一个循环,循环8次,每次读取一个位。 - 将`DQ`引脚设置为低电平,用于发送读取命令。 - 将要读取的数据位右移一位。 - 将`DQ`引脚设置为高电平,用于读取数据位的值。 - 如果`DQ`引脚为高电平,则将要读取的数据位的最高位设为1;否则设为0。 - 延时一段时间(约4微秒)。 - 返回读取到的数据字节。 需要注意的是,代码中使用了一些未定义的类型和变量,如`uchar`、`DQ`,这些可能是用户自定义的类型或者来自其他地方的定义。在理解代码功能时,需要对这些类型和变量进行适当的替换或定义。同时,还需要确保正确地连接和配置DS18B20温度传感器以及相应的引脚。

void Init_DS18B20(void) { unsigned char x=0; DQ = 1; Delayns(8); DQ = 0; Delayns(80); DQ = 1; Delayns(14); x=DQ; Delayns(20); } unsigned char ReadOneChar(void) { unsigned char i=0; unsigned char dat = 0; for(i=0;i>0;i--) { DQ = 0; dat>>=1; DQ = 1; if(DQ) dat |= 0x80; Delayns(4); } return(dat); } void WriteOneChar(unsigned char dat) { unsigned char i=0; for(i=0;i>0;i--) { DQ = 0; DQ = dat&0x01; Delayns(5); DQ = 1; dat>>=1; } } unsigned int ReadTemperature(void) { unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt = 0; Init_Ds18B20(); WriteOneChar(0xCC); WriteOneChar(0x44); Init_DS18B20(); WriteOneChar(0xCC); WriteOneChar(0xBE); a=ReadOneChar(); b=ReadOneChar(); t=b; t<<=8; t=t|a; tt=t*0.0625; t=tt*10+0.5; return(t); }

这段代码是使用单总线DS18B20温度传感器读取温度的代码,具体的函数包括: 1. Init_DS18B20():初始化DS18B20传感器,包括发送复位信号,等待一定时间,读取DS18B20的响应等。 2. ReadOneChar():读取单总线上DS18B20传感器发送的数据。 3. WriteOneChar():向单总线上的DS18B20传感器写入数据。 4. ReadTemperature():读取DS18B20传感器的温度数据,并计算出对应的温度值。 其中,Init_DS18B20() 和 ReadOneChar() 函数用来实现单总线通信协议,WriteOneChar() 用来向DS18B20传感器写入指令,ReadTemperature() 则用来读取DS18B20传感器的温度数据,并进行相关的计算,得到对应的温度值。

相关推荐

最新推荐

recommend-type

一种基于DS18B20的温度采集系统设计

在数字式温度传感器的内部一般包含有温度传感器、接口电路、存储器(或寄存器)、信号处理器和A/D转换器。与传统的模拟温度传感器相比,数字式温度传感器在器件微小化、抗干扰能力、可靠性、分辨率以及精度方面都具有...
recommend-type

DS18B20数据手册-中文版(带目录)

使用参见:https://handsome-man.blog.csdn.net/article/details/104530051
recommend-type

51单片机DS18B20测量温度实验

实验任务 用一片DS18B20构成测温系统,测量的温度精度达到0.1度,测量的温度的范围在-20度到+50度之间,用4位数码管显示出来。
recommend-type

基于89C51和DS18B20的温度采集系统设计

本系统是以89C51单片机为控制核心技术的温度采集控制系统,介绍了与DS18B20温度传感器组成温度采集系统的设计方案。本温度采集系统的下位机采用89C51单片机为主控制器,利用DS18B20温度传感器进行溫度测量,采用...
recommend-type

基于AT89C51和DS18B20的最简温度测量系统

本文介绍一种新型的可编程温度传感器DS18B20,他能代替模拟温度传感器和信号处理电路,直接与单片机沟通,完成温度采集和数据处理。DS18B20与AT89C51结合实现最简温度检测系统,该系统结构简单,抗干扰能力强,适合...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

HSV转为RGB的计算公式

HSV (Hue, Saturation, Value) 和 RGB (Red, Green, Blue) 是两种表示颜色的方式。下面是将 HSV 转换为 RGB 的计算公式: 1. 将 HSV 中的 S 和 V 值除以 100,得到范围在 0~1 之间的值。 2. 计算色相 H 在 RGB 中的值。如果 H 的范围在 0~60 或者 300~360 之间,则 R = V,G = (H/60)×V,B = 0。如果 H 的范围在 60~120 之间,则 R = ((120-H)/60)×V,G = V,B = 0。如果 H 的范围在 120~180 之间,则 R = 0,G = V,B =
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。