- 7
- 0
- 约3.71千字
- 约 4页
- 2018-05-05 发布于河南
- 举报
DHT11_mega8程序详解
/****************************DHT11.h文件*********************************/
#ifndef _DHT11_H_
#define _DHT11_H_
void Delay_10us_DHT();
void DelaymS(unsigned int );
unsigned char COM();
extern unsigned int DHT11_Read();//读取温湿度函数,直接调用即可,高8位湿度,低8位温度
#endif
/*************************DHT11.c文件*****************************/
/***************8M晶振 mega8 基于AVRstudio 6.0*****************/
#include avr/io.h
#includeDHT11.h
#includeavr/signal.h //中断服务头文件
/************DHT IO***********/
#define DHTin DDRC=0xEF
#define DHTout DDRC|=0x10
#define DHT (PINC0x10)
#define DHTH PORTC|=0x10
#define DHTL PORTC=0xEF
/****************************************
作用:延时10us
注意:仅在8Mhz AVR studio环境下时的延时
****************************************/
void Delay_10us_DHT()
{
unsigned int i=19;
asm(nop);
while(i0){i--;}
/* unsigned int i;
for ( ; i10; i1--)
{
asm(nop);
//for (i=0; i2100; i++);
}*/
}
/**************************************
函数作用:精确延时nms
注意:仅在8M下,AVR studio环境下
**************************************/
void DelaymS (unsigned int dly)
{
unsigned int i;
for ( ; dly0; dly--)
{
asm(nop);
for (i=0; i2100; i++);
}
}
/***************************************
作用:读取8位数据
说明:有两种方法实现
****************************************/
unsigned char COM()
{
unsigned char i,U8comdata,U8temp;
unsigned char U8FLAG;
unsigned int i1=0;
for(i=0;i8;i++)
{
U8FLAG=2;
while((!DHT)U8FLAG++);
if(U8FLAG==1){break;}
/**************方法一**************/
i1=1;
while(i1)
{
i1++;
if(!DHT)break;
}
U8temp=0;
//26-28us高电平为0 70us高电平为1
if(i150)U8temp=1;
/****************方法二****************/
/*
Delay_10us_DHT();
Delay_10us_DHT();
Delay_10us_DHT();
U8temp=0;
if(DHT)U8temp=1;
U8FLAG=2;
while((DHT)U8FLAG++);
if(U8FLAG==1){break;}//超时则跳出循环
*/
U8comdata=1;
U8comdata|=U8temp;
}//rof
return U8com
原创力文档

文档评论(0)