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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > DS18B20 1602液晶顯示、DS18B20時序太難調(diào)了

          DS18B20 1602液晶顯示、DS18B20時序太難調(diào)了

          作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
          注意:無論寫時隙,還是讀時隙,都以主機驅(qū)動數(shù)據(jù)線(DQ)為低電平開始。數(shù)據(jù)線的下降沿觸發(fā)從機內(nèi)部的延時電路,使之與主機取得同步!!注意主從機采樣時間!

          復(fù)位脈沖

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

          一開始錯誤出現(xiàn)在復(fù)位脈沖。

          while(PIND&0x01); //正確!!等待被拉低。。18B20拉低60-240 us


          我寫出這樣子//while((PIND&0x01)==0);

          XXXXXXXXXXX這樣寫是錯誤的XXXXXXXXXXXXXX
          //讀出來的是255(0xff)

          /////////////////
          // 8Mhz晶振
          //////////////////
          #include
          #include "1602.c"

          #define uchar unsigned char
          #define uint unsigned int

          #define DQ_L PORTD&=~(1)
          #define DQ_H PORTD|=(1)

          #define DQ_IN DDRD&=~(1)
          #define DQ_OUT DDRD|=(1)

          void delay_us(uint n)
          {

          uint t;
          for(t=0;t asm("nop");
          }

          void delay_ms(uint n)
          {
          uint i,j;
          for(i=0;i for(j=0;j<1141;j++);
          }

          void reset(void)
          {

          DQ_OUT;
          DQ_H;
          DQ_L;
          delay_us(680); //大約480-960us
          DQ_H;
          DQ_IN;
          delay_us(20); //等待15-60us

          while(PIND&0x01); //等待被拉低。。18B20拉低60-240 us
          //while((PIND&0x01)==0);XXXXXXXXXXX這樣寫是錯誤的XXXXXXXXXXXXXX
          //讀出來的是255(0xff)
          DQ_OUT;
          DQ_H;
          delay_us(300); //等待180-400us

          }

          void write(uchar d) //先發(fā)低位
          {
          uchar i;
          DQ_OUT;
          for(i=0;i<8;i++)
          {
          DQ_L;
          asm("nop");
          asm("nop");
          asm("nop");

          if(d&(1< {
          DQ_H;
          delay_us(80);
          }
          else
          {
          DQ_L;
          delay_us(80);
          }

          DQ_H;
          }
          }
          uchar read() //低位在先
          {
          uchar i,d=0;


          for(i=0;i<8;i++)
          {
          DQ_L; //高到低跳變
          asm("nop");
          asm("nop");
          asm("nop");

          DQ_H;
          DQ_IN;

          if(PIND&0x01)
          d|=(1< else
          d&=~(1<
          delay_us(80);

          DQ_OUT;
          DQ_H;
          }

          return d;
          }

          uchar gettemp()
          {
          uchar t1,t2;
          uchar te;

          reset();
          write(0xcc); //跳過rom
          write(0x44); //開始轉(zhuǎn)換
          delay_ms(800); //延時800ms


          reset();
          write(0xcc); ////跳過rom
          write(0xbe); //發(fā)出讀命令
          t1=read(); //低字節(jié)
          t2=read();

          te=(t1>>4)+(t2<<4);

          return te;


          }
          int main()
          {
          uchar i,tt;
          uchar temp[4];

          init_1602();

          while(1)
          {
          tt=gettemp();
          //tt=0XFE;
          temp[0]=tt/100+0;
          temp[1]=tt%100/10+0;
          temp[2]=tt%10+0;
          temp[3]=0;


          LCD_write_string(1,1,"temperature");
          LCD_write_string(1,0,temp);
          }

          }

          RESET AND PRESENCE PULSES

          READ/WRITE TIME SLOTS



          關(guān)鍵詞: DS18B201602液晶顯示時

          評論


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