- #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();
- }
- }
- }
复制代码
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
小弟也是刚学AVR,不知道里面的有些语法对不对,用的环境是as6.0,比如说if(PIND7==0)//这样的语法来检查pin7的电平高低是否正确。
一周热门 更多>