国产成人精品三级麻豆,色综合天天综合高清网,亚洲精品夜夜夜,国产成人综合在线女婷五月99播放,色婷婷色综合激情国产日韩

當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 基于FS4412的DS18B20溫度采集編程實(shí)現(xiàn)(1-時(shí)序分析)

基于FS4412的DS18B20溫度采集編程實(shí)現(xiàn)(1-時(shí)序分析) 時(shí)間:2018-09-20      來源:未知

一、DS18B20簡介

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

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

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

這個(gè)功能是非常有用的,可以應(yīng)用在包括HVAC環(huán)境控制,建筑物內(nèi)部的溫度感應(yīng), 設(shè)備或機(jī)械,過程監(jiān)測和控制等領(lǐng)域。

二、DS18B20硬件連接

  
DS18B20引腳圖                                                           DS18B20 原理圖

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

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

三、DS18B20時(shí)序分析

DS18B20是一個(gè)單總線,輸入和輸出都是通過DQ引腳,我們需要根據(jù)時(shí)序圖,不斷的操作DQ這個(gè)引腳,實(shí)現(xiàn)具體的功能。

(一)ds18b20復(fù)位時(shí)序和函數(shù)實(shí)現(xiàn)

通過復(fù)位信號(hào),可以檢測DS18B20是否工作正常,并通知DS18B20準(zhǔn)備通信。

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

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

(3)4412延時(shí)16us—60us等待DS18B20應(yīng)答。

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

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

(5)DS18B20應(yīng)答信號(hào)結(jié)束后,釋放總線,DQ引腳被上拉電阻拉高,復(fù)位周期結(jié)束。

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

(二)ds18b20寫時(shí)序和函數(shù)實(shí)現(xiàn)

當(dāng)我們需要從DS18B20寫數(shù)據(jù)的時(shí)候,必須嚴(yán)格DS18B20的寫時(shí)序,進(jìn)行操作。

向DS18B20寫邏輯0操作:

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

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

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

(4)釋放總線。

向DS18B20寫邏輯1操作:

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

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

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

(4)釋放總線。

實(shí)現(xiàn)向DS18B20寫入一個(gè)字節(jié)代碼:

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

(三)ds18b20寫時(shí)序和函數(shù)實(shí)現(xiàn)

當(dāng)我們需要從DS18B20讀數(shù)據(jù)的時(shí)候,必須嚴(yán)格DS18B20的讀時(shí)序,進(jìn)行操作。

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

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

(3)4412延時(shí)幾u(yù)s(留物理電平反應(yīng)時(shí)間),讀取DQ引腳的數(shù)據(jù)。

注意:根據(jù)圖中MASTER SAMPLES指示,從拉低電平轉(zhuǎn)換開始,留給物理電平轉(zhuǎn)換時(shí)間,到后4412的對DQ引腳讀取操作應(yīng)給在15us之內(nèi)完成。

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

4412延時(shí)45us等待讀周期結(jié)束。

實(shí)現(xiàn)向DS18B20讀入一個(gè)字節(jié)數(shù)據(jù)代碼:

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;  //設(shè)置GPK1_1為輸出引腳 
                            GPK1.DAT |= 0x1 << 1;                                                 //設(shè)置GPK1_1 輸出1
                            GPK1.DAT &= ~(0x1 << 1);                                                        //設(shè)置GPK1_1 輸出0,形成下降沿 
                            GPK1.DAT |= 0x1 << 1;                                                      //GPK1_1釋放總線 
                            GPK1.CON &= ~(0xF << 4);                                           //設(shè)置GPK1_1為輸出引腳 
                            Temp >>= 1;                                    //接受變量右移1位 
                            if(GPK1.DAT & (0x1 << 1))                                                        //讀取DQ引腳,如果DQ為1
                            Temp |= 0x80;                              //接受變量Temp,高位置1
                            delay_us(30);                                   //延時(shí)30us
                  }
                  return Temp;
                                          //返回接受變量
         }

 
 

上一篇:Android GPS定位步驟

下一篇:什么是嵌入式系統(tǒng)?

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部