2956|0

116

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

ATmega16 读取DS18B20程序 [复制链接]

//AVR+GCC

#include
#include
#define  DQ       0x05
#define  DQ_1     PORTB |=  (1< #define  DQ_0     PORTB &= ~(1< #define  DQ_IN    DDRB  |=  (1< #define  DQ_OUT   DDRB  &= ~(1<   
//t  = (ret*7+18)us
//2  = 32us
//5  = 52us
//10 = 87us
void Delay(int ret)         //
{
    int i;
    for(i=0;i }
unsigned char Reset_DS18B20(void)
{
    unsigned char ret;
DQ_IN;
DQ_1;
   
    DQ_0;                  //
    Delay(70);             //
    DQ_1;
    DQ_OUT;
    Delay(16);             //
   
ret = PINB;
if(ret & 0x20)
{
      return 0x00;  
}
else
{
         Delay(50);        
      return 0x55;  
}
}
void WR_One_Byte(unsigned char ret)
{
    unsigned char i;
    DQ_IN;
DQ_1;
    for(i=0;i<8;i++)
    {
     DQ_0;
      Delay(0);       //
        if(ret&0x01) DQ_1;        //
     Delay(4);
     
        DQ_1;  
        ret >>= 0x01;     //
  Delay(0);
    }
}
unsigned char RD_One_Byte(void )
{
    unsigned char i,ret;
    ret=0;   
    for(i=0;i<8;i++)
    {
        DQ_IN;
     DQ_1;  
        DQ_0;                  //
     ret >>= 0x01;
        DQ_OUT;
     DQ_1;                     //
     if(PINB & 0x20) ret |= 0x80;
        Delay(5);               //
    }
    return ret;
}
void Start_Temp(void)
{
   if(Reset_DS18B20()==0x55)
   {
       Delay(300);              //
       WR_One_Byte(0xcc);       //
       WR_One_Byte(0x44);
   }
}
      
unsigned int Read_Temp(void)
{
   //float wendu;
   unsigned char TempL,TempH;
   unsigned int  Temp;
   if(Reset_DS18B20()==0x55)
   {
      Delay(300);                //
      WR_One_Byte(0xcc);
      WR_One_Byte(0xbe);
      TempL=RD_One_Byte();
      TempH=RD_One_Byte();
      Temp   = TempH;
      Temp <<= 0x08;
      Temp  |= TempL;
      if(Temp & 0xf000)
   {
       Temp   = 0;
   }
   return Temp;
      /*
   if(Temp & 0xf000)
   {
       Temp   = 0;
   }
   else
      {
       wendu  = Temp;
       wendu *= 0.0625;   
          Temp   = (unsigned int)wendu;
   }
      return Temp;*/
   }
   else
   {
      return 0;
   }
}
点赞 关注(1)
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表