只有一个18B20没必要读序列号啊~ 雷影少年 发表于 2012-8-16 11:46
收藏0 举报
这就是会写程序的人和不会写程序的人之间的本质区别,度序列号是用一个必然存在的东西来验证自己程序的正确性,序列号能读了,时序就基本正确了,才有资本去调其他的。 ... NE5532 发表于 2012-8-16 14:14
是这样吗?难道不读序列号直接读出正确的温度不能说明时序是正确的?不明白你为什么会这么说? 雷影少年 发表于 2012-8-16 22:02
先会走,才会跑,直接会跑的,是因为看了别人的例程,世界上不是所有的事情都有例程可寻,学会方法,从已知推未知,而不是靠运气去碰。学会这个,在真正的困难面前才能“硬”起来。 ... NE5532 发表于 2012-8-16 23:05
/************************************************ *名称: DS18B20温度传感器设计子程序 *说明: 外部电源供电,温度值为整数值,无报警功能 ***************************************************/ #include<reg51.h> #include"typedef.h" #include"DS18B20.h" sbit DQ=P1^5; //温度传感器信号线 //延时函数 /*void delay(u8 x) { u8 a; for(x;x>0;x--) for(a=100;a>0;a--); } */ void rest() //DS18B20复位函数 { u8 i; DQ=1; DQ=0; i=250; while(--i); //约500周期 DQ=1; i=30; while(--i); //30周期 while(DQ); //等待总线应答--拉低 i=100; //200周期 while(--i); } bit tempreadbit() //读一位数据 { u8 i; bit dat; DQ=1; DQ=0; i++; //延时1个周期 DQ=1; i=4; while(--i); //延时9周期 dat=DQ; i=25; while(--i); //延时50个周期 return dat; } u8 tempread() //读一个字节的数据 { u8 i,j,dat; dat=0; for(i=0;i<8;i++) { j=tempreadbit()&0x01; dat=(j<<7)|(dat>>1); } return dat; } void tempwrite(u8 dat) //写一个字节数据 { u8 i,j; for(i=0;i<8;i++) { DQ=1; DQ=0; j++; DQ=dat&0x01; j=30; while(j--); DQ=1; dat>>=1; } } void tempchang() //开始获取温度并转换 { rest(); tempwrite(0xcc); tempwrite(0x44); } u16 RDtemp() //开始读取温度 { u8 Th,Tl,temp; u16 Temp; // float F_temp; rest(); tempwrite(0xcc); tempwrite(0xbe); Tl=tempread(); Th=tempread(); Temp=Th; Temp<<=8; Temp=Temp|Tl; Temp>>=4; // F_temp=Temp*0.0625; // Temp=F_temp*8+0.5; temp=Temp; return temp; }本菜鸟脸皮比较厚,大家尽管批,有则改之无则加勉~:lol
您说的没错,凡事应该循序渐进,这是事物发展的客观规律。 但是在使用DS18B20的时候,如果是多点测试,为了确认采集温度时使用的是哪个探测器需要读取序列号,如果是单点采集的话就没必要来读取序列号了吧~读取温度 ... 雷影少年 发表于 2012-8-16 23:29
查看全部评分
对,当更复杂的问题摆在你面前的时候,特别是没有人能帮助你的时候,方法就很重要了,其中最基本的方法就是——从已知推未知 NE5532 发表于 2012-8-17 17:02
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
等级类勋章
发帖类勋章
时间类勋章
人才类勋章
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号