DS18B20读出的温度值总是255,下面是我的程序,哪位大侠帮忙给看看啊,不胜感激!!!

作者&投稿:梅时 (若有异议请与网页底部的电邮联系)
51单片机ds18b20显示温度不正确,下面有程序,哪位知道的看一下,谢谢!!!~

没有18B20的数据手册单纯看代码没多大意义,首先要清楚选的18B20精度能达到多少,然后根据数据手册去查代码与时序图是否匹配,网上提供的仅仅是代码很多人都没说清楚用的能精确到小数点后几位的18B20,如果这个代码问题不大可能是出在选择的18B20精度上。查一下对应的精度的18B20数据应该如何操作。

因为单总线IC在读写数据的时候要关闭中断,不然打断他的时序,所以会乱七八糟的跳,也就是说你要在中间插入EA=0,EA=1。
EA=0;
ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/
ds1820wr(0x44);//*启动温度转换*/
//此处可以加句while(!DQ) 等待温度转换完成。
EA=1;
EA=0;
ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/
ds1820wr(0xbe);//*读取温度*/
a=ds1820rd();
b=ds1820rd();
EA=1;
采纳我把。

sbit wk=P2^1;//18b20的DQ脚接P2^1
void t(unsigned char x){while(x--);}//延时
void wkcsh(){wk=1;wk=0;t(160);wk=1;t(150)};//初始化
wksj(){unsigned char i;unsigned int x=0,y;for(i=0;i<16;i++){wk=0;wk=1;y=wk;t(20);x>>=1;x=x+(y<<15);wk=1;}}//返回数据
void wkml(unsigned char x){unsigned char i,k;for(i=0;i<8;i++){wk=0;k=x&0x01;if(k==0)wk=0;else wk=1;t(15);x>>=1;wk=1;}}//送命令
cwd(){unsigned int i;wkcsh();wkml(0xcc);wkml(0x44);t(50000);
wkcsh();wkml(0xcc);wkml(0xbe);i=wksj();return x;}//测温度,返回温度值,低四位是小数位,接着七位是整数位

用这个延时void delay(uint i)
{uint j
for(j=0,j<i;j++)
}

很多时候读不出是因为延时不对,建议拿示波器看一下波形

为什么我做的DS18B20数码管显示的温度不准确?
答:首先,要检查你的程序读出的DS18B20的温度值有没有问题,比如仿真中设定26°C,在程序中判断是不是26°C,若是,编一个简单的程序,让数码管输出1,这样就可以判定你的测温程序有没有问题。其次,最怀疑的地方就是你这个数码管的程序有问题,若你可以保证没有问题,可以排除这一块。最后,注意各个...

ds18b20 对采集到的温度进行处理 verilog
答:这个东西我最近也在研究 读取存储在DS18B20的两个8比特的RAM中的数据,二进制中的前面5位是符号位,如果测得的温度大于或等于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。nt ReadTemperature(void){...

为什么单片机控制18B20测温初始总是显示85度然后显示测量值
答:The power-on reset value of the temperature register is +85°C,这个是DS18B20数据手册里的表述,也就是说,DS18B20在上电复位时,其温度寄存器里的初始值是85°C。所以你的问题就出来了。如果你不想显示这个85°C,你可以延迟一段时间,比如0.5S后再提取这个DS18B20转换的温度显示即可。

ds18b20里的 温度值正负判断 为什么要判断大于6348 ,为什么取这个...
答:其实不一定要大于6348 根据手册,要是温度为负值,则寄存器的高八位的高五位全为1,加入你把采集到的数据合成一个unsigned int 型,位temp,则temp为 1 1 1 1 1 X X X X X X X X X X X,必定大于 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 (11个1),为2047,所以你只要判断temp...

为什么18B20温度测量时,总是跳变!
答:你看看这个温度的计算 正常18b20是12位温度 这个程序温度计算的很粗略 估计是你说的这种情况 你温度用查表显示就能好很多 code uchar table_tempfh[]={0,1,1,2,3,3,4,4,5,6,6,7,8,8,9,9};//这个是温度小数位的查表,精确到0.1 a=ReadOneChar(); //读取温度值低位 b=ReadOne...

ds18b20温度测量程序怎么总是显示85度?
答:硬件电路 如果没问题的话(如果是有电源供电的话,上拉电阻4.7K是必须的)首先检查复位时间是否是 480us, 保证每个数据位的时隙读或写的时间大于或等于65us

proteus 仿真ds18b20读出的温度一直为零
答:大概是你的时序出了问题吧?要看一下其时序是否对!在相应的端口用一个示波器来看,对不对一目了然.

DS18B20传出来的数据与温度值之间是什么关系 怎么转换???
答:数值与温度的关系与你对DS18B20的初始化很有关系。间隔可以是0.5度,0.25度,0.125度,0.0625度。例如0000为0度。0001在你选择的是12位时,为0.0625度。选择的是11位时,为0.125度。选择的是10位时,为0.25度。选择的是9位时,为0.5度。转换耗时间很短,看你转换成什么样的格式,后续...

关于DS18B20的精度问题
答:DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃;可编程 的分辨率为9~12位,对应的可分辨...

单片机 通过DS18B20测试当前环境温度, 并通过数码管显示当前温度值
答:刚做过一个18B20的项目,先说一下这个几个函数的功能吧 void dsInit() :初始化操作,完成的任务就是对18B20进行一次复位。ds代表DS18B20,Init是单词初始化的简写。dsWait() : 延时函数,因为18B20在温度转换的时候需要一段时间,转换完成之后,单片机才能去读温度值。bit readBit() :这个函数...