这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 18B20 读不出温度,???

共8条 1/1 1 跳转至

18B20 读不出温度,???

助工
2012-02-17 16:20:25     打赏



请大家帮忙看看,那块有问题!!??

void rest_18b20()

 DQ=1;
 delay1(1);
 DQ=0;
 delay1(60);
 DQ=1;
 delay1(4);
// DQ=1;
 delay1(6);
 if(DQ==0)
// P1=0x00;
delay1(10);
 else
// P1=0XFF;
 delay1(10);
// DQ=1;
 
 }

void wrte18b20_0()
{
 DQ=1; 
 delay1(1);
 DQ=0;
 delay1(5); 
}

void wrte18b20_1()
{
 DQ=1; 
 delay1(1);
 DQ=0;
 delay1(3);
 DQ=1;
 delay1(4); 
}

void write_18b20(unchar com)
{
 unchar i;
 for(i=8;i>0;i--)
 {
  if(com&0x01)
  wrte18b20_1();
  else
  wrte18b20_0();
  com=com>>1;
  } 
}

unchar read_18b20()
{
 unchar x, date=0;
 for(x=0;x<8;x++)
 {
  DQ=0;
  date>>=1;
  //DQ=1;
  
      
  DQ=1;
  if(DQ)
  date|=0x80;
  else
  date|=0x00;
  delay1(5);
  } 
 return date;
 }

void init_18b20()
{
// unchar
 rest_18b20();
 write_18b20(0xcc);
 write_18b20(0x44);
 delay(500);
 rest_18b20();
 write_18b20(0xcc);
 write_18b20(0xbe);
 delay(200);
 tempL=read_18b20();
 tempH=read_18b20();
 
  tempH=(tempH<<4)|(tempL>>4);
  tempL=tempL&0x0f;
  if(tempH&0x80)
  {
  tempH=~tempH;
  tempL=~tempL+0x01;
  flag=1;
 }
  else
  flag=0;
 
  //htd();
  gaowei=tempH/100+0x30;
  diwei=tempH%100/10+0x30;
  xswei=tempH%10+0x30;
}




关键词: 18B20     不出     温度     18b20     delay1    

专家
2012-02-17 17:26:40     打赏
2楼

延时的时间也对着了?


助工
2012-02-17 17:44:10     打赏
3楼

延时的时间有没符合要求,硬件接对了没。。。。????


院士
2012-02-19 10:53:04     打赏
4楼
楼主的写0与写1的指令时间间隔貌似不对。
以下是参考代码:
for(i=0 ;i<8 ;i++)
    {
        if(data&0x01)    //低位在前
        {
            //写1
            DQ_Write_0() ; //写时间空隙总是从总线的低电平开始
            Delay_us(8) ;  //15us内拉高
            DQ_Write_1() ;
            Delay_us(80) ; //整个写1时隙不低于60us
        }
        else
        {
            //写0
            DQ_Write_0() ;
            Delay_us(110) ; //保持在60us到120us之间
            DQ_Write_1() ;
            Delay_us(5) ;
        }
        data >>= 1 ;
    }

以上代码在STM32平台上测试成功。希望对楼主有帮助。

助工
2012-02-20 12:33:49     打赏
5楼
延时是对的,我找去问题了!

4楼说对了!

可是看时序写1和写0应该分开写的啊!

难道不管哪个时序图,总是先写0,再写1吗?


工程师
2012-02-20 13:25:46     打赏
6楼
时序

院士
2012-02-21 13:55:54     打赏
7楼
我记得数据1与0是按间隔来定的。
可能与先写那个无关。
因为一些原因并没有在实际板子上再做测试。

这个问题暂时先放一下吧。我有时间再按照楼主所说的,测试。

助工
2012-02-25 22:00:45     打赏
8楼

共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]