DHT11程式分析和測試

2021-09-11 10:49:41 字數 1341 閱讀 8306

本篇文章對於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溫度小數資...