#include"My_Include.h"
extern BEEP_VARIABLES_STU Beep_Variables;
DHT11_DATA_STU DHT11_Data;
void Get_TH_From_DHT11(void)
{
INT8U i,j,DHT11_Data_Box[5] = {0,0,0,0,0};
if(DHT11_Data.Data_Each.Signal_Del < 4) //微处理器的 I/O 设置为输出同时输出低电平,且低电平保持时间不能小于 18ms,实际延时30~40ms
{
DHT11_Data.Data_Each.Signal_Del ++;
DHT11_DATA_OUTPUT = 0;
SET_DHT11_DATA_OUTPUT;
}
else
{
SET_DHT11_DATA_INPUT;
if(DHT11_Data.Data_Each.Error_Del < 3)
{
DHT11_Data.Data_Each.Error_Del ++;
}
else
{
DHT11_Data.Data_Each.Sensor_Status = SENSOR_ERROR;
}
//等待应答信号到来
j = 0;
while(DHT11_DATA_INPUT && (j < 250))
{
j ++;
}
if(j > 249)
{
goto LAB1;
}
//应答信号来了
//首先来个低电平
j = 0;
while((DHT11_DATA_INPUT == 0) && (j < 250)) //等待DHT11输出的0电平结束
{
j ++;
}
if(j > 249)
{
goto LAB1;
}
//再来个高电平
j = 0;
while(DHT11_DATA_INPUT && (j < 250)) //等待DHT11输出的1电平结束
{
j ++;
}
if(j > 249)
{
goto LAB1;
}
//以下程序在DHT11应答正常后执行
for(i = 0;i < 40;i ++)
{
//检测低电平时间
j = 0;
while((DHT11_DATA_INPUT == 0) && (j < 250))
{
j ++;
}
if(j > 249)
{
goto LAB1;
}
GIE = 0;
for(j = 0;j < 7;j ++)
{
asm("nop");asm("nop");asm("nop");
}
if(DHT11_DATA_INPUT)
{
DHT11_Data_Box[i / 8] |= BIT(7 - (i % 8));
}
GIE = 1;
j = 0;
while(DHT11_DATA_INPUT && (j < 250))
{
j ++;
}
if(j > 249)
{
goto LAB1;
}
}
i = DHT11_Data_Box[0] + DHT11_Data_Box[1] + DHT11_Data_Box[2] + DHT11_Data_Box[3];
if(i != DHT11_Data_Box[4])
{
goto LAB1;
}
//走到这步,说明接收正确,则进行数据处理
Beep_Variables.Variable_Each.Beep_PWM_Period_Change_Index = 4;
DHT11_Data.Data_Each.Humidity_Mux10 = DHT11_Data_Box[0];
DHT11_Data.Data_Each.Temperature_Mux10 = DHT11_Data_Box[2];
DHT11_Data.Data_Each.Error_Del = 0;
DHT11_Data.Data_Each.Sensor_Status = SENSOR_OK;
//读取结束处理
LAB1:
SET_DHT11_DATA_INPUT;
DHT11_Data.Data_Each.Read_Del = 0;
}
}
DHT11.rar_dht11程序
版权申诉
22 浏览量
2022-09-24
22:51:39
上传
评论
收藏 1KB RAR 举报
钱亚锋
- 粉丝: 90
- 资源: 1万+