18b20初始化程序解释

来源:百度知道 编辑:UC知道 时间:2024/05/14 06:41:11
void set_ds18b20()
{
while(1)
{
uchar delay,flag;
flag=0;
TMDAT=1;
delay=1;
while(--delay);
TMDAT=0; //数据线置低电平
delay=250;
while(--delay); //低电平保持500us
TMDAT=1; //数据线置高电平
delay=30;
while(--delay); //高电平保持60us
while(TMDAT==0) //判断DS18B20是否发出低电平信号
{
delay=210; //DS18B20响应,延时420us
while(--delay);
if(TMDAT) //DS18B20发出高电平初始化成功,返回
{
flag=1; //DS18B20初始化成功标志

//初始化成功LED标志

break;
}
}
if(flag) //初始化成功,再延时480us,时序要求
{
delay=240;
while(--delay);

其实你的程序的注释写的已经很清楚了。首先需要明确的是,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这个地方循环多执行几次,起到一个延时的作用。