導航:首頁 > 操作系統 > ds18b20與單片機

ds18b20與單片機

發布時間:2022-08-20 03:46:40

單片機的DS18B20問題

1、DS18B20的三個引腳的功能是什麼?答:DS18B20的3個引腳分別為VCC電源正極、GND電源負極、DQ數據端。2、
DS18B20復位時間是多少?答:DS18B20復位時間是480us~960us。3、
如何判斷DS18B20工作正常?答:不存在此功能。4、單片機如何實現對DS18B20的寫0操作?答:不存在此功能。(你是不是說如何啟動讀取DS18B20,啟動只需讓單片機與DQ的介面至低電平保持1微妙以上時間)5、
DS18B20的解析度為多少位?如何設置解析度位數?答:"DS18B20的解析度為在-55~127攝氏度,解析度可以進行量化為9、10、11、12位對應一個單位的溫度為:0.5攝氏度、0.25攝氏度、0.125攝氏度、0.0625攝氏度。6、DS18B20的溫度數據如何?如何將區分正負溫?答:DS18B20的溫度數據的數據為一個16位二進制數。高5位為判斷正負位(高5位為1時溫度為負、高5位為0時溫度為正),對數據處理的方法,由於負數的數據在存儲的時候是以補碼的形式存儲的,所以在顯示的時候補碼應該相應的轉換為原碼。還有什麼疑問?可以追問~上面的希望對你有幫助~

❷ DS18B20是如何測溫的跟單片機如何連接

ds18b20的原理就是一些控制指令。這些指令你可以上網找它的資料,裡面有。至於連線,我只會51單片機。1端接地,3端接Vcc,2端接在I/O口上,可以接在P2.1上。另外2端還有外接一個10K的電阻,然後再連在Vcc上。。。寫程序時,注意看時序圖,一定要按時序圖來寫,ds18b20是單匯流排傳輸,一定要按時序來寫。

❸ DS18B20溫度感測器如何與單片機相連接

DS18B20與單片機連接一個IO口就夠,只需要滿足相應的時序就能讀到溫度數據。至於1602顯示,只要能讀到溫度數據,將數據轉為字元串發送給1602就可以。

該溫度感測器是數字感測器,內含處理器晶元,直接輸出溫度數字信號,單片機採用查詢的方式回讀數據後進行換算輸出。

三通道18B20溫度測量數碼管顯示。-55-+125℃,用1位數碼管顯示當前通道號,4位數碼管顯示18B20當前通道溫度值,負號位與正溫度百位1用同一位數碼管顯示,該位為0不顯示。

(3)ds18b20與單片機擴展閱讀:

DS18B20的讀寫時序和測溫原理與DS1820相同,只是得到的溫度值的位數因解析度不同而不同,且溫度轉換時的延時時間由2s減為750ms。 DS18B20測溫原理如圖3所示。圖中低溫度系數晶振的振盪頻率受溫度影響很小,用於產生固定頻率的脈沖信號發送給計數器1。高溫度系數晶振隨溫度變化其振盪頻率明顯改變,所產生的信號作為計數器2的脈沖輸入。計數器1和溫度寄存器被預置在-55℃所對應的一個基數值。

❹ 4個DS18B20與單片機相連 怎麼區分呢 方便給個程序嗎謝謝

DS18B20是一線制通信,一個DS18B20和單片機只需要一個GPIO引腳連接即可。
4個DS18B20連接單片機的四個GPIO,所用IO引腳名稱和DS18B20對應起來,這樣通過驅動不同的GPIO,就知道程序讀取的是哪個DS18B20了
每一個DS18B20打包寫一個驅動函數,在主循環里,載入這四個驅動函數,並把讀上來到數據保存到4個全局變數里,用於後續顯示。

❺ 求大神解釋一下DS18B20和這個單片機的連接以及是怎麼實現溫度信號檢測的,謝謝!

看圖,這個圖示匯流排畫法,18b20的DQ端連接在單片機33腳。
18b20是數字精密溫度感測器,通過單匯流排形式直接輸出溫度的數字信號,單片機拿到信號以後稍作解碼就可以得到值。

❻ 普中開發板上ds18b20如何與單片機通信

ds18b20與單片機是串列通訊,
/******************************************************
函數名稱:void
Init_DS18B20(void)
返回值:無
參數:無
作用:初始化18B20
*******************************************************/
void
Init_DS18B20(void)
{
char
x=0;
DQ=1;
delay(10);//稍作延時
DQ=0;
delay(80);//延時>480us
540us
DQ=1;
//拉高匯流排
15-60us
delay(20);
x=DQ;//讀匯流排狀態
為0復位成功,為1則不成功
delay(30);
DQ=1;//釋放匯流排
}
/******************************************************
函數名稱:uchar
ReadOneChar(void)
返回值:uchar
dat
參數:

作用:讀取1820一個位元組
*******************************************************/
uchar
ReadOneChar(void)
{
uchar
i;
uchar
dat=0;
for(i=0;i<8;i++)
{
DQ=0;
dat>>=1;
DQ=1;//給脈沖
if(DQ)
{dat|=0x80;}//讀1
///
讀0右移處理
delay(8);//15us內讀完一個數
}
return(dat);
}
/******************************************************
函數名稱:void
WriteOneChar(uchar
dat)
返回值:無
參數:
uchar
dat
作用:向1820寫一個位元組
*******************************************************/
/////****寫DS18B20***/
//寫0
60us讀完,寫1
30us
內讀完
void
WriteOneChar(uchar
dat)
{
uchar
i=0;
for(i=0;i<8;i++)
{
DQ=0;
DQ=dat&0x01;//寫所給數據最低位
delay(10);
///////////
DQ=1;//給脈沖
dat>>=1;
}
delay(8);
}

❼ 單片機DS18B20問題

1、DS18B20的三個引腳的功能是什麼?
答:DS18B20的3個引腳分別為VCC電源正極、GND電源負極、DQ數據端。
2、
DS18B20復位時間是多少?
答:DS18B20復位時間是480us~960us。
3、
如何判斷DS18B20工作正常?
答:不存在此功能。
4、單片機如何實現對DS18B20的寫0操作?
答:不存在此功能。(你是不是說如何啟動讀取DS18B20,啟動只需讓單片機與DQ的介面至低電平保持1微妙以上時間)
5、
DS18B20的解析度為多少位?如何設置解析度位數?
答:"DS18B20的解析度為在-55~127攝氏度,解析度可以進行量化為9、10、11、12位對應一個單位的溫度為:0.5攝氏度、0.25攝氏度、0.125攝氏度、0.0625攝氏度。
6、DS18B20的溫度數據如何?如何將區分正負溫?
答:DS18B20的溫度數據的數據為一個16位二進制數。高5位為判斷正負位(高5位為1時溫度為負、高5位為0時溫度為正),對數據處理的方法,由於負數的數據在存儲的時候是以補碼的形式存儲的,所以在顯示的時候補碼應該相應的轉換為原碼。
還有什麼疑問?可以追問~上面的希望對你有幫助~

❽ DS18B20與單片機結合來測量溫度。利用數字溫度感測器DS18B20測量溫度信號

#include <reg51.h>
#define uchar unsigned char
sbit keyup=P1^0;
sbit keydn=P1^1;
sbit keymd=P1^2;
sbit out=P3^7; //接控制繼電器
sbit DQ = P3^4; //接溫度感測器18B20
uchar t[2],number=0,*pt; //溫度值
uchar TempBuffer1[4]={0,0,0,0};
uchar Tmax=18,Tmin=8;
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xfe,0xf7};
uchar dismod=0,xiaodou1=0,xiaodou2=0,currtemp;
bit flag;
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
switch(number)
{
case 0:
P2=0x08;
P0=distab[TempBuffer1[0]];
break;
case 1:
P2=0x04;
P0=distab[TempBuffer1[1]];
break;
case 2:
P2=0x02;
P0=distab[TempBuffer1[2]]&0x7f;
break;
case 3:
P2=0x01;
P0=distab[TempBuffer1[3]];
break;
default:
break;
}
number++;
if(number>3)number=0;
}
void delay_18B20(unsigned int i)
{
while(i--);
}
/**********ds18b20初始化函數**********************/
void Init_DS18B20(void)
{
bit x=0;
do{
DQ=1;
delay_18B20(8);
DQ = 0; //單片機將DQ拉低
delay_18B20(90); //精確延時 大於 480us
DQ = 1; //拉高匯流排
delay_18B20(14);
x=DQ; //稍做延時後 如果x=0則初始化成功 x=1則初始化失敗,繼續初始化
}while(x);
delay_18B20(20);
}
/***********ds18b20讀一個位元組**************/
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 給脈沖信號
dat>>=1;
DQ = 1; // 給脈沖信號
if(DQ)
dat|=0x80;
delay_18B20(4);
}
return(dat);
}
/*************ds18b20寫一個位元組****************/
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay_18B20(5);
DQ = 1;
dat>>=1;
}
}
/**************讀取ds18b20當前溫度************/
unsigned char *ReadTemperature(unsigned char rs)
{
unsigned char tt[2];
delay_18B20(80);
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0x44); //啟動溫度轉換
delay_18B20(80);
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器)前兩個就是溫度
tt[0]=ReadOneChar(); //讀取溫度值低位
tt[1]=ReadOneChar(); //讀取溫度值高位
return(tt);
}
void covert1(void) //將溫度轉換為LED顯示的數據
{
uchar x=0x00,y=0x00;
t[0]=*pt;
pt++;
t[1]=*pt;
if(t[1]&0x080) //判斷正負溫度
{
TempBuffer1[0]=0x0c; //c代表負
t[1]=~t[1]; /*下面幾句把負數的補碼*/
t[0]=~t[0]; /*換算成絕對值*********/
x=t[0]+1;
t[0]=x;
if(x==0x00)t[1]++;
}
else TempBuffer1[0]=0x0a; //A代表正
t[1]<<=4; //將高位元組左移4位
t[1]=t[1]&0xf0;
x=t[0]; //將t[0]暫存到X,因為取小數部分還要用到它
x>>=4; //右移4位
x=x&0x0f; //和前面兩句就是取出t[0]的高四位
y=t[1]|x; //將高低位元組的有效值的整數部分拼成一個位元組
TempBuffer1[1]=(y%100)/10;
TempBuffer1[2]=(y%100)%10;
t[0]=t[0]&0x0f; //小數部分
TempBuffer1[3]=t[0]*10/16;
//以下程序段消去隨機誤檢查造成的誤判,只有連續12次檢測到溫度超出限制才切換加熱裝置
if(currtemp>Tmin)xiaodou1=0;
if(y<Tmin)
{
xiaodou1++;
currtemp=y;
xiaodou2=0;
}
if(xiaodou1>12)
{
out=0;
flag=1;
xiaodou1=0;
}
if(currtemp<Tmax)xiaodou2=0;
if(y>Tmax)
{
xiaodou2++;
currtemp=y;
xiaodou1=0;
}
if(xiaodou2>12)
{
out=1;
flag=0;
xiaodou2=0;
}
out=flag;
}
void convert(char tmp)
{
uchar a;
if(tmp<0)
{
TempBuffer1[0]=0x0c;
a=~tmp+1;
}
else
{
TempBuffer1[0]=0x0a;
a=tmp;
}
TempBuffer1[1]=(a%100)/10;
TempBuffer1[2]=(a%100)%10;
}
void keyscan( )
{
uchar keyin;
keyin=P1&0x07;
if(keyin==0x07)return;
else if(keymd==0)
{
dismod++;
dismod%=3;
while(keymd==0);
switch(dismod)
{
case 1:
convert(Tmax);
TempBuffer1[3]=0x11;
break;
case 2:
convert(Tmin);
TempBuffer1[3]=0x12;
break;
default:
break;
}
}
else if((keyup==0)&&(dismod==1))
{
Tmax++;
convert(Tmax);
while(keyup==0);
}
else if((keydn==0)&&(dismod==1))
{
Tmax--;
convert(Tmax);
while(keydn==0);
}
else if((keyup==0)&&(dismod==2))
{
Tmin++;
convert(Tmin);
while(keyup==0);
}
else if((keydn==0)&&(dismod==2))
{
Tmin--;
convert(Tmin);
while(keydn==0);
}
xiaodou1=0;
xiaodou2=0;
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
out=1;
flag=0;
ReadTemperature(0x3f);
delay_18B20(50000); //延時等待18B20數據穩定
while(1)
{
pt=ReadTemperature(0x7f); //讀取溫度,溫度值存放在一個兩個位元組的數組中
if(dismod==0)covert1();
keyscan();
delay_18B20(30000);
}
}

❾ DS18B20和單片機的通信

DS18B20就是一個單匯流排的溫度感測器,網上都是它的技術手冊,所有讀取溫度的程序都是根據技術手冊寫出來的,也沒有什麼通信原理,應該說,只是單片機去讀取溫度,根據DS18B20要求的時序去寫程序的,也不叫什麼通信,更沒有人講什麼通信原理的。
要麼看技術手冊,要麼看程序。只有這兩種資料。

❿ DS18B20 與51單片機 怎麼用

DS18B20使用:
接線時,面對著扁平的那一面,左負右正,一旦接反就會立刻發熱,有可能燒毀,同時,接反也是導致該感測器總是顯示85℃的原因。實際操作中將正負反接,感測器立即發熱,液晶屏不能顯示讀數,正負接好後顯示85℃。
DS18B20是常用的溫度感測器,具有體積小,硬體開銷低,抗干擾能力強,精度高的特點。
51單片機使用方法:

1.將模擬器插入需模擬的用戶板的CPU插座中,模擬器由用戶板供電;
2.將模擬器的串列電纜和PC機接好,打開用戶板電源;
3.通過Keil C 的IDE 開發模擬環境UV2 下載用戶程序進行模擬、調試。
51單片機是對所有兼容Intel 8031指令系統的單片機的統稱。該系列單片機的始祖是Intel的8004單片機,後來隨著Flash rom技術的發展,8004單片機取得了長足的進展,成為應用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應用於工業測控系統之中。很多公司都有51系列的兼容機型推出。

閱讀全文

與ds18b20與單片機相關的資料

熱點內容
想媽媽的命令 瀏覽:578
網站接入方式怎麼填寫雲伺服器 瀏覽:859
土豆視頻APP怎麼看不了 瀏覽:550
社交軟體app該怎麼聊 瀏覽:23
pc的啟動文件夾 瀏覽:671
文件夾壓縮過程中點擊取消壓縮 瀏覽:215
順豐app專享優惠券怎麼用 瀏覽:667
酷狗音樂分享文件夾 瀏覽:826
伺服器mgmt旁邊的介面是什麼 瀏覽:844
單片機發光二極體原理圖 瀏覽:50
在北京當程序員6年 瀏覽:128
編譯器gcc如何用 瀏覽:412
androidbringup 瀏覽:978
演算法設計與分析英文版 瀏覽:911
java程序員加班嗎 瀏覽:142
編譯檢查的是什麼錯誤 瀏覽:405
加密兔f碼生成器免費 瀏覽:292
思科路由器命令明文加密 瀏覽:171
方舟生存進化伺服器如何改名字 瀏覽:892
央行數字貨幣app怎麼注冊 瀏覽:431