int t
float tt //温度值
char i
unsigned char *p
Init_DS18B20()
WriteOneChar(0xCC)//跳过读序号列号的 *** 作
delay(40)//delay(4)
WriteOneChar(0xBE)//读取温度寄存器等(共可读9个寄存器) 前两个就是温度
a=ReadOneChar()
b=ReadOneChar()
t=b
t<<=8
t=t|a
tt=t*0.0625转换成温度.可用
p= (unsigned char *) (&tt)
for(i=3i>=0i--)
{
TI = 0
SBUF = p[i]
while(TI==0)
}
到计算机这边,在把他转换回来就好了;
例如:
BYTE RECV[4]// 这是计算机收到的字符串;
float *fp = (float*)RECV
float t = *fp //t里就是收到的18B20的温度了
既然已经收到东西了哪怕是错误的00, 那证明在发数据了, 很可能是数据率不匹配、错位早成的.检查并确认:1.时钟,使能了外部还是内部, 频率多少2.串口寄存器配置正确? 波特率内外一致? 18B20能否接受115k? 助手Baud设置正确? 3.有些延时要通过计算估计一下, 不要凭主观直觉甚至先随便给个数, 当时不愿想后来更不愿想, 成了潜在问题埋那儿怎么也刨不出来. 4. 程序结构明晰, 风格很好, 继续保持.
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)