打印

世上最好的的DS18B20温度程序,贡献给大家了!!

[复制链接]
4015|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xyp749192072|  楼主 | 2010-5-2 11:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xyp749192072 于 2010-5-2 13:57 编辑

uchar reset()
{ uchar flag,i;
   lo=1;
   lo=0;
   for(i=200;i>0;i--);  //延时 802 us time=1+2*i
    for(i=200;i>0;i--);
   lo=1;
   for(i=120;i>0;i--);// 延时 201 us
   flag=lo;
   for(i=160;i>0;i--)// 延时 321 us  满足 最小周期
  return flag;
}
void write_bit(uchar wei)
{
  uchar i;
  _nop_();            //连续写之间最少1us回复时间
   lo=1;               
   lo=0;                 //写时间隙
  _nop_();
   _nop_();            //拉低至少1us
   lo=wei;              //向数据线写数据
    for( i=30;i>0;i--);//满足最小、最大写周期
   
}
uchar read_bit()
{
   uchar flag,i;
   _nop_();             //连续读之间至少1us的回复时间
   lo=1;
   lo=0;              //读时间隙
   _nop_();
   _nop_();
   lo=1;             //释放数据线,写数据
  for(i=3;i>0;i--); //延时几us,使数据稳定
  flag=lo;          //向数据线写数据
  for(i=30;i>0;i--); //延时 满足最小读周期
  return flag;
   
}
void write_byte(uchar date)
{ uchar i,kk;
   for(i=0;i<8;i++)
    {
      kk=(date>>i)&0x01;
      write_bit(kk);
    }
  
}
uchar read_byte()
{
   uchar i,kk;
    kk=0;
   for(i=0;i<8;i++)
       kk=kk+(read_bit()<<i);

    return kk;


void main()
{
  

while(1)
{
       reset() ;                               //总线复位
       write_byte(jump_ROM);        //跳跃命令
       write_byte(start);                 //启动温度转换
       reset();                               //总线复位
       write_byte(jump_ROM);        //跳跃命令
       write_byte(read_EEROM);    //读命令
       TMPL = read_byte();            //温度低字节   
       TMPH = read_byte();            //高字节
       temp = TMPH;                      //不考虑零下温度
       temp <<= 8;      
       temp = temp | TMPL;
       temp = TMPL / 16 + TMPH * 16;     
       display(temp);//显示温度
        }
}


问题:芯片资料说DS18B20写时间隙为60~120us,那读时间隙呢,最小60us,最大有限制吗?

相关帖子

沙发
tianwu| | 2010-5-9 20:31 | 只看该作者
太好了 找到 C了

使用特权

评论回复
板凳
applex| | 2010-5-9 21:10 | 只看该作者
Ft,so?

使用特权

评论回复
地板
706的哥们| | 2010-5-9 22:52 | 只看该作者
????
你也是打酱油的?

使用特权

评论回复
5
yidou| | 2010-5-9 22:58 | 只看该作者
原来还有问题埋伏在后面那

使用特权

评论回复
6
ayb_ice| | 2010-5-10 09:06 | 只看该作者
无语了

使用特权

评论回复
7
yewuyi| | 2010-5-10 09:40 | 只看该作者
呵呵 ,果然牛皮不是盖的。。。

使用特权

评论回复
8
李冬发| | 2010-5-10 10:32 | 只看该作者
:lol

使用特权

评论回复
9
arm9-11| | 2010-5-10 10:34 | 只看该作者
:funk:

使用特权

评论回复
10
nayaix| | 2010-5-12 11:17 | 只看该作者
无语

使用特权

评论回复
11
渊深海阔| | 2010-8-31 13:11 | 只看该作者

使用特权

评论回复
12
gz04022167| | 2010-8-31 14:58 | 只看该作者
。。。。。。。。:funk:遇见高手了哦?!!

使用特权

评论回复
13
calor| | 2010-8-31 15:02 | 只看该作者
最常见的..

使用特权

评论回复
14
yuyi21ic| | 2010-8-31 16:39 | 只看该作者
最好的??????????????????????????????

使用特权

评论回复
15
hall| | 2010-8-31 17:31 | 只看该作者
1# xyp749192072

曰:兰州之妹!

使用特权

评论回复
16
望断云山| | 2010-8-31 20:23 | 只看该作者
目前论坛流行语不惊人死不休

使用特权

评论回复
17
dong_abc| | 2010-8-31 22:35 | 只看该作者
:funk:

使用特权

评论回复
18
tingtang| | 2010-8-31 23:04 | 只看该作者
:kiss:

使用特权

评论回复
19
原野之狼| | 2010-8-31 23:51 | 只看该作者
void main()
{
  

while(1)
{
       reset() ;                               //总线复位
       write_byte(jump_ROM);        //跳跃命令
       write_byte(start);                 //启动温度转换

       delay_ms(1000);                 // 需要延时一段时间

       reset();                               //总线复位
       write_byte(jump_ROM);        //跳跃命令
       write_byte(read_EEROM);    //读命令
       TMPL = read_byte();            //温度低字节   
       TMPH = read_byte();            //高字节
       temp = TMPH;                      //不考虑零下温度
       temp <<= 8;      
       temp = temp | TMPL;
       temp = TMPL / 16 + TMPH * 16;     
       display(temp);//显示温度
        }
}
xyp749192072 发表于 2010-5-2 11:20

使用特权

评论回复
20
xymxym| | 2010-9-1 08:41 | 只看该作者
全宇宙最好的,火星航空航天局指定使用测温程序:lol

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

77

帖子

1

粉丝