今天想做一个DHT11的实验,不小心把DHT11的VCC和GND接反了,一会儿就发烫了,结果改过来后DHT11始终没有响应,数据口一直是高电平,不知道是我把DHT11烧了还是程序有问题,下面是程序,谢谢。
#define uchar unsigned char
#define uint unsigned int
#define DHT11 PA0
#define DHT11_SET PORTA.0=1
#define DHT11_CLE PORTA.0=0
#define DHT11_IN DDRA.0=0
#define DHT11_OUT DDRA.0=1
#define DHT11_S PINA.0
uchar U8T_Data_H,U8T_Data_L,U8RH_Data_H,U8RH_Data_L,U8Checkdata;
uchar U8DHTData[5],U8Temp;
void ReData(void) //接受5个字节的数据
{
uchar i,j,m;
for(i=0;i<5;i++)
{
U8DHTData[i]=0x00; //先默认为0,
for(j=0;j<8;j++)
{
while(!DHT11_S);//等待高电平的到来 一旦出现高电平就开始计数
delay_us(60); //延迟60微秒后 如果还是高电平则此位为1 否则为0
if(DHT11_S)
{
U8DHTData[i]|=(1<<(7-j));
}
}
}
}
void DHT_GetData(void)
{
uchar i,DHT11_Temp;
DHT11_CLE;
DHT11_OUT;
delay_ms(20);
DHT11_SET;
DHT11_IN;
delay_us(40); //适当延迟后判断是否有低电平响应信号
DHT11_Temp=DHT11_S;
if(!DHT11_Temp)
{
while(!DHT11_Temp); //等待低电平信号结束
while(DHT11_Temp); //此高电平结束后的低电平信号为数据开始信号
ReData(); //接受数据
DHT11_SET;
DHT11_OUT;// 输出拉高 读取数据结束
U8Temp=(U8DHTData[0]+U8DHTData[1]+U8DHTData[2]+U8DHTData[3]);
//
if(U8DHTData[4]==U8Temp)
{
U8RH_Data_H=U8DHTData[0];
U8RH_Data_L=U8DHTData[1];
U8T_Data_H=U8DHTData[2];
U8T_Data_L=U8DHTData[3];
}
}
} |