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

          新聞中心

          ds18b20匯編程序與c程序

          作者: 時間:2011-05-01 來源:網(wǎng)絡(luò) 收藏

          c

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

          //DS1820 C51 子
          //這里以11.0592M晶體為例,不同的晶體速度可能需要調(diào)整延時的時間
          //sbit DQ =P2^1;//根據(jù)實(shí)際情況定義端口

          typedef unsigned char byte;
          typedef unsigned int word;

          //延時
          void delay(word useconds)
          {
          for(;useconds>0;useconds--);
          }

          //復(fù)位
          byte ow_reset(void)
          {
          byte presence;
          DQ = 0; //pull DQ line low
          delay(29); // leave it low for 480us
          DQ = 1; // allow line to return high
          delay(3); // wait for presence
          presence = DQ; // get presence signal
          delay(25); // wait for end of timeslot
          return(presence); // presence signal returned
          } // 0=presence, 1 = no part

          //從 1-wire 總線上讀取一個字節(jié)
          byte read_byte(void)
          {
          byte i;
          byte value = 0;
          for (i=8;i>0;i--)
          {
          value>>=1;
          DQ = 0; // pull DQ low to start timeslot
          DQ = 1; // then return high
          delay(1); //for (i=0; i3; i++);
          if(DQ)value|=0x80;
          delay(6); // wait for rest of timeslot
          }
          return(value);
          }

          //向 1-WIRE 總線上寫一個字節(jié)
          void write_byte(char val)
          {
          byte i;
          for (i=8; i>0; i--) // writes byte, one bit at a time
          {
          DQ = 0; // pull DQ low to start timeslot
          DQ = val0x01;
          delay(5); // hold value for remainder of timeslot
          DQ = 1;
          val=val/2;
          }
          delay(5);
          }

          //讀取溫度
          char Read_Temperature(void)
          {
          union{
          byte c[2];
          int x;
          }temp;

          ow_reset();
          write_byte(0xCC); // Skip ROM
          write_byte(0xBE); // Read Scratch Pad
          temp.c[1]=read_byte();
          temp.c[0]=read_byte();
          ow_reset();
          write_byte(0xCC); //Skip ROM
          write_byte(0x44); // Start Conversion
          return temp.x/2;
          }

          :

          程序僅適合單個DS18B20和51單片機(jī)的連接,晶振為12MHZ左右
          DQ:DS18B20的數(shù)據(jù)總線接腳
          FLAG1:標(biāo)志位,為1時表示檢測到DS18B20
          TEMPER_NUM:保存讀出的溫度數(shù)據(jù)
          TEMPER_LEQU36H
          TEMPER_HEQU35H

          DQBITP1.7

          ; DS18B20初始化程序
          ;//*****************************************//
          INIT_1820:
          SETBDQ
          NOP
          CLRDQ
          MOVR0,#06BH
          TSR1:
          DJNZR0,TSR1; 延時
          SETBDQ
          MOVR0,#25H
          TSR2:
          JNBDQ,TSR3
          DJNZR0,TSR2
          LJMPTSR4; 延時
          TSR3:
          SETBFLAG1; 置標(biāo)志位,表示DS1820存在
          LJMPTSR5
          TSR4:
          CLRFLAG1; 清標(biāo)志位,表示DS1820不存在
          LJMPTSR7
          TSR5:
          MOVR0,#06BH
          TSR6:
          DJNZR0,TSR6; 延時
          TSR7:
          SETBDQ
          RET
          ;//*****************************************//

          ; 重新寫DS18B20暫存存儲器設(shè)定值
          ;//*****************************************//
          RE_CONFIG:
          JBFLAG1,RE_CONFIG1; 若DS18B20存在,轉(zhuǎn)RE_CONFIG1
          RET
          RE_CONFIG1:
          MOVA,#0CCH; 發(fā)SKIP ROM命令
          LCALLWRITE_1820
          MOVA,#4EH; 發(fā)寫暫存存儲器命令
          LCALLWRITE_1820
          MOVA,#00H; TH(報(bào)警上限)中寫入00H


          上一頁 1 2 3 下一頁

          關(guān)鍵詞: 程序 匯編 ds18b20

          評論


          相關(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); })();