基于STM32的-DS18b20-驅(qū)動程序.doc_第1頁
基于STM32的-DS18b20-驅(qū)動程序.doc_第2頁
基于STM32的-DS18b20-驅(qū)動程序.doc_第3頁
基于STM32的-DS18b20-驅(qū)動程序.doc_第4頁
基于STM32的-DS18b20-驅(qū)動程序.doc_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

/=DS18b20.h=/*- DS18b20驅(qū)動程序-*/#ifndef _DS18B20_H#define _DS18B20_Htypedef enumFAILED = 0 ,PASSED = !FAILED TestStatus ;#define DQ_GPIO GPIOD#define DQ_GPIO_Pin GPIO_Pin_5/REGISTER COMMANDS#define REGISTER_9_BITS 0x1F#define REGISTER_10_BITS 0x3F#define REGISTER_11_BITS 0x5F#define REGISTER_12_BIT2 0x7F/ROM COMMANDS#define ROM_Search_Cmd 0xF0#define ROM_Read_Cmd 0x33#define ROM_Match_Cmd 0x55#define ROM_Skip_Cmd 0xCC#define ROM_AlarmSearch_Cmd 0xEC/DS18b20 FUNCTION COMMANDS#define Convert_T 0x44#define Write_Scratchpad 0x4E#define Read_Scratchpad 0xBE#define Copy_Scratchpad 0x48#define Recall_EEPROM 0x88#define Read_PowerSupply 0x84#define DQ_Write_1() GPIO_SetBits(DQ_GPIO ,DQ_GPIO_Pin) /寫1#define DQ_Write_0() GPIO_ResetBits(DQ_GPIO ,DQ_GPIO_Pin)/寫0#define DQ_ReadBit() GPIO_ReadInputDataBit(DQ_GPIO ,DQ_GPIO_Pin) /讀DQ上的值extern void GPIO_DQ_Out_Mode(void) ; /DQ輸出模式extern void GPIO_DQ_Input_Mode(void) ; /DQ輸入模式extern void Tx_ResetPulse(void) ; /發(fā)送復(fù)位脈沖extern void Rx_PresencePulse(void) ; /接受應(yīng)答信號extern void Write_OneByte_ToDS18b20(unsigned char data) ; /寫一個字節(jié)到18b20extern unsigned char Read_OneByte_FromDS18b20(void) ; /從18b20讀一個字節(jié)extern void Read_Temperature(unsigned char *sign ,unsigned char *interger , unsigned int *decimal) ; /讀溫度/寫配置參數(shù)TH,TL和初始化配置寄存器extern void Write_EEPROM(unsigned char Th,unsigned char Tl,unsigned char Register_Con );void DS18B20_Init(void) ; /初始化#endif /*DS18B20*/=/=DS18b20.c=/#include stm32f10x_lib.h#include DS18b20.h#include SysTick_Delay.h/*函數(shù)名稱:GPIO_DQ_Out_Mode功 能:設(shè)置DQ引腳為開漏輸出模式參 數(shù):無返回值 :無*/void GPIO_DQ_Out_Mode(void) GPIO_InitTypeDef GPIO_InitStructure ; GPIO_InitStructure.GPIO_Pin = DQ_GPIO_Pin ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD ; /開漏輸出 GPIO_Init(DQ_GPIO ,&GPIO_InitStructure) ;/*函數(shù)名稱:GPIO_DQ_Input_Mode功 能:設(shè)置DQ引腳為浮空輸入模式參 數(shù):無返回值 :無*/void GPIO_DQ_Input_Mode(void) GPIO_InitTypeDef GPIO_InitStructure ; GPIO_InitStructure.GPIO_Pin = DQ_GPIO_Pin ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING ; /浮空輸入 GPIO_Init(DQ_GPIO ,&GPIO_InitStructure) ;/*函數(shù)名稱:Tx_ResetPulse功 能:發(fā)送復(fù)位脈沖參 數(shù):無返回值 :無*/void Tx_ResetPulse(void) GPIO_DQ_Out_Mode() ; DQ_Write_0() ; /復(fù)位脈沖 Delay_Nus(500) ; /至少保持480us DQ_Write_1() ; /加速上升沿速度 Delay_Nus(1) ;/*函數(shù)名稱:Rx_PresencePulse功 能:接受應(yīng)答信號參 數(shù):無返回值 :無*/void Rx_PresencePulse(void) GPIO_DQ_Input_Mode() ; while( DQ_ReadBit() ; /等待DS18b20應(yīng)答 while( DQ_ReadBit() = 0) ; /DS18b20將總線拉低60240us ,然后總線由上拉電阻拉高 Delay_Nus(300) ; GPIO_DQ_Out_Mode() ; /接受完成,主機(jī)重新控制總線/*函數(shù)名稱:Write_OneByte_ToDS18b20功 能:寫一個字節(jié)到DS18b20參 數(shù):無返回值 :無*/void Write_OneByte_ToDS18b20(unsigned char data) unsigned char i ; GPIO_DQ_Out_Mode() ; for(i=0 ;i= 1 ; /*函數(shù)名稱:Read_OneByte_FromDS18b20功 能:從DS18b20讀一個字節(jié)參 數(shù):無返回值 :讀出的數(shù)據(jù)*/unsigned char Read_OneByte_FromDS18b20(void) unsigned char i ,data = 0 ; for(i=0 ;i= 1 ; DQ_Write_0() ; Delay_Nus(2) ; GPIO_DQ_Input_Mode() ; Delay_Nus(1) ; if(DQ_ReadBit() data |= 0x80 ; Delay_Nus(70) ; /等待這一位數(shù)據(jù)完成傳輸 GPIO_DQ_Out_Mode() ; return data ;/*函數(shù)名稱:Read_Temperature功 能:讀取溫度信息參 數(shù):*sign - 保存符號(零上或零下) *integer - 保存整數(shù)部分 *decimal - 保存小數(shù)部分返回值 :無*/void Read_Temperature(unsigned char *sign , unsigned char *interger , unsigned int *decimal) unsigned char a=0; unsigned char b=0; /volatile unsigned char c=0; /volatile unsigned char d=0; /volatile unsigned char e=0; unsigned int tmp ; DS18B20_Init(); Write_OneByte_ToDS18b20(ROM_Read_Cmd); DS18B20_Init(); Write_OneByte_ToDS18b20(ROM_Skip_Cmd);/跳過讀序列號操作 Write_OneByte_ToDS18b20(Convert_T); /啟動溫度轉(zhuǎn)換 Delay_Nms(780);/等待DS18b20轉(zhuǎn)換完成 DS18B20_Init(); Write_OneByte_ToDS18b20(ROM_Skip_Cmd); Write_OneByte_ToDS18b20(Read_Scratchpad); /讀取寄存器內(nèi)容(可以從寄存器0讀到寄存器8) a= Read_OneByte_FromDS18b20(); /溫度低8位 b= Read_OneByte_FromDS18b20(); /溫度高8位 /c= Read_OneByte_FromDS18B20(); /TH /d= Read_OneByte_FromDS18B20(); /TL /e= Read_OneByte_FromDS18B20(); /Configuration Register Tx_ResetPulse(); /中斷數(shù)據(jù)讀取 tmp = (b4) & 0x00FF; /整數(shù)部分 *decimal = (tmp & 0x000F) * 625 ; /小數(shù)部分 /*函數(shù)名稱:Write_EEPROM功 能:寫配置參數(shù)參 數(shù):Th - 報警溫度上限 Tl - 報警溫度下限 Register_Con - 控制寄存器的值返回值 :讀出的數(shù)據(jù)*/void Write_EEPROM(unsigned char Th,unsigned char Tl,unsigned char Register_Con ) DS18B20_Init(); Write_OneByte_ToDS18b20(ROM_Skip_Cmd); Write_OneByte_ToDS18b20(Write_Scratchpad); Write_OneByte_ToDS18b20(Th);/Th=7F Write_OneByte_ToDS18b20(Tl);/Tl=FF 最高位符號位 Write_OneByte_ToDS18b20(Register_Con);/12位模式 Delay_Nms(700); DS18B20_Init(); Write_OneByte_ToDS18b20(ROM_Skip_Cmd); Write_OneByte_ToDS18b20(Copy_Scratchpad);/將寄存器的配置值寫入EEPROM Delay_Nms(300);/*函數(shù)名稱:DS18B20_Init功 能:初始化DS18b20參 數(shù):無返回值 :無*/void DS18B20_Init(void) Tx_ResetPulse(); Rx_PresencePulse(); /=/=要用到的其他文件=/=Systick_Delay.h=/*- 利用SysTick進(jìn)行精確定時-*/#ifndef _SYSTICKDELAY_H#define _SYSTICKDELAY_H #include stm32f10x_lib.hextern void Delay_Nms(u16 Nms);extern void Delay_Nus(u32 Nus);#endif /*SYSTICKDELAY_H*/ /=/=Systick_Delay.c=/#include stm32f10x_lib.h#include SysTick_Delay.h/延時Nms/注意Nms的范圍/Nms=0xffffff*8/SYSCLK/對72M條件下,NmsLOAD=(u32)Nms*9000; /給重裝載寄存器賦值,9000時,將產(chǎn)生1ms的時基 SysTick-CTRL|=0x01; /開始倒

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論