誰能告訴我微控制器從ds18b20中讀取溫度的原理,是怎樣將ds18b20中輸出的一位訊號變為多位的。
1樓:網友
首先,ds18b20輸出的一位(1 bit)訊號是不能被微控制器變為多位的,一位就是一位,微控制器需要連續多次讀取ds18b20輸出的一位訊號,來合成它需要的資訊。比如ds18b20的溫度輸出是16位資料,那麼微控制器就要讀16次1 bit資料。
讀取溫度偽**(temperature為儲存溫度數值的整型變數):
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、將微控制器與ds18b20相連的io口輸入輸出方向設為輸入;(這一步也有可能是微控制器直接將資料線拉高,因晶元的不同而不同)
4、延時2us;(給ds18b20一定的時間輸出訊號)
5、讀取資料匯流排上的電平值;
6、拉高資料匯流排,延時一段時間後進入下1bit的讀取。
注意:這裡能否正確讀取的關鍵是延時的量是否足夠精確,因此在用c語言寫ds18b20程式之前,需要先根據微控制器型號和晶振頻率找出乙個自己對延時的精度有足夠把握的延時函式,隨便在網上down別人的程式很有可能因為延時不對跑不起來。
2樓:網友
ds18b20的讀操作 時序。
1)將資料線拉高「1」。
2)延時2微秒。
3)將資料線拉低「0」。
4)延時15微秒。
5)將資料線拉高「1」。
6)延時15微秒。
7)讀資料線的狀態得到1個狀態位,並進行資料處理。
8)延時30微秒。
它通過一位一位的讀取,如感測器待送給mcu的資料時0x055(0b001010101)(9bits)先一位一位的送給mcu然後再按位來拼湊為0x055
3樓:網友
你先把一位一位都讀出來,低八位放乙個位元組裡,高八位放乙個位元組裡,然後加下就行了,網上程式多的是。
求微控制器控制溫度感測器lcd顯示溫度值溫度達到
既然是老師不知道任務,教師用的實驗板都有燒錄功能,或者老師可以把你解決。ds1820是個數字溫度感測器,lcd1602是液晶顯示。這個我可以幫助你搞定的 程式需要燒錄到開發板,那麼寫 時就需要按照這個開發板的電路來寫,因為關係到一些資源的分配,電路圖也沒提供 這個問題應該問了兩次了吧,這樣問問題誰能...
微控制器讀取18B20的溫度,請問微控制器與18B20之間的連線最長多少米?我想達到100米需加放大電路嗎
1000米都是沒有問題的,一般的微控制器工作的頻率不會到100mhz,8051最常用的就是12mhz的晶振 12mhz的頻率專,四根之間不用都考慮什 屬麼波形變形什麼的,而且,100米的線能有多少電阻的,100歐都不到,不需要什麼上拉電阻的,除非是電路本身就是需要有上拉電阻的,當然了,加一個上拉是好...
求 微控制器控制的16路彩燈彙編源程式
位為1時亮燈 其實原理就是單i o口的移位處理,只不過是要銜接處理start mov a,80h mov p0,0 mov p1,0 rlp0 處理p0口rl a mov p0,a acall delay jnb acc.7,rlp0 mov p0,0 rlp1 處理p1口rl a mov p1,a...