18b20初始化程序解释

18b20初始化程序解释,第1张

其实你的程序的注释写的已经很清楚了。首先需要明确的是,ds18B20作为单总线器件,它对时序要求比较高,否则是不能正常工作的。至于你问的程序注释,我说过了,本身写的已经很清楚了,大没有在去解释的必要。估计你有这样的问题,是本身对ds18b20的数据手册还不是很清楚,建议自己看看他的资料和用法,先把时序和一些概念搞清楚就好了。至于你问的while(--delay)这句程序,意思就是只要“--delay”非零(while语句非零即为真),那程序就会停到这里一直执行,执行一次delay减1,直到--delay最后变成0。然后程序才能跳到下一句去执行。本身这个地方很好理解的,看来你的c语言还有待在看看。不过也没事,程序写多了自然这些东西就明白了。最后给你举个例子吧,比如程序前面给delay赋值为5,那么while(--delay)这句程序会执行5次,第一次while(4),第二次while(3),while(2),while(1),最后成了while(0),到了这时候,while(0)为假,程序就不执行了,然后就转到了下面。这样你应该就明白了,就是让程序在while这个地方循环多执行几次,起到一个延时的作用。

串口是可以发送16进制的数的。我常用的简单方法是,在单片机里这样写:

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. 程序结构明晰, 风格很好, 继续保持.


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11063926.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存