


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、手把手教你做 DS18B20和SPCE061A的驅動程序一一 Mz出品.txt你無法改變別人,但你可以 改變自己;你無法改變天氣,但你可以改變心情;你無法改變生命長度,但你可以拓展它的 寬度。 手把手教你做 DS18B20和SPCE061A的驅動程序 Mz出品1 DS18B20 簡介DS18B20是DALLAS公司生產的一線制數字溫度傳感器,具有3引腳TO- 92小體積封裝形式;溫度測量范圍為 55C+ 125,電源供電范圍為 3V5.5V ;C 可編程為9位12位 數字表示,測溫分辨率可達 0.0625 C,被測溫度用符號擴展的16位數字量方式串行輸出;其工作電源既可在遠端引入,也可采用寄生
2、電源方式產生;多個DS18B20 可以并聯到 3 根(VDD DQ和GND或2根(利用DQ線供電、GND線上,CPU只需一根端口線就能和總線 上的多個串聯的 DS18B20 通信,占用微處理器的端口較少,可節省大量的引線和邏輯電路。 以上特點使 DS18B20 非常適用于遠距離多點溫度檢測系統。1.1 DS18B20 內部結構DS18B20的管腳排列及封裝形式如圖 2.1所示,DQ為數字信號輸入/輸出端;GND為電源地; VDD為外接供電電源輸入端(在寄生電源接線方式時接地,見),NC表示無連接。DS18B20內部結構如圖2.2所示,主要由4部分組成:64位ROM溫度傳感器、非易失性 存儲的溫
3、度報警觸發器 TH和TL、配置寄存器。此主題相關圖片如下:主控制MCU和 DS18B20的通信需要經過一線制的接口DQ DS18B20內部有一個64位的ROM在出芯片出廠前已用激光在 ROMi中刻錄上唯一的一個序列號 (包含產品型號、ID號以及CRC 校驗數值)。在一線制接口情況下在 ROM操作未定建立之前不能使用存儲器和控制操作,MCU必須首先提供五種 ROM操作命令之一:1、Read ROM讀ROM) 2、Match ROM匹配ROM) 3、 Search ROM搜索 ROM) 4、Skip ROM跳過 ROM; 5、Alarm Search(告警搜索)。這些命令 對每一器件的64位ROM
4、部分進行操作,如果在總線上有許多器件,那么可以挑選出一個特 定的器件或者給總線上的主控MCU旨示存在多少器件及其類型;在成功地執行了 ROM操作序列之后可使用存儲器和控制操作,然后主機可以提供六種存儲器和控制操作命令之一,以此 對總線上的某一個 DS18B20進行操作,如啟動測溫轉換、讀取數據等。Memory and Control Logic 部分實際上是接受由主控 MCU發送過來的存儲器和控制操作(前 提是MCUB完成對DS18B20的ROM操作),MCU寸DS18B20的操作基本上都是通過該邏輯部分 對緩沖存儲器(Scratchpad Memory)進行操作,DS18B20的內部邏輯會將
5、 MCI在緩沖存儲器 上的操作觸發對測溫轉換啟動、告警溫度設置操作、數據讀取等進行響應,以完成即定的操 作。告警觸發器中的告警溫度設置值: TH和TL,以及DS18B20配置值(Configuration Register ), 都保存在共3個Byte的EEPRO當中,可以通過存儲器和控制操作可以將 EEPRO中的設置值 導入緩沖存儲器當中,或者將寫入在緩沖存儲器中的設置值載入EEPRO當中。1.1.1 64位 ROM每一 DS18B20包括一個唯一的 64位長的ROM編碼,開始的 8位是一線制產品系列編碼( DS18B20 編碼是 0x28) 接著的 48 位是唯一的系列號,最后的 8 位是
6、前面 56 位數據的 CRC DS18B20的ROM排布情況見圖 2.3。64位ROM和ROM操作控制部分允許 DS18B20作 為一個一線制的器件工作,在DS18B20的64位ROM成正確的操作前,DS18B20控制部分的功能(六種存儲器和控制操作命令)是不可訪問的。ROM操作協議流程圖如圖 2.4,一線制總線主機必須首先操作五種ROM操作命令之一:1、Read ROM讀ROM) 2、Match ROM(匹配ROM) 3、Search ROM(搜索 ROM) 4、Skip ROM(跳過 ROM) 5、Alarm Search (告警搜索)。 在成功地執行了 ROM操作序列之后DS18B20特
7、定的功能便可訪問,然后總線上主機可提供六 個存儲器和控制功能命令之一。可以從流程圖中看出,DS18B20在一線制總線中傳遞其ROM序列時,是按照從低位到高位的順序進行的,即從64位ROM中的Family code的最低位開始傳, 最后傳遞的是 CRC校驗值的 最高位。DS18B20的CRC校驗采用8位的CRC校驗,CRC勺等效多項式如:CRC校驗是對64位ROM中的前56位數據進行校驗的(按從低位到高位的順序),DS18B20利用上述的公式生成 8位的CRC校驗值,總線的主控 MCI可以在讀取64位ROM時獲取該值,主 控MCI可以利用該值確認數據傳輸的正確性。DS18B20的CRC校驗公式利
8、用圖形表示如下:CRC的校驗計算會首先將 64位ROM中的Family code的最低位輸入,按照從低位到高位的順 序依次輸入,當最后一位(48位長度的序列號的最高位)輸入后,會得到8位的CRC校驗值。主控MC可按照此方法將讀取回來的64位ROM數據進行CRC校驗值生成(利用前56位數據),如果最后再將8位的CRC校驗值作為輸入的,并且計算出來的CRC校驗值和讀取獲得的 CRC值相符的情況下,最終結果將為 0。DS18B20的緩沖存儲器讀取時, DS18B20也會針對緩沖存儲器的數值生成 8位的CRG校驗值, 只不過在主控 MCU賣取緩沖存儲器時該值是以第 9個Byte數據被主控 MCU賣取;
9、DS18B20在 緩沖存儲器CRC校驗值是對其前面 8位Byte的緩沖存儲器數值進行 CRC校驗生成的,所依照 的公式和順序和 ROM當中的CRC校驗值生成規則一樣。1.1.2 DS18B20 緩沖存儲器( Scratchpad Memory )DS18B20的內部存儲器除了前面所述的64位ROM外,還有一個 9字節長度的緩沖存儲器(Scratchpad Memory ),以及3字節的EEPROM如圖2.6 為緩沖存儲器和 EEPROM非易失 性存儲器)的示意圖。緩沖存儲器的存在,有助于在一線制總線通訊時保證數據的完整性;主控MCI可以能過存儲器命令讀取緩沖存儲器的 9 個字節數據,或者寫入。
10、當數據被校驗通過后;控制命令:復制 緩沖存儲器命令,把緩沖存儲器中的一些數據(Byte2、3、4)送入EEPRO當中。緩沖存儲器中的 Byte0、 1 數據為測得的溫度信息, Byte2、 3個分別為告警觸發器的TH、 TL告警溫度值(EEPRO中的設置值)的拷貝,接下來是配置寄存器值的拷貝(真正起作用的配 置值在對應的EEPRO當中);Byte57為系統保留,最后一個Byte數據為CRC校驗。緩沖存儲器中的 Byte4為DS18B20的配置寄存器(Configuration Register)值的拷貝,真正起作用的值存放在EEPROM當中,可以利用復制緩沖存儲器命令將緩沖存儲器中的值載入EE
11、PRO當中,以使新的設置值生效。DS18B20的配置寄存器可以由主控MCI進行設置,以選擇不同的溫度測量有效位數,并且在選擇不同位數的溫度測量有效值時也會直接影響轉換的 速度。圖 2.7 為配置寄存器的示意圖:Bit04 :寫入時可忽略,在讀時每一個位的值呈現為 1;Bit7 :寫入時可忽略,該位在讀取時始終為 0;R1、R0:測溫有效位數選擇位,出廠后的默認值為R0=R仁1,即選擇有效表示位數為12位。Configuration Register中的R1、R0不同設置值時,對應的不同配置情況如下表所示:注: Thermometer Resolution 表示測溫結果表示的有效數據位數。DS1
12、8B20為直接數字溫度傳感器,其測量的溫度值可以配置為9位、10位、11位或12位有效值表示, 廠商的默認配置為 12位有效值; 對應的分辨率分別為:0.5°C、 0.25°C、 0.125°C、0.0625 ° C。溫度值保存在緩沖寄存器中的前ByteO和Byte1,以16位的符號擴展二進制補碼形式表示。下圖 2.8為DS18B20的溫度值表示,而為 12位有效溫度值的對照表。當配置為 12 位有效時, 2 個 Byte 當中的共 12 個有效值表示位均是有效的;而當配置為 10 位有效時,最低的兩位數據位是無效的;其它的配置類似。此主題相關圖片如下:
13、*DS18B20在上電后,緩沖存儲器中的值為0550h,即為85° C1.2 DS18B20操作流程DS18B20的一線制總線要求如下的操作流程:1 , 初始化;2, ROM 操作命令;3,存儲器和控制操作命令;4,處理/ 數據。主控MCU寸DS18B20的每一次完整的操作都應遵循上述的流程進行操作。1.2.1 初始化一線制總線上的所有處理都從初始化開始,初始化包括主控MCI發出的總線復位信號(Reset Plus ),以及從器件(本文指DS18B20發出存在應答信號(Presenee Plus )。存在應答信號讓主控 MCI知道總線上存在 DS18B20器件,并且從器件已準備好接受
14、主控MCU的操作。1.2.2 ROM操作指令及流程一旦完成初始化后,主控MCI便可以發出對 DS18B20的6個ROM操作命令之一,所有ROM操作命令均為8位長。ROM操作命令的操作流程請參考前 面的圖 2.4 ,這些命令的描述如下:Read ROM (讀 ROM 33h此命令允許總線的主控 MCU讀DS18B20的8位產品系列編碼、唯一的48位序列號以及 8位 的CRC此命令只能在總線上僅有一個DS18B20的情況下可以使用,如果總線上存在多于一個的從屬器件,那么當所有從片企圖同時發送時將發生數據沖突的現象,漏極開路會產生線 和的結果。Match ROM (匹酉己 ROM 55h匹配ROM命
15、令,即以64位的ROM數據序列和總線上的多個DS18B20器件進行匹配(當然只可能有一個器件和主控 MCI發出的匹配RO嗽據相匹配),相當于總線主控MCU寸多點總線上 特定的DS18B20尋址,只有和64位ROM序列嚴格相符的 DS18B20才能對后繼的存儲器操作 命令做出響應,所有和 64位ROM序列不符的從片將等待復位脈沖。此命令在總線上有單個 或多個器件的情況下均可使用。Skip ROM (跳過 ROM CCh在單點總線系統中,通過此命令允許總線上的主控MCI不提供64位ROM編碼而訪問存儲器操作,以此來節省時間;如果在總線上存在多于一個的從屬器件,而且在Skip ROM 命令之后發出讀
16、命令,那么由于多個從片同時發送數據會在總線上發生數據沖突,漏極開路下拉會 產生線和的效果。Search ROM (搜索 ROM FOh當系統開始工作時總線上的主控MCI可能不知道總線上的從器件個數或者不知道其64位ROM編碼,搜索ROM命令允許總線主機使用一種排除查詢的方法來識別總線上所有從片的64位ROM編碼;有關搜索 ROM勺具體操作流程,可以參考DS18B20器件的數據手冊,從該手冊可以獲取詳細的操作說明。Alarm Search (告警搜索) ECh此命令的流程和搜索 ROM命令相同,但是僅在最近一次溫度測量出現告警的情況下DS18B20才對此命令做出響應。告警的條件定義為溫度高于TH
17、或低于TL,只要DS18B20 一上電,告警條件就保持在設置狀態,直到另一次溫度測量顯示出非告警值或者改變TH 或 TL 的設置,使得測量值再一次位于允許的范圍之內,貯存在EEPROM內的觸發器值用于告警。1.2.3 存儲器操作指令及流程在總線上的主控MCU完成ROM操作命令后,主控MCU便可以對總線上的 DS18B20進行存儲器操作了(存儲器操作包括存儲器操作命令和控制操作 命令);存儲器操作命令有 6 個,描述如下:寫緩沖存儲器 Write Scratchpad 4Eh此命令將后面跟著的數據寫至 DS18B20 的緩沖存儲器, 從地址 2 開始接著寫的 3 個字節數據 將被保存在緩沖存儲器
18、地址 2 到 4 之中;發出一個復位( Reset Plus )便可在任何時刻終止 寫操作。讀緩沖存儲器 Read Scratchpad BEh 此命令讀緩沖存儲器的內容, 讀開始于字節 0 并繼續經過緩沖存儲器, 直至第 9個字節( Byte 8) CRC被讀出為止。主控 MCI可以在任何時候發出總線復位信號以中止讀操作。復制緩沖存儲器 Copy Scratchpad 48h此命令把緩沖存儲器中的Byte2、Byte3和Byte4中的數據復制入 DS18B20的EEPRO存儲器,即把溫度觸發器字節(高溫告警溫度值TH和低溫告警溫度值 TL)載入EEPROM另外也會將緩沖存儲器中的 Confi
19、gurationRegister的映射字節(Byte4 )載入EEPRO當中;這樣,設置才會真正的生效。 如果總線主機在此命令之后, 只要 DS18B20 正忙于把緩沖存儲器復制入 EEPRO M它就會在總線上輸出 0 ;當復制過程完成之后它將返回1。如果由從器件采用寄生電源供電,總線主控 MCI在發出此命令之后必須能立即強制上拉10mS以上。啟動溫度轉換 Convert T 44h此命令開始溫度轉換,不需要另外的數據。溫度變換被執行后,DS18B20便保持在空閑狀態,如果總線主控 MCI在此命令之后發出讀操作, 那么只要DS18B20正忙于進行溫度變換它將在 總線上輸出 0,當溫度變換完成時
20、它便返回 1。重新調出 EEPROM Recall E2 B8h此命令把貯存在EEPRO中溫度觸發器的值以及配置寄存器的值重新調至緩沖存儲器,這種重新調出的操作在對 DS18B20上電時也自動發生,因此只要器件一接電緩沖存儲器內就應該有 有效的數據可供使用。在此命令發出之后,對于總線上主控MCI所發出的第一個讀數據時間片,從器件都將輸出其忙的標志: 0 =忙、 1 =準備就緒。讀供電狀態 Read Power Supply B4h 對于在此命令送至 DS1820 之后所發出的第一讀出數據的操作,從器件都會給出其電源方式 的信號: 0 =寄生電源供電、 1 =外部電源供電。注:1:溫度轉換從啟動
21、到完成最多需要750mS(即tconv )時間;在接收到溫度變換命令之后,如果器件未從 VDD引腳取得電源(即使用寄生電源方式供電),那么DS18B20的DQ引線 必須至少保持 tconv 時長的高電平以提供變換過程所需的電源;這樣在溫度轉換命令發出之 后,至少在此期間內單線總線上不允許發生任何其他的動作。2:在總線復位信號之前, 3 個字節的數據必需寫入。3 :在接收到復制緩沖存儲器的命令以后,如果器件沒有從VDD引腳取得電源(即使用寄生電源方式供電),那么DS18B20的DQ引腳必須至少維持10ms的高電平,以便提供復制過程 中所需的電源;這樣在復制緩沖存儲器命令發出之后,至少在這一期間之
22、內總線上不允許發 生任何其他的動作。1.3 一線制總線的基本時序在對DS18B20進行操作時,在一線制總線上只會有以下的幾種基本的時序, 所有的控制操作、 數據/ 命令傳輸都是用這幾種基本時序進行組合, 在總線 上的單獨的DQ線上體現。基本的時序有:1 , 總線復位信號( Reset Plus );2, 從器件存在應答信號( Presence Plus );3, 寫操作( Write Time Slots ),包括寫 1 和寫 0;4, 讀操作( Read Time Slots ),包括讀 1 和讀 0;1.3.1 復位和存在應答信總線復位信號 (Reset Plus )是每一次主控 MCU和
23、從器件進行操作的開始信號,由主控 MCI發出;而存在應答信號(Presenee Plus )是主控MCI確認總線上是否有從器件或者從器件是否準備好的根據,由主控MCU從總線上獲取(即由從器件發出該信號) 。實際上, 在一線制總線上, 總線復位信號總是會有存在應答信號相配對的; 也就是當主控 MCU 發出總線復位信號后,從器件如果工作在正常狀態會緊跟著回送一個存在應答信號。 總線復位信號和存在應答信號的時序圖如圖 2.12 所示:一線制總線的DQ線在平常狀態下會由上拉電阻拉為高電平,當主控MCI在DQ線上輸出一個持續最小 480 微秒最大 960 微秒的低電平,則從器件認定此信號為總線復位信號(
24、ResetPlus);在復位信號恢復高電平 1560微秒之后,從器件(DS18B20將DQ線拉至低電平,并 維持最小 60 微秒最長 240 微秒的時間,即為存在應答信號。1.3.2 寫操作(Write Time Slots )DS18B20的一線制總線的寫操作( Write TimeSlots ,在有的資料當中譯為寫時間片)包含兩種:寫 1 操作、寫 0操作;總線上的寫操作由 主控MCU各DQ線從高電平拉到低電平開始,寫操作最少時間為60微秒,兩個連續的寫操作之間最少要間隔1微秒的(此期間主控 MCI釋放DQ線,由上拉電阻將 DQ線拉至高電平)。 在DQ線發生下降沿15微秒后,DS18B20
25、開始對DQ線采樣;如果此時 DQ線被主控MCI拉至 高電平,則寫1操作即發生;如果 DQ線仍保持低電平,則寫 0操作即發生。對于主控MCU在進行寫1操作時,在DQ線上輸出低電平后(即 DQ線的下降沿后),必需在15微秒之內釋放 DQ線由上拉電阻上拉至高電平或者由主控MCU俞出高電平在 DQ線上。在進行寫0操作時,主控 MCU將DQ線拉至低電平,保持至寫0操作完成(60微秒之內)。圖 2.13 中表現了寫 1 操作和寫 0操作的時序圖。1.3.3 讀操作(ReadTime Slots )主控 MCU寸 DS18B20的讀操作(Read Time Slots,在有的資料中譯為讀時間片)發生在一些約
26、定的命令之后,讀操作起始于主控 MCU各DQ線由 高電平拉至低電平,并最少將該低電平保持 1微秒;有效的DS18B20的數據將在DQ線發生下 降沿后15微秒之內送到 DQ線上,這時主控 MCI必、需釋放DQ線。在讀操作結束后,DQ線必需被線上的上拉電阻拉至高電平。 每一個讀操作時間至少為 60微秒, 而連續的兩個讀操作之 間必需間隔 1 微秒以上。主控MU(在進行讀操作時,需要在DQ線下降沿后的15微秒里的最后時刻采樣,以讀取正確的數據。圖 2.13 中表示了讀操作的時序圖。2 DS18B20 和 SPCE061A勺連接2.1 DS18B20 的供電方式DS18B20可以接受兩種供電方式,一為
27、DQ線寄生電源供電,一為直接由VDD供電;這兩種供電方式的接線圖分別如圖 3.1 和圖 3.2 所示:當采用DQ線寄生電源供電方式時,在一些對DS18B20的命令操作上會有一些較特殊的要求,在前面的小節中都作了一定的介紹,本文不作詳述,更多詳細內容請參考DS18B20的數據手nrt冊。本文所介紹的接口程序計是以 DS18B20采用直接的VDD供電方式,即采用圖3.2上所示的供 電方式;而 SPCE061A單片機的端口電源選擇為 3.3V , DS18B20的供電亦選擇為 3.3V ;當然 都選擇為5V供電也是可以的。2.2 DS18B20 和 SPCE061A勺連接依據本文所述的方案所采用的供
28、電方式,除了連接好DS18B20的電源外,DS18B20和 SPCE061A的連接只需要一根數據線(DQ即可;在此,將SPCE061A勺IOB15端口作為連接 DQ線的I/O端口,和DS18B20的DQ線直連,另還需要在 DQ線上拉一個5K歐的電阻到電源。3 接口程序設計3.1 接口程序架構設想DS18B20和SPCE061A的接口程序應包含兩個層次的內容:1、針對于和 DS18B20的硬件接口的有關基本時序的底層驅動;2、基于底層驅動的使用功能函數。這樣設計的好處是可以將和硬件相關的時序操作放置在單獨的底層驅動里面,提供初始化操作、總線復位及應答、寫1操作、寫0操作、讀DQ線、以及時序延時程
29、序;這樣,當用戶需要修改硬件配置時(如改換數據端口、系統時鐘頻率等)只需要對這塊的代碼作簡單的修改 即可。而在DS18B20的使用,如測量溫度、設置告警溫度值等操作,都是基于前面所述的基本時序 操作組合而成的,不同的用戶、不同的使用方法會有不同的功能函數設計,而基本的時序操 作是不變的;所以將使用功能函數單獨設計出來,也便于程序的移值、功能擴展。圖4.1為DS18B20和SPCE061A接口程序的架構圖:3.2 基本時序控制程序底層驅動程序主要包含兩方面的內容:1 , 為考慮可移值性、兼容性而附加的輔助性程序;2, 基本時序控制程序。下面將這兩大部分的程序設計進行介紹。3.2.1 輔助性程序設
30、計首先,為了將底層驅動程序設計成為方便于更改硬件接口,具備良好兼容性的程序,在驅動 程序編寫前完成如下的定義:.DEFINEP_IOA_Dir0x7002.DEFINEP_IOA_Attrib0x7003.DEFINE P_IOA_Latch0x7004.DEFINEP_IOB_Data0x7005.DEFINEP_IOB_Buffer0x7006.DEFINEP_IOB_Dir0x7007.DEFINEP_IOB_Attrib0x7008.DEFINEP_SystemClock0x7013/ 以下重復定義用于端口的定義,如用戶需要針對自用的設計選擇端口時,可以更改/ 以下宏定義中的定義即可P
31、_IOB_DataP_IOB_BufferP_IOB_DirP_IOB_Attrib.DEFINE Port_Data.DEFINE Port_Buffer.DEFINE Port_Dir.DEFINE Port_AttribM_DQ用于定義具體連接 DS18B20的DQ線的端口.DEFINE M_DQ 0x8000/由于DS18B20的驅動程序需要修改 CPU主頻,為了讓用戶設用 DS18B20的API函數后,能/恢復到原來的系統時鐘、CPU主頻設置,用戶可以在下面的常量R_SystemClock中定義/ 用戶設計需要的值.DATAR_SystemClock:/buffer of save.
32、DW 0x0018 the system clock在上面的代碼當中,對所使用的端口( IOB 端口)進行了重復的定義,這樣可以在后面的時 序操作程序當中,對所定義的 Port_Data 之類的重定義進行操作;當用戶需要修改硬件端口 時,如改由IOA端口,則只需要修改 Port_Data等的定義即可。而DS18B20的基本時序控制對于時間準確性的要求較為嚴格,所以為了提高驅動程序的兼容性(即在不同的使用當中都能正常工作) ,需要設計一個較為精確的微秒延時程序, 并且要求在進行DS18B20的操作時在一個固定且已知的CPU主頻下工作。所以輔助性的程序還包括:/=/ 匯編格式: _F_18B20_
33、Delay/ C 格式: void F_18B20_Delay(unsigned int Timers);/實現功能:在49MHz的主頻下的uS延時程序/入口參數:需要延時的時長(以uS為單位)/ 出口參數: 無/=.PUBLIC _F_18B20_Delay_F_18B20_Delay:cmp r1,1jna ?Delay_Exit?Delay_Loop:nopnopnopnopnopnopnopnopnopnopr1-=1jnz ?Delay_Loop?Delay_Exit:retf/=/ 匯編格式: _F_18B20_SetSystemCLK/ C 格式: void F_18B20_Se
34、tSystemCLK(void);/實現功能:將CPU主頻設置為49MHz為的是在時序控制時/可以獲取到較精確的延時/ 入口參數:無/ 出口參數:無/=.PUBLIC _F_18B20_SetSystemCLK_F_18B20_SetSystemCLK:r1 = 0x88P_SystemClock = r1/setsystem clock upto 49MHzretf/=/ 匯編格式: _F_18B20_RsuSystemCLK/ C 格式: void F_18B20_RsuSystemCLK(void);/實現功能:恢復系統及CPU主頻,而至于恢復為多少,貝y/由前面定義的變量 R_Syst
35、emClock 的值確定,用/戶可根據各自的程序設計需求進行改動/入口參數:無/出口參數:無/=.PUBLIC _F_18B20_RsuSystemCLK _F_18B20_RsuSystemCLK:r1 = R_SystemClockP_SystemClock = r1retf上面的程序當中, 設置和恢復系統時鐘的兩個函數主要在功能函數里調用, 在開始對 DS18B20 操作前調用設置函數,在操作結束后調用恢復函數;而恢復的系統頻率在前面的定義 R_SystemClock 時定義,用戶可以根據使用需要修改它的定義。 在進行基本時序控制前,還需要對端口進行初始化操作: /=/ 匯編格式: _F
36、_18B20_Initial_IO/ C 格式: void F_18B20_Initial_IO(void);/ 實現功能: 端口初始化子程序/ 入口參數: 無/ 出口參數: 無 /=.PUBLIC _F_18B20_Initial_IO_F_18B20_Initial_Ir1 = Port_Dir /set the prot connected DQto float input moder1 = r1&(M_DQ)Port_Dir = r1r1 = Port_Attribr1 = r1|M_DQPort_Attrib = r1r1 = Port_Bufferr1 = r1|M_DQP
37、ort_Buffer = r1retf將端口設置為懸浮的輸入端口,這樣在閑置時DQ線會被外部所接的上拉電阻拉至高電平,而當需要改換端口為輸出端口時,只需要改為對應端口的方向控制寄存器設置即可。3.2.2 基本時序控制基本時序控制程序包括: 總線復位及存在應答信號控制程序(簡稱復位程充序) 、寫 1 操作程序、寫0操作程序、讀 DQ程序。都是和前面所述的基本時序是相符合的,按照總線復位及存在應答信號的時序要求,將復位 程序設計如圖 4.2 所示:具體的代碼如下: /=/ 匯編格式:/ C 格式:/ 實現功能: / 入口參數:/ 出口參數: /= .PUBLIC _F_18B20_Reset _F
38、_18B20_Reset:r3 = Port_Dir r3 = r3|M_DQ Port_Dir = r3 DQ as Ouputr2 = Port_Bufferr2 = r2&(M_DQ)Port_Buffer = r2r1 = 600call _F_18B20_Delay Resetr2 = r2|M_DQ Port_Buffer = r2 r3 = r3&(M_DQ) Port_Dir = r3 as floatting inputr1 = 30call _F_18B20_Delayr2 = 1000 ?F_18B20_Reset_L:r2 -=1jz ?F_18B20_
39、Reset_Er1 = Port_Datar1 = r1&M_DQjnz ?F_18B20_Reset_Lr2 = 1000 ?F_18B20_Reset_L2:r2-=1jz ?F_18B20_Reset_E r1 = Port_Data r1 = r1&M_DQ jz ?F_18B20_Reset_L2 r1 = 1jmp ?F_18B20_Reset_Exit ?F_18B20_Reset_E:r1 = 0_F_18B20_Resetunsigned int F_18B20_Reset(void); 一線總線復位及從設備應答控制程序 無0 表示復位失敗 1 表示復位成功/
40、Set/Set DQ to Low/Delay 600us for DS18B20/resume the port/Delay 30us/Timer overflow Erro/Timer overflow ErroPortconnect?F_18B20_Reset_Exit:retf而寫操作和讀操作的時序操作都有點類似, 相對較簡單, 下面僅列出寫 序的代碼,如下:1操作和讀DQ操作程/=/ 匯編格式: _F_18B20_Write_1/ C 格式: void F_18B20_Write_1(void);/ 實現功能: 向一線總線寫 1/ 入口參數: 無/ 出口參數: 無/=.PUBLIC
41、_F_18B20_Write_1 _F_18B20_Write_1:r3 = Port_Dir r3 = r3|M_DQ Port_Dir = r3 DQ as Ouputr2 = Port_Buffer r2 = r2&(M_DQ) Port_Buffer = r2 r1 = 10 call _F_18B20_Delay r2 = r2|M_DQ Port_Buffer = r2 r1 = 40 call _F_18B20_Delay r3 = r3&(M_DQ) Port_Dir = r3 as floatting inputretf/Set/Set DQ to Low/D
42、elay 10us/Delay 40us/resume the portPort connect/=/ 匯編格式: _F_18B20_Read_DQ/ C 格式: unsigned int F_18B20_Read_DQ(void);/ 實現功能: 讀一位一線總線的數據/ 入口參數: 無/ 出口參數: 當前讀回的位的值 0/1/=.PUBLIC _F_18B20_Read_DQ _F_18B20_Read_DQ:r3 = Port_Dirr3 = r3|M_DQPort_Dir = r3 DQ as Ouputr2 = Port_Bufferr2 = r2&(M_DQ)/SetPort
43、 connect/Set DQ to Low/Delay 10us/resume the port/Delay 3us/Delay 1usPort_Buffer = r2r1 = 10call _F_18B20_Delay r3 = r3&(M_DQ) Port_Dir = r3 as floatting inputr1 = 3call _F_18B20_Delay r3 = Port_Data r3 = r3&M_DQjz ?L18B20_Read_0 r3 = 0x80 ?L18B20_Read_0:r1 = 30call _F_18B20_Delayr2 = r2|M_D
44、Q Port_Buffer = r2 r1 = 1 call _F_18B20_Delay r1 = r3retf在前面的寫1操作程序和讀DQ操作程序當中,從延時的時長看來,并沒有嚴格地按照每一個 讀、寫操作要在 60 微秒內完成去延時, 主要是考慮到程序的調用以及結構代碼的執行過程本 身就需要一定的時間,相當于補充了延時。3.3 功能函數設計 功能函數的設計相對來說較簡單些,是在前面的基本時序控制程序的基礎上整合而成,依照 前面所述的DS18B20操作流程來編寫就可以了;所以為了便于移值,也為了結構化程序的編 寫,采用C語言進行該部分程序的設計。功能函數實際上還包括了 3 個基礎的函數即:寫
45、字節函數、讀字節函數、初始化函數。初始化函數就是完成端口的初始化,然后給DS18B20一個總線復位信號并獲取從器件的存在應答信號以確認 DS18B20是在總線上的。代碼如下:/=/ 語法格式:void DS18B20_WriteByte(unsigned int Data)/ 實現功能:DS18B20 字節寫入子程序/無需修改,實際上是屬于整合的程序,供其它的 API 調用/ 參數:Data要寫入的數值,低八位有效/ 返回值:無/= void DS18B20_WriteByte(unsigned int Data) unsigned int i;for(i=0;i<8;i+)if(Dat
46、a&0x0001)F_18B20_Write_1();elseF_18B20_Write_0();Data = Data>>1;/=/ 語法格式: unsigned int DS18B20_ReadByte(void)/ 實現功能: DS18B20 字節讀出子程序/ 無需修改,實際上是屬于整合的程序,供其它的 API 調用/ 參數: 無/ 返回值: 讀出的字節數據,低八位有效 /= unsigned int DS18B20_ReadByte(void)unsigned int i,Data=0;for(i=0;i<8;i+)Data = Data>>1;D
47、ata = Data|F_18B20_Read_DQ();return Data; /= / 語法格式: unsigned int DS18B20_Initial(void)/ 實現功能: DS18B20 初始化/包括對端口的初始化,以及對DS18B20進行一次復位(總線)/ 參數: 無/ 返回值:初始化結果,返回 0表示初始化失敗/= unsigned int DS18B20_Initial(void)unsigned int uiTemp=0; F_18B20_SetSystemCLK();F_18B20_Initial_IO();uiTemp = F_18B20_Reset();F_18B20_RsuSystemCLK();return uiTemp;在前面的底層驅動程序以及基本的集成功能函數的基礎上,就可以按照DS18B2 0的操作流程對DS18B20進行各種使用操作了,本文只提供了讀取測量溫度(包含啟動一次測溫)的范例 代碼。本文介紹的使用中,采用直接VDD對DS18B20進行供電,而且總線上僅有一個DS18B20作為從器件,將操作的流程列在下表 4.1 中:此主題相關圖片如下:代碼如下: /=/ 語法格式: float DS18B20_ReadT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 線圈繞線機企業數字化轉型與智慧升級戰略研究報告
- 舌針鉤編機企業ESG實踐與創新戰略研究報告
- 2025-2030中國擔保行業市場發展分析及發展趨勢預測與業投資戰略研究報告
- 2025-2030中國折疊紙箱行業市場發展趨勢與前景展望戰略研究報告
- 2025-2030中國多渠道營銷中心行業市場現狀供需分析及投資評估規劃分析研究報告
- 2025-2030中國多功能制水機行業發展分析及發展趨勢與投資戰略研究報告
- 2025-2030中國復方牛磺酸滴眼液行業市場全景調研及投資價值評估咨詢報告
- 供應鏈合作框架協議之國際貿易執行
- 人工智能技術研究開發合作協議
- 國際貿易業務合作協議簽署書
- 比例尺單元測試卷及答案
- 北京市朝陽區2025屆高三下學期一模試題 數學 含答案
- 食品工廠5S管理
- 運輸公司安全管理制度
- 2025屆吉林省長春市高三下學期4月三模政治試題(原卷版+解析版)
- 2025屆江蘇省揚州市中考一模語文試題(含答案)
- 2025年河北省唐山市中考一模道德與法治試題(含答案)
- 2025年一級注冊計量師考試題庫大全及答案
- 衛生院全國預防接種日宣傳活動總結(8篇)
- 工程造價咨詢服務投標方案(專家團隊版-)
- 2024年廣東省中考生物+地理試卷(含答案)
評論
0/150
提交評論