資源簡介
stm32F103 讀取ds18b20 溫度 并通過串口 9600 上傳 每隔一秒
代碼片段和文件信息
#include“ds18b20.h“
#include
#include“mytype.h“
#define?DS_PORT?GPIOA ???//選擇外設GPIOA
#define?DS_DQIO?GPIO_Pin_1? ??//選擇管腳Pa1
#define?ResetDQ()?GPIO_ResetBits(DS_PORTDS_DQIO)??//拉低DQ
#define?SetDQ()?GPIO_SetBits(DS_PORTDS_DQIO)???//拉高DQ
#define?GetDQ()?GPIO_ReadInputDataBit(DS_PORTDS_DQIO)?//讀取DQ的電平
void?delay_1ms(int?cnt)
{
int?i;
while(cnt--)
for(i=0;i<8300;i++);
}
void?delay_1us(U32?value)
{
SysTick->LOAD=value*9;?//時間加載
SysTick->CTRL|=0x01;???//開始倒數
while(!(SysTick->CTRL&(1<<16)));?//等待時間到達
SysTick->CTRL=0x00000000;??//關閉計數器
SysTick->VAL=0x00000000;???//清空計數器
}
void?Init_ds18b20(void) ???//初始化DS18B20
{
SetDQ();
delay_1us(30); ?//保持高電平一段時間時間
ResetDQ(); //總線將其拉低電平
delay_1us(600); ???//延時400us-960us,這里延時600us
SetDQ();?????????????//總線釋放低電平
delay_1us(30); ??//延時15us-60us,這里延時30us
while(GetDQ()); ??//若為高電平則出錯,等待一直循環
delay_1us(500); //將剩余時間消耗完
SetDQ(); //總線將電平拉高
}
void?DS18B20WriteByte(U8?Dat)
{
U8?i;
for(i=8;i>0;i--)
{
ResetDQ();????//在15us內送數到數據線,在15-60us內采樣
delay_1us(5);
if(Dat&0x01) //讀數據的最低位
SetDQ();
else
ResetDQ();
delay_1us(65);?//將剩余時間消耗完
SetDQ();
delay_1us(2);?//寫兩個位之間間隔大于1us
Dat>>=1;???//右移一位,
}
}
U8?DS18B20ReadByte(void)
{
U8?iDat;
SetDQ();
delay_1us(5);
for(i=0;i<8;i++)
{
Dat>>=1;
ResetDQ();?//從讀時序開始到采樣信號線必須在15us內,且采樣盡量安排在15us最后
delay_1us(5);
SetDQ();?//釋放總線,然后才能進行采樣,否則無意義。只有低電平
delay_1us(5);
if(GetDQ())
Dat|=0x80;
else
Dat&=0x7f;
delay_1us(65);??//消耗剩余時間
SetDQ();??//拉高總線
}
return?Dat;
}
U8?readtemperature(void)
{
U8?ab;
Init_ds18b20();?//初始化
DS18B20WriteByte(skipRom);
DS18B20WriteByte(convert);?//開始轉換溫度
delay_1ms(550); ?//延時,等待溫度轉換完成
Init_ds18b20();
DS18B20WriteByte(skipRom);
DS18B20WriteByte(readTemp); //讀取暫存器
a=DS18B20ReadByte();????//讀取低8位
b=DS18B20ReadByte(); //讀取高8位
b<<=4;
b+=(a&=0xf0)>>4;
return?b;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
????.CA....?????53029??2010-04-09?17:01??修改-溫度傳感\8x16.h
?????文件??????31636??2010-08-28?20:57??修改-溫度傳感\ds18b20.axf
?????文件???????2266??2010-08-30?21:19??修改-溫度傳感\ds18b20.c
????.CA....???????202??2010-08-29?20:23??修改-溫度傳感\ds18b20.h
????.CA....?????43949??2010-08-28?20:57??修改-溫度傳感\ds18b20.htm
?????文件????????282??2010-08-28?20:57??修改-溫度傳感\ds18b20.lnp
????.CA....?????69722??2010-08-30?19:11??修改-溫度傳感\ds18b20.map
?????文件???????2195??2010-08-28?21:21??修改-溫度傳感\ds18b20.plg
?????文件????????479??2010-08-28?20:57??修改-溫度傳感\ds18b20.sct
?????文件???????1017??2010-08-28?20:57??修改-溫度傳感\ds18b20.tra
?????文件??????74568??2012-03-07?13:03??修改-溫度傳感\ds18b20.uvgui.Administrator
????.CA....?????71265??2012-03-06?23:51??修改-溫度傳感\ds18b20.uvgui_Administrator.bak
?????文件??????60773??2010-08-30?23:20??修改-溫度傳感\ds18b20.uvopt
?????文件??????15769??2010-08-29?18:24??修改-溫度傳感\ds18b20.uvproj
????.CA....??????9430??2010-08-30?22:07??修改-溫度傳感\ds18b20_Target?1.dep
????.CA....?????60770??2010-08-30?21:19??修改-溫度傳感\ds18b20_uvopt.bak
????.CA....?????15484??2010-08-28?21:34??修改-溫度傳感\ds18b20_uvproj.bak
????.CA....??????2017??2010-08-29?18:24??修改-溫度傳感\GB1616.h
?????文件????????629??2010-08-30?21:19??修改-溫度傳感\main.c
????.CA....????154413??2010-08-28?20:57??修改-溫度傳感\main.crf
????.CA....??????1906??2010-08-28?20:57??修改-溫度傳感\main.d
????.CA....????176516??2010-08-28?20:57??修改-溫度傳感\main.o
?????文件??????58984??2010-08-30?19:11??修改-溫度傳感\Output\ds18b20.axf
????.CA....??????2213??2010-08-30?19:11??修改-溫度傳感\Output\ds18b20.d
?????文件??????18186??2010-08-30?19:11??修改-溫度傳感\Output\ds18b20.hex
????.CA....?????46975??2010-08-30?19:11??修改-溫度傳感\Output\ds18b20.htm
?????文件????????376??2010-08-30?19:11??修改-溫度傳感\Output\ds18b20.lnp
?????文件?????174312??2010-08-30?19:11??修改-溫度傳感\Output\ds18b20.o
????.CA....???????158??2010-08-30?22:07??修改-溫度傳感\Output\ds18b20.plg
?????文件????????479??2010-08-28?20:59??修改-溫度傳感\Output\ds18b20.sct
............此處省略29個文件信息
評論
共有 條評論