日本a√视频在线,久久青青亚洲国产,亚洲一区欧美二区,免费g片在线观看网站

        <style id="k3y6c"><u id="k3y6c"></u></style>
        <s id="k3y6c"></s>
        <mark id="k3y6c"></mark>
          
          

          <mark id="k3y6c"></mark>

          新聞中心

          ds18b20c程序與匯編程序

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

          ds18b20 c

          本文引用地址:http://yuyingmama.com.cn/article/171250.htm

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

          typedef unsigned char byte;
          typedef unsigned int word;

          //延時(shí)
          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 總線上讀取一個(gè)字節(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 總線上寫一個(gè)字節(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:

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

          DQBITP1.7

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

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


          上一頁 1 2 3 下一頁

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

          評(píng)論


          相關(guān)推薦

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

          關(guān)閉