-
以下是DS18B20的 C51 程式:
初始化 18b20
uchar init18b20(void)uint i;
bit no;
ds=0;i=103;
while(i>0)i--;
ds=1;i=4;while(i>0)i--;
no=ds;
if(no==0)
ds=1;i=100;
while(i>0)i--;
no=ds;
if(no==1)
not[1]=0;
elsenot[1]=1;
elsenot[1]=1;
return (not[1]);
bit tmpreadbit(void) 讀取 1 位。
uint i;
bit dat;
ds=0;i++;
ds=1;i++;i++;
dat=ds;
i=8;while(i>0)i--;
return (dat);
uchar tmpread(void) 讀取乙個位元組。
uchar i,j,dat;
dat=0;
for(i=1;i<=8;i++)
j=tmpreadbit();
dat=(j<<7)|(dat>>1);
return(dat);
void tmpwritebyte(uchar dat) 將乙個位元組寫入 DS18B20
uint i;
uchar j;
bit testb;
for(j=1;j<=8;j++)
testb=dat&0x01;
dat=dat>>1;
if(testb)
ds=0;i++;i++;
ds=1;i=8;while(i>0)i--;
elseds=0;
i=8;while(i>0)i--;
ds=1;i++;i++;
int tmp() ds18b20 溫度讀取。
float tt;
uchar a,b;
ea=0;if(init18b20()==0)delay(1);
tmpwritebyte(0xcc);
tmpwritebyte(0x44);
delay(10);
init18b20();
delay(1);
tmpwritebyte(0xcc);
tmpwritebyte(0xbe);
a=tmpread();
b=tmpread();
temp=b;
temp<<=8;
temp=temp|a;
c=b>>4;
tt=temp*;
temp=tt*10+;
ea=1;return temp;
elsenot[1]=1;
ea=1;
-
PIC兩年前就做到了,資訊還在,哈哈。
-
您好,親愛的,很高興回答您的<>
DS18B20是一種數字溫度感測器,可與單個匯流排介面進行通訊,該介面可以輕鬆地將溫度資料轉換為數碼訊號,以便傳輸到顯示器。 具體步驟如下:1
設定硬體連線:將 DS18B20 感測器的 VDD 引腳連線到正電源,將 GND 引腳連線到負電源,將資料引腳連線到 MCU 的任何 IO 埠。 2.
讀取溫度資料:程式是用MCU的程式語言(如C語言)編寫的,用於讀取DS18B20感測器的溫度資料。 特定操作需要DS18B20通訊協議,包括傳送復位訊號、傳送讀取溫度命令和接收溫度資料。
3.處理溫度資料:從DS18B20讀數Laoling中獲取的溫度資料為原始十六進製值,需要使用計算公式轉換為攝氏或華氏等常見溫標下的溫度值。
4.顯示溫度值:轉換後的溫度值可以通過MCU上的數碼管或LCD顯示器等裝置顯示在顯示器上,DS18B20感測器讀取的溫度值可以在顯示器上看到。
需要注意的是,在硬體連線和程式編寫過程中,必須遵循DS18B20的通訊規範和相關技術檔案,以確保感測器的正常執行和資料的準確性。 以上是我的,希望對你有幫助,祝你生活愉快!
-
首先,DS18B20輸出的1位元(1bit)訊號不能被微控制器改成位元,乙個是位元,微控制器需要連續多次讀取DS18B20輸出的位元訊號,以合成它需要的資訊。 例如,如果DS18B20的溫度輸出為 16 位,則微控制器將需要讀取 1 位資料 16 次。
讀取溫度偽**(溫度是儲存溫度值的整數變數):
for ( i=1; i<=16; i++)
onebit=函式讀取 1 位資料 ();
temperature=temperature|onebit;
if(i!=16)
temperature=temperature<<1;
那麼,微控制器是如何讀取DS18B20輸出的某個1bit資訊的呢? 在具體細節之前,需要明確的是,這個過程必須在微控制器拉下資料線並啟動資料讀取過程後的15微秒(us)內完成,否則無法讀取正確的資料(注意:在啟動通訊時,資料匯流排總是被微控制器下拉,在沒有通訊的情況下資料匯流排保持高電平)。
我們來談談具體流程:
1、微控制器將資料匯流排拉下;
2.延遲2us; (這個時間必須大於1us,否則DS18B20將無法識別下拉訊號; 它也不宜太大,超過15us將無法正確讀取。 )
3、設定微控制器連線的IO口輸入輸出方向,DS18B20作為輸入; (這一步也可能是微控制器直接把資料線拉高,因晶元而異)。
4.延遲2us; (給DS18B20一定的時間輸出訊號)。
5.讀取資料匯流排上的電平值;
6.拉起資料匯流排,延遲一段時間,進入下乙個1位讀數。
注意:這裡能否正確讀取的關鍵是延遲量是否足夠準確,所以在用C語言編寫DS18B20程式之前,需要根據微控制器模型和晶振頻率,找到乙個對延遲精度有足夠信心的延遲函式。
-
DS18B20 閱讀時機。
1) 將資料線向上拉“1”。
2) 延遲 2 微秒。
3) 將資料線向下拉至“0”。
4) 15微秒的延時。
5) 將資料線拉至“1”。
6) 15微秒的延時。
7)讀取資料線的狀態,得到乙個狀態位,進行資料處理。
8) 30微秒的延時。
它逐位讀取,例如當感測器將資料傳送到MCU 0x055時,(0b001010101)(9bits)被逐個傳送到MCU,然後拼湊成0x055位
-
你乙個乙個讀出來,把下面的八位放在乙個位元組裡,把上面的八位放在乙個位元組裡,然後加起來,網上程式很多。
顯示溫度部分完成,表示DS1820的讀數完成。 在這種情況下,您可以在程式中設定乙個值進行比較,該值大於或小於某個值輸出。 >>>More
進風溫度感測器壞了,啟動困難,怠速不穩定,排氣排放超標; 無法準確地將訊號傳輸到 ECU。 注射無法準確控制。 這將導致汽車的油耗增加。 >>>More
最好使用示波器觀察發動機冷卻液溫度感測器的訊號電壓變化,因為萬用表只能看乙個時間點的電壓,示波器可以看到電壓變化趨勢。 >>>More