亚洲网站在线免费观看,欧美性运动视频免费观看网站,国产精品爽爽久久,熟女少妇丰满一区二区

問答

DS18B20在完成一個寫時序時,是必須將數據線從高電平拉低來啟動嗎?那為什么這段程序中沒有電平的轉換?

提問者:ZL6VwMU2013-12-15 00:00

/*********寫一個字節子函數(寫0 寫1)***********************/ void writebyte(unsigned char dat) { unsigned char a,b; for(a=0;a<8;a++) { dat2=dat&0x01; dat=dat>>1; if(dat2)//寫1 { DQ=0;b++;b++; DQ=1;delay(8); } else//寫0 { DQ=0;de

最佳答案

首先,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; }然后0628單片機是如何讀取DS18B20輸出的某1bit信息的呢?在具體回答前先明確一點,這一過程必須在單片機拉低數據線,發起讀數據過程之后的15微秒(us)內完成284否則讀不到正確數據(注意:發起通信時總是由單片機將數據總線先拉低uycg沒有通信時數據總線保持高電平狀態)4下面說說具體過程: 1、單片機將數據總線拉低; 2、延時2us;(這一時間必須大于1us,否則DS18B20無法識別拉低信號;也不能過大,超過15us無法正確讀數6) 3、將單片機與DS18B20相連的IO口輸入輸出方向設為輸入;(這一步也有可能是單片機直接將數據線拉高,因芯片的不同而不同) 4、延時2us;(給DS18B20一定的時間輸出信號) 5、讀取數據總線上的電平值; 6、拉高數據總線,延時一段時間后進入下1bit的讀取。 注意:這里能否正確讀取的關鍵是延時的量是否足夠精確,因此在用C語言寫DS18B20程序之前,需要先根據單片機型號和晶振頻率找出一個自己對延時的精度有足夠把握的延時函數,隨便在網上DOWN別人的程序很有可能因為延時不對跑不起來。參考資料:DS18B20數據手冊

回答者:lock94r74302016-12-15 00:00

DS 5相關問題

相關閱讀

DS 5頻道

報價:21.99-34.59
級別:中型車
排量:1.6T 1.8T 
變速箱:-

車友關注

最新標簽

按字母分類:
ABCDEFGHIJKLMNOPQRSTWXYZ0-9