<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > AVR 單個DS18B20溫度讀取程序(可測負(fù)溫度)

          AVR 單個DS18B20溫度讀取程序(可測負(fù)溫度)

          作者: 時間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
          使用方法:
          把兩個文件放入工程,需要溫度時調(diào)用DS18B20_ReadTemperature,返回值就是溫度.
          DS18B20.h
          /****** AVR 單個DS18B20溫度讀取程序 ******
          * 版本.........: 1.0
          * 目標(biāo).........: AVR
          * 文件名.......: DS18B20.h
          * 編譯器.......: IAR for AVR V5.5
          *****************************************/
          #ifndef __DS18B20_H__
          #define __DS18B20_H__

          #include
          #include "delay.h"

          #define DS18B20_DQ_DDR DDRG
          #define DS18B20_DQ_PORT PORTG
          #define DS18B20_DQ_PIN PING
          #define DS18B20_DQ_BIT 4

          #define DS18B20_DQ_IN DS18B20_DQ_DDR &= ~(1 << DS18B20_DQ_BIT)
          #define DS18B20_DQ_OUT DS18B20_DQ_DDR |= (1 << DS18B20_DQ_BIT)
          #define DS18B20_DQ_LOW DS18B20_DQ_PORT &= ~(1 << DS18B20_DQ_BIT)
          #define DS18B20_DQ_HIGH DS18B20_DQ_PORT |= (1 << DS18B20_DQ_BIT)
          #define DS18B20_DQ_VALUE (DS18B20_DQ_PIN & (1 << DS18B20_DQ_BIT))

          externfloatDS18B20_ReadTemperature(void);


          #endif/* __DS18B20_H__ */


          #endif/* __DS18B20_H__ */
          DS18B20.c
          /****** AVR 單個DS18B20溫度讀取程序 ******
          * 版本.........: 1.0
          * 作者.........: 陳利棟
          * 目標(biāo).........: AVR
          * 文件名.......: DS18B20.c
          * 編譯器.......: IAR for AVR V5.5
          * 創(chuàng)建時間.....: 2010.10.09
          * 最后修改.....: 2010.10.09
          *****************************************/
          #include "DS18B20.h"

          staticvoidDS18B20_Init(void)
          {
          unsignedchartime_out=0;

          DS18B20_DQ_OUT;
          DS18B20_DQ_HIGH;
          DS18B20_DQ_LOW;
          _delay_us(600);
          DS18B20_DQ_IN;
          DS18B20_DQ_HIGH;
          _delay_us(100);
          while(DS18B20_DQ_VALUE&&((time_out++)<200));
          _delay_us(400);
          }

          staticvoidDS18B20_WriteByte(unsignedchar_data)
          {
          unsignedchari=0;

          DS18B20_DQ_OUT;
          for(i=0;i<8;i++)
          {
          DS18B20_DQ_LOW;
          _delay_us(2);
          if(_data&0x01)
          {
          DS18B20_DQ_HIGH;
          }
          _data>>=1;
          _delay_us(60);
          DS18B20_DQ_HIGH;
          }
          }

          staticunsignedcharDS18B20_ReadByte(void)
          {
          unsignedchari=0,_data=0;

          for(i=0;i<8;i++)
          {
          DS18B20_DQ_OUT;
          DS18B20_DQ_LOW;
          _delay_us(5);
          _data>>=1;
          DS18B20_DQ_HIGH;
          DS18B20_DQ_IN;
          if(DS18B20_DQ_VALUE)
          {
          _data|=0x80;
          }
          DS18B20_DQ_OUT;
          DS18B20_DQ_HIGH;
          _delay_us(60);
          }

          return_data;
          }

          floatDS18B20_ReadTemperature(void)
          {
          unsignedchartl=0,th=0;
          floatt=0;

          DS18B20_Init();
          DS18B20_WriteByte(0xcc);
          DS18B20_WriteByte(0x44);

          DS18B20_Init();
          DS18B20_WriteByte(0xcc);
          DS18B20_WriteByte(0xbe);

          tl=DS18B20_ReadByte();
          th=DS18B20_ReadByte();
          if((th&0xf8)==0)// 正溫度
          {
          t=((th&0x07)<<4)+((tl&0xf0)>>4)+((tl&0x07)*0.125);
          }
          else// 負(fù)溫度
          {
          t=-55+(((th&0x07)<<4)+((tl&0xf0)>>4)-0x49)+((tl&0x07)*0.125);
          }

          returnt;
          }


          關(guān)鍵詞: AVRDS18B20溫度讀

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();