完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
做的一个温度报警系统,程序烧录到开发板上温度显示正常,但是一到最小系统上温度就检测有误,数值为16度不变....
外围电路加了4.7K上拉电阻,我感觉也没有问题。 附程序:ds18b20.c ********************************************************************************8 /*DS18B20命令: READ ROM 33H 读rom MATCH ROM 55H 匹配rom SKIP ROM CCH 跳过rom SEARCH ROM F0H 搜索rom ALARM ROM ECH 警告rom WRITE SCRATCHPAD 4EH 写暂存器 READ SCRATCHPAD BEH 读暂存器 COPY SCRATCHPAD 48H 复制暂存器 COVERT T 44H 温度转换开始 RECALL E2 B8H 重调用E2存储器 READ POWER SUPPLY B4H 读供电方式 */ #ifndef DS18B20_H #define DS18B20_H #include "common.h" ***it DS18B20=P2^0; //自已定义IO口 unsigned char L_18B20,H_18B20; //分别存放低八位 高八位的数据; unsigned char fg=0,zhengshu,xiaoshu1,xiaoshu2; //fg为负数标志位,zhengshu是温度的整数部分,xiaoshu1是十分位,xiaoshu2是百分位 void Reset_18B20(void); //ds18b20复位程序 void Wait_18B20(); //等待程序,等待ds18b20应答 bit Readbit_18B20(void); //读取一个bit的数据 unsigned char Readbyte_18B20(void); //读取一个字节的数据 void Writebyte_18B20(unsigned char b); //写一个字节(控制字) void Convert(void); //开始转换 void Read_18B20(void); //读取ds18b20 void Reset_18B20(void)//ds18b20复位程序 { unsigned char i; DS18B20=0; i=110; while(i>0)i--; DS18B20=1; i=6; while(i>0)i--; } void Wait_18B20()//等待程序,等待ds18b20应答 { unsigned char i=255; while(DS18B20) { i--; if(i==0) return; //超时 } while(~DS18B20) { i--; if(i==0) return;//超时 } i=6; while(i>0)i--; } bit Readbit_18B20(void) //读取一个bit的数据 { unsigned char i; bit b; DS18B20=0; i++;i++; DS18B20=1; i++;i++;i++;i++;i++; b=DS18B20; i=13; while(i>0)i--; return b; } unsigned char Readbyte_18B20(void) //读取一个字节的数据 { unsigned char i,j,b; b=0; for(i=1;i<=8;i++) { j=Readbit_18B20(); b=(j<<7)|(b>>1); //又玩野 } return b; } void Writebyte_18B20(unsigned char b)//写一个字节(控制字) { unsigned char j,i; bit temp; for(j=1;j<=8;j++) { temp=b&0x01; b=b>>1; if(temp) // 写“1” { DS18B20=0; i++;i++;i++;i++;i++; DS18B20=1; i=13; while(i>0)i--; } else //写“0” { DS18B20=0; i=13; while(i>0)i--; DS18B20=1; i++;i++;i++;i++;i++; } } } void Convert(void) //开始转换 { Reset_18B20(); Wait_18B20(); //等待应答脉冲 Writebyte_18B20(0xcc); //跳过序列号脉冲 Writebyte_18B20(0x44); //转换命令 } void Read_18B20(void) //读取ds18b20 { Convert(); Reset_18B20(); Wait_18B20(); Writebyte_18B20(0xcc); //跳过ROM Writebyte_18B20(0xbe); //发送读取命令 L_18B20=Readbyte_18B20(); //读取低八位数据 H_18B20=Readbyte_18B20(); //读取高八位数据 if(H_18B20>0x7f) //最高位为1时温度是负 { L_18B20=~L_18B20; //补码转换,取反加一 H_18B20=~H_18B20+1; fg=1; //读取温度为负时fg=1 } zhengshu=L_18B20/16+H_18B20*16; //整数部分 xiaoshu1=(L_18B20&0x0f)*10/16; //小数第一位 xiaoshu2=(L_18B20&0x0f)*100/16%10;//小数第二位 } #endif |
|
相关推荐
5个回答
|
|
回帖奖励 +1 分积分
你都说程序没问题了,光发程序上来怎么解决问题。。。。
|
|
|
|
|
|
|
|
单总线主要是时序问题,注意调一下
|
|
|
|
99给张看看没有引脚不好找问题的
|
|
|
|
不错的文件,值得收藏
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
515 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
515 浏览 0 评论
780 浏览 0 评论
如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板
1360 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十章 YOLO2人手检测实验
572 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11757 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 00:12 , Processed in 0.638075 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号