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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STC12C5A60S2單片機的DS18B20的C程序

          STC12C5A60S2單片機的DS18B20的C程序

          作者: 時間:2016-11-24 來源:網(wǎng)絡 收藏

          最近在搞18B20,發(fā)現(xiàn)其對CPU的不兼容性很高,由于其對時間信號的敏感引起的

          本文引用地址:http://www.ex-cimer.com/article/201611/320752.htm

          由于STC單片機的速度比8051速度快,屬于1個時鐘/機器周期高速單片機。速度快當然是它的優(yōu)點,但對于要移植傳統(tǒng)的8051程序而言,需要修改時序來實現(xiàn)某功能.

          以下程序是ds18b20簡單的驅動程序,其實是在網(wǎng)上Down的,經(jīng)本人稍作修改之后,在STC12C5A60S2中調(diào)試通過的,最后讀溫度返回一個unsigned int,低12位就是溫度數(shù)據(jù)。在主程序里進行運算即可得到實際溫度值。呵呵~~

          void delay_18B20(unsigned int i)
          {
          while(i--);
          }

          void Init_DS18B20(void)
          {
          unsigned char x=0;
          DQ = 1; //DQ復位
          delay_18B20(80); //稍做延時
          DQ = 0; //單片機將DQ拉低
          delay_18B20(800); //精確延時 大于 480us
          DQ = 1; //拉高總線
          delay_18B20(140);
          x=DQ; delay_18B20(200);
          }

          unsigned char ReadOneChar(void)
          {
          uchar i=0;
          uchar dat = 0;
          for (i=8;i>0;i--)
          {
          DQ = 0; // 給脈沖信號
          dat>>=1;
          DQ = 1; // 給脈沖信號
          if(DQ)
          dat|=0x80;
          delay_18B20(40); //40
          }
          return(dat);
          }

          void WriteOneChar(uchar dat)
          {
          unsigned char i=0;
          for (i=8; i>0; i--)
          {
          DQ = 0;
          DQ = dat&0x01;
          delay_18B20(50); //50
          DQ = 1;
          dat>>=1;
          }
          }

          unsigned int ReadTemp(void)
          {
          unsigned char a=0;
          unsigned char b=0;
          unsigned int temp_value=0;

          Init_DS18B20();
          WriteOneChar(0xCC);

          WriteOneChar(0x44);

          delay_18B20(1000);

          Init_DS18B20();
          WriteOneChar(0xCC);
          WriteOneChar(0xBE);

          delay_18B20(1000);

          a=ReadOneChar(); //讀取溫度值低位
          b=ReadOneChar(); //讀取溫度值高位

          temp_value = b<<8;
          temp_value |= a;
          return temp_value;

          }



          評論


          技術專區(qū)

          關閉
          看屁屁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); })();