一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 1564|回复: 3

[其他综合] 毫无反映的DHT11代码,是不是我理解的太简单了,请大神看看

[复制链接]
发表于 2013-12-8 22:42 | 显示全部楼层 |阅读模式
#define DHT_H_1 PORTD|=(1<<PD7)
#define DHT_L_0 PORTD&=~(1<<PD7)
#define DHT_Out_1 DDRD|=(1<<PD7)
#define DHT_in_0 DDRD&=~(1<<PD7)
uchar DHT_Read()
{
uchar i,Data1=0;
for (i=0;i<8;i++)
{
  while(PIND7==0);//等待数据开始的低电平结束
  _delay_us(28); //等待28us
  Data1<<=1;
  
  if (PD7==1)//如果等待28us后 pin7为高电平该信号为1
  {
   Data1|=0x01;
  }
  else
  {
   Data1|=0x00;
  }
  while(PIND7==0);//等待结束低电平结束,以便开始下一个数据的接收
}
return Data1;
}
void DHT_Data()
{
  uchar i;
  DHT_Out_1;//DDR pin7输出
  DHT_L_0; // 把pin7高电平拉低
  _delay_ms(18);//拉低持续2ms,资料上说是拉低大于1ms
  DHT_H_1;//释放pin7
  DHT_in_0;//设置pin7为输入
  DHT_H_1;
  _delay_us(25);//总线由上拉电阻拉高主机延时 >20us等待25us以便DHT应答
  if(PIND7==0)//检测pin7状态。DHT是否拉低PIN7响应
  {  
   while(PIND7==0)//等待DHT拉低PIN7 80us
   while(PIND7==1)//等待DHT释放PIN7 80us
   for (i=0;i<5;i++)//开始数据传输
   {
    TempData[i]=DHT_Read();
   }   
  }
}  
发表于 2013-12-8 23:04 | 显示全部楼层
DHT11如果时序不对,就会进入死循环
回复

使用道具 举报

 楼主| 发表于 2013-12-8 23:08 | 显示全部楼层
我用的AS6.0里面自己带的延迟函数,应该是延迟准确的吧,时序写注视的时候跟着资料又检查了一遍,没找出什么问题,所以才来发帖
回复

使用道具 举报

发表于 2013-12-9 12:50 | 显示全部楼层
中断做吧,可能会好一点...
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-1 04:22 , Processed in 0.036697 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表