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

[复制链接]
5885|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 | 显示全部楼层
????
你也是打酱油的?
yidou 发表于 2010-5-9 22:58 | 显示全部楼层
原来还有问题埋伏在后面那
ayb_ice 发表于 2010-5-10 09:06 | 显示全部楼层
无语了
yewuyi 发表于 2010-5-10 09:40 | 显示全部楼层
呵呵 ,果然牛皮不是盖的。。。
李冬发 发表于 2010-5-10 10:32 | 显示全部楼层
arm9-11 发表于 2010-5-10 10:34 | 显示全部楼层
nayaix 发表于 2010-5-12 11:17 | 显示全部楼层
渊深海阔 发表于 2010-8-31 13:11 | 显示全部楼层
gz04022167 发表于 2010-8-31 14:58 | 显示全部楼层
。。。。。。。。:funk:遇见高手了哦?!!
calor 发表于 2010-8-31 15:02 | 显示全部楼层
最常见的..
yuyi21ic 发表于 2010-8-31 16:39 | 显示全部楼层
最好的??????????????????????????????
hall 发表于 2010-8-31 17:31 | 显示全部楼层
1# xyp749192072

曰:兰州之妹!
望断云山 发表于 2010-8-31 20:23 | 显示全部楼层
目前论坛流行语不惊人死不休
dong_abc 发表于 2010-8-31 22:35 | 显示全部楼层
tingtang 发表于 2010-8-31 23:04 | 显示全部楼层
原野之狼 发表于 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
xymxym 发表于 2010-9-1 08:41 | 显示全部楼层
全宇宙最好的,火星航空航天局指定使用测温程序:lol
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

77

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部