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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于DS18B20與TMS320LF2407A的溫度測量系統(tǒng)

          基于DS18B20與TMS320LF2407A的溫度測量系統(tǒng)

          作者: 時間:2012-07-07 來源:網(wǎng)絡(luò) 收藏

          #define PIN_LEAVE() {DATA_PORT=DATA_PORT(~DATA_OUT)|DATA_BIT;}
          /* 傳感器復(fù)位程序 */
          unchar reset(void)
          { unchar retval;
          unint loopindex="0";
          PIN_HIGH();
          nop();nop();nop();nop(); /* 延時1us*/
          PIN_LOW();
          for(loopindex=0;loopindex213;loopindex++){;} /*置總線為低電平并保持至少480us */
          PIN_HIGH();
          for(loopindex=0;loopindex26;loopindex++){;} /*等電阻拉高總線并保持15-60us */
          PIN_LEAVE(); /*接受應(yīng)答信號*/
          nop();
          if((DATA_PORT DATA_BIT) == 0x0000)
          { retval = 0; }
          else
          { retval = 1; }
          PIN_HIGH();
          for(loopindex=0;loopindex106;loopindex++){;} /*延時60-240us */
          return(retval); /*返回應(yīng)答信號 */
          }
          /* 從傳感器中讀一個字節(jié) */
          void read_byte(unchar *ReadByte)
          {
          int i;
          unchar temp="0";
          unint loopindex="0";
          PIN_HIGH();
          for(i=0;i8;i++)
          {
          temp="temp">>1;
          PIN_LOW();
          nop();nop();nop();nop(); /*延時2us */
          nop();nop();nop();nop();
          PIN_HIGH();
          for(loopindex=0;loopindex6;loopindex++){;} /* 延時14us */
          PIN_LEAVE();
          nop();
          if((DATA_PORT DATA_BIT) == 0x0000)
          { temp="temp" 0x7F; }
          else
          { temp="temp" | 0x80; }
          PIN_HIGH();
          for(loopindex=0;loopindex26;loopindex++){;} /* 延時60us */
          }
          *ReadByte=temp;
          return;
          }
          /* 將讀得的溫度轉(zhuǎn)化為十進(jìn)制 */
          float transform(unchar *T)
          {
          unchar temp="0";
          float temprature="0";
          temp=temp|(*(T+1)8);
          temp=temp|*T;
          if((temp0x0F800)==0x0F800)
          { temprature="0-"((~temp)+1)*0.0625; }
          else
          { temprature="temp"*0.0625; }
          return(temprature);
          }
          /* 讀取溫度主函數(shù),返回十進(jìn)制溫度數(shù) */
          float read_temp()
          {
          Unchar buff[2];
          float temprature="0";
          unint loopindex="0";
          while (reset()==1){}; /* 復(fù)位等待從機應(yīng)答 */
          write_byte(0xCC); /* 忽略ROM匹配 */
          write_byte(0x44); /* 發(fā)送溫度轉(zhuǎn)化命令 */
          for(loopindex=0;loopindex65535;loopindex++){;} /* 延時300ms,等待數(shù)模轉(zhuǎn)換 */
          for(loopindex=0;loopindex65535;loopindex++){;}
          while(reset()==1){}; /* 再次復(fù)位,等待從機應(yīng)答 */
          write_byte(0xCC); /* 忽略ROM匹配 */
          write_byte(0xBE); /* 發(fā)送讀溫度命令 */
          read_byte(buff); /* 讀出溫度低8位 */
          read_byte(buff+1); /* 讀出溫度高8位 */
          temprature="transform"(buff);
          PIN_HIGH(); /* 釋放總線 */
          return(temprature);
          }

            4 結(jié)束語

            是一款非常優(yōu)秀的單總線數(shù)字式傳感器。硬件設(shè)計簡單,運行可靠。通過分析C語言編譯后的匯編語言可以很明確的計算出軟件延時的時間,從而滿足單線總線通訊的時序要求,從而可以出色的完成DSP通訊的軟件設(shè)計。

            5 本文創(chuàng)新點有兩個:

            1、通過C編譯器編譯出來的相應(yīng)的C語言的延時程序,從而得到其對應(yīng)的匯編語言,再通過定時器計時,能夠知道單指令周期的時間,從而能夠精確的計算出軟件延時程序的延時時間。

            2、通常都是與單片機配合使用的,而本文則詳細(xì)的介紹了DS18B20與DSP的結(jié)合使用方法,其區(qū)別主要是在端口的操作上和延時的控制上。


          上一頁 1 2 下一頁

          關(guān)鍵詞: DS18B20 TMS320LF2407A 溫度測量

          評論


          相關(guān)推薦

          技術(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); })();