色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

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

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

          復(fù)位脈沖

          本文引用地址:http://cafeforensic.com/article/201611/316379.htm

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

          while(PIND&0x01); //正確?。〉却焕?。。18B20拉低60-240 us


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

          XXXXXXXXXXX這樣寫是錯(cuò)誤的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這樣寫是錯(cuò)誤的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); //延時(shí)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



          評論


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

          關(guān)閉