色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

 

基于FS4412的DS18B20溫度采集編程實現(1-時序分析)

作者:秦老師,華清遠見教育科技集團講師。

一、DS18B20簡介

DS18B20是常用的數字溫度計。DS18B20數字溫度計提供9至12位(可配置)溫度讀數,表明該設備的溫度。

信息通過單總線接口被發送到DS18B20或從DS18B20發出,因此從中央微處理器到DS18B20只有需要一個線(和地線)。

讀,寫和進行溫度轉換所需要的電源,可以由數據線本身來提供,無需外部電源。 由于每個DS18B20含有唯一的序列號,多個DS18B20可以掛載在一條單總線上。這允許在許多不同的地方,放置溫度傳感器。

這個功能是非常有用的,可以應用在包括HVAC環境控制,建筑物內部的溫度感應, 設備或機械,過程監測和控制等領域。

二、DS18B20硬件連接

  
DS18B20引腳圖                                                           DS18B20 原理圖

DS18B20 有三個引腳。根據原理圖可知,DS18B20采用了外部供電的連接方式,而DQ引腳上拉10k電阻。DQ引腳連接在4412芯片的GPK1_1 引腳上面。

GND
DQ 數據線
VDD 電源(可選)

三、DS18B20時序分析

DS18B20是一個單總線,輸入和輸出都是通過DQ引腳,我們需要根據時序圖,不斷的操作DQ這個引腳,實現具體的功能。

(一)ds18b20復位時序和函數實現

通過復位信號,可以檢測DS18B20是否工作正常,并通知DS18B20準備通信。

(1)4412拉低DQ引腳,復位周期開始。

(2)DQ引腳上的低電平保持480us—960us 的時間,然后釋放總線。

(3)4412延時16us—60us等待DS18B20應答。

(4)DS18B20拉低DQ引腳60us—240us,表示應答。

4412讀取DQ引腳電平,如果是低電平,表示初始化完成。

(5)DS18B20應答信號結束后,釋放總線,DQ引腳被上拉電阻拉高,復位周期結束。

實現ds18b20的復位代碼:
        void DS18_Reset()
        {
                  GPK1.PUD = 0;                                       //GPK1_1 禁止上下拉
                  GPK1.CON = (GPK1.CON & ~(0xF << 4)) | 0x1 << 4;   //設置GPK1_1為輸出引腳
                  GPK1.DAT &= ~(0x1 << 1);                                 //設置GPK1_1 輸出‘0’,拉低DQ引腳
                  delay_us(700);                                                                //延時 600us
                  GPK1.DAT |= 0x1 << 1;                                                      //GPK1_1釋放總線
                  GPK1.CON &= ~(0xF << 4);                                             //設置GPK1_1為輸入引腳
                  while(GPK1.DAT & (0x1 << 1));                     //等待DS18B20應答信號 (DQ引腳低電平)
                  while(!(GPK1.DAT & (0x1 << 1)));
                                    //等待DS18B20應答信號結束(DQ引腳高電平)
         }

(二)ds18b20寫時序和函數實現

當我們需要從DS18B20寫數據的時候,必須嚴格DS18B20的寫時序,進行操作。

向DS18B20寫邏輯0操作:

(1)4412拉低DQ引腳,寫周期開始。

(2)DQ引腳保持低電平15us左右。

(3)DQ引腳繼續保持低電平20us--45us。

(4)釋放總線。

向DS18B20寫邏輯1操作:

(1)4412拉低DQ引腳,寫周期開始。

(2)DQ引腳上的低電平保持大于1us后,拉高DQ引腳 ,總共15us。

(3)DQ引腳繼續保持高電平20us—45us

(4)釋放總線。

實現向DS18B20寫入一個字節代碼:

void DS18_Write(unsigned char data)
         {
                  unsigned char i;
                  GPK1.CON = (GPK1.CON & ~(0xF << 4)) | 0x1 << 4;     //設置GPK1_1為輸出引腳
        
                  for(i = 0; i < 8; i++)
                  {
                            GPK1.DAT |= 0x1 << 1;                                          //設置GPK1_1 輸出1
                            delay_us(1);                                  //延時1us
                            GPK1.DAT &= ~(0x1 << 1);                                                //設置GPK1_1 輸出0形成下降沿
                            delay_us(12);                                 //延時12us,大于1us小于15us
                            if(data & 0x1)                                                                //如果數據低位為1
                            GPK1.DAT |= 0x1 << 1;                                     //設置GPK1_1 輸出1
                            delay_us(40);                                                               //延時40us
                            data = data >> 2;                               //數據右移1位
                  }
         }

(三)ds18b20寫時序和函數實現

當我們需要從DS18B20讀數據的時候,必須嚴格DS18B20的讀時序,進行操作。

(1)通過4412拉低DQ引腳,讀周期開始。

(2)DQ引腳上的低電平至少保持1us 的時間,然后釋放引腳。

(3)4412延時幾us(留物理電平反應時間),讀取DQ引腳的數據。

注意:根據圖中MASTER SAMPLES指示,從拉低電平轉換開始,留給物理電平轉換時間,到后4412的對DQ引腳讀取操作應給在15us之內完成。

(4)15us后讀時隙結束時,DQ引腳將通過外部上拉電阻拉回高電平。

4412延時45us等待讀周期結束。

實現向DS18B20讀入一個字節數據代碼:

unsigned char DS18_Read()
         {
                  unsigned char i, Temp = 0;                                                       //初始化接受變量Temp為0
                  for(i = 0; i < 8; i++)
                  {
                            GPK1.CON = (GPK1.CON & ~(0xF << 4)) | 0x1 << 4;  //設置GPK1_1為輸出引腳
                            GPK1.DAT |= 0x1 << 1;                                                 //設置GPK1_1 輸出1
                            GPK1.DAT &= ~(0x1 << 1);                                                        //設置GPK1_1 輸出0,形成下降沿
                            GPK1.DAT |= 0x1 << 1;                                                      //GPK1_1釋放總線
                            GPK1.CON &= ~(0xF << 4);                                           //設置GPK1_1為輸出引腳
                            Temp >>= 1;                                    //接受變量右移1位
                            if(GPK1.DAT & (0x1 << 1))                                                        //讀取DQ引腳,如果DQ為1
                            Temp |= 0x80;                              //接受變量Temp,高位置1
                            delay_us(30);                                   //延時30us
                  }
                  return Temp;
                                          //返回接受變量
         }

主站蜘蛛池模板: 亚洲av中文无码字幕色本草 | 国产亚洲美女精品久久久久 | 无套内谢少妇毛片A片打工皇帝 | 美女视频性感网站黄色 | 欧美精品国产制服第一页 | 精品日产一区二区三区手机 | 肉蒲团从国内封禁到日本成经典 | 亚洲一区欧美 | 国产黄色自拍视频 | xxxx交换夫妇com | 久久久久久自慰出白浆 | 真实国产乱子伦在线视频 | 国产美女A做受大片观看 | 日本BBW丰满牲交片 亚洲欧洲精品A片久久99 | 亚洲VA在线∨A天堂VA欧美VA | 小雪被房东玩的好爽 | 偷窥国产亚洲女爱视频在线 | 亚洲成A人片在线观看久 | 午夜精品久久久久久久久久久久 | 亚洲一区二区三区小说 | 久久成人国产精品免费软件 | 国产偷摄中国推油按摩富婆 | 欧美国产激情18 | 国产成人愉拍精品 | 香蕉久久久久久AV综合网成人 | 玩弄丰满奶水的女邻居 | 在线视频精品一 | 久久性生活视频 | 肉大捧一进一出好爽mba | 国模国模黄丹私拍炮 | 国内精品自国内精品自线 | 摸丰满大乳奶水www免费 | 午夜嘿嘿| 亚洲中文久久精品无码1 | 在线视频亚洲精品 | 中文字幕制服丝袜一区二区三区 | 噜噜噜在线观看免费视频日本 | 乱人伦中文视频在线 | 亚洲性久久久影院 | 日韩精品无码免费专区网站 | 日韩美女乱婬AAA高清视频 |