本篇文章對於dht11進行測試,並且提供程式思路
先看一下dht11的資料
目前dht11讀出的濕度小數和溫度小數都為0(和dht11的版本有關),它採用單匯流排協議,但是和ds18b20的不同在於,它沒有複雜的控制位元組,以及裝置編碼,還有就是諸如eeprom和溫度上下限等特殊儲存功能,相比之下操作更簡單一些。並且可以一次讀出濕度和溫度,比較方便。
下面看一下具體時序操作
首先主機要拉低匯流排至少18ms,並且主機可以馬上拉高匯流排,等待dht的響應訊號,在響應訊號後,它會有一段準備時間(dht拉高匯流排),然後再拉低匯流排開始傳送資料,每一bit資料都以50us低電平時隙開始,高電平的長短定了資料位是0還是1.格式見下面圖示。
這個其實也比較好解決,可以在傳送資料的時候等待高電平的到來,到來後等待60us(這個時間不是隨意的,不能超過76-78,也就是50us+(26或28)),這個時候如果再去讀取,電平為低的話,則為0,電平為高的話,則為1,然後再等待高電平過去。這個思想很好,可以好好想一下。下面提供程式思路
#include "dht11.h"
void delay19ms()
while (--j);
} while (--i);
}void delay60us()
while (--i);
}//資料傳輸
uchar read_dat()
//如果資料是0的話,就直接跳過了,去執行while( !dq )來等待剩餘的越20us低電平過去,並且進行下一次傳送
//如果資料是1的話,就等待高電平過去,然後執行while( !dq )來等待50us的低電平過去,並且進行下一次傳送
while( dq );
} return( dat ); }
/*響應訊號是dht11拉低匯流排 準備訊號是dht11拉高匯流排*/
uint read_dht11()
這個程式其實是不好的,因為沒有加超時退出,即如果條件沒有達到,會卡死程式,一般調好了,不會出現這個問題,所以,要想更完美點,就加上超時退出就行了。
下面是串列埠收到的資料
DHT11除錯程式
一 主程式 while 1 二 模組除錯函式 include bsp dht11.h include delay.h include bsp 485.h 函式名 dht11 gpio config 描述 配置dht11用到的i o口 輸入 無 輸出 無 static void dht11 in in...
DHT11程式設計
通訊協議 單匯流排 測量範圍 20 90 0 50 精度 5 2 data 資料引腳用於微處理器與dht11之間的通訊和同步,採用單匯流排資料格式,一次通訊時間4ms左右,資料分小數部分和整數部分,具體格式在下面說明,當前小數部分用於以後擴充套件,現讀出為零。操作流程如下 一次完整的資料傳輸為40b...
DHT11 模組的使用
dht11模組 資料線是單線雙向 一次完整的資料傳輸為40bit 高位先出 資料格式 8bit濕度整數資料 8bit濕度小數資料 8bi溫度整數資料 8bit溫度小數資料 8bit校驗和 資料傳送正確時校驗和資料等於 8bit濕度整數資料 8bit濕度小數資料 8bi溫度整數資料 8bit溫度小數資...