dht11温湿度传感器数据读取 - 仪器网
dht11温湿度传感器数据读取
Y小资酒吧Y
2018-11-23
晶振11.0592波特率57600单片机STC89C52RC调试发现可以读取数据但读取到的数据是错的可能是时序图错了求大神帮忙看看//6ÔÂ1ÈÕ//ʵÏÖ¶... 晶振11.0592 波特率57600 单片机STC89C52RC
调试发现可以读取数据 但读取到的数据是错的 可能是时序图错了 求大神帮忙看看
//6ÔÂ1ÈÕ
//ʵÏÖ¶ÁÈ¡dhtÊý¾Ý²¢ÒÔ×Ö·û´®ÐÎʽ·¢Ë͵½´®¿Ú
#include
#include
sbit dht=P2^0;
void SendStr(unsigned char *s);
void SendByte(unsigned char dat);
void getdata(void);
void dht11(void);
void Delayms(unsigned int i);
void Delay_10us(void);
unsigned char checkdata_temp=0,checkdata=0;
unsigned char RH_DATA_H_temp=0,RH_DATA_H=0;
unsigned char RH_DATA_L_temp=0,RH_DATA_L=0;
unsigned char T_DATA_H_temp=0,T_DATA_H=0;
unsigned char T_DATA_L_temp=0,T_DATA_L=0;
unsigned char DATA;
unsigned char temp;
void Delayms(unsigned int i) //延时0.1ms
{
unsigned char j;
for(;i>0;i--)
for(j=0;j<27;j++);
}
void Delay_10us(void) //延时10us
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void InitUART(void )
{
TMOD &=0X0F;
PCON |=0X80;
TMOD |=0X20;
REN=0;
SM0=0;
SM1=1;
TL1=TH1=0xff; //波特率57600,晶振11.0592
EA=1;
TR1=1;
ES=0;
}
void UARA_SER(void) interrupt 4
{
if(RI)RI=0;
if(TI)TI=0;
}
void SendStr(unsigned char *s) //发送一个字符串
{
while(*s!='\0')
{
SendByte(*s);
s++;
}
}
void SendByte(unsigned char dat) //发送一个字节
{
ES=0;
SBUF=dat;
while(!TI);
ES=1;
TI=0;
}
void dht11(void) //读取温湿度数据
{
dht=0;
Delayms(180);
dht=1;
Delay_10us();
Delay_10us();
Delay_10us();
Delay_10us();
dht=1;
if(dht==0)
{
while(!dht);
while(dht);
getdata();
RH_DATA_H_temp=DATA;
getdata();
RH_DATA_L_temp=DATA;
getdata();
T_DATA_H_temp=DATA;
getdata();
T_DATA_L_temp=DATA;
getdata();
checkdata_temp=DATA;
}
temp=RH_DATA_H_temp+RH_DATA_L_temp+T_DATA_H_temp+T_DATA_L_temp;
if(temp==checkdata_temp)
{
RH_DATA_H=RH_DATA_H_temp;
RH_DATA_L=RH_DATA_L_temp;
T_DATA_H=T_DATA_H_temp;
T_DATA_L=T_DATA_L_temp;
checkdata=checkdata_temp;
}
}
void getdata(void) //读取8bit数据
{
unsigned char i=0;
for(i=0;i<8;i++)
{
while(!dht);
Delay_10us();
Delay_10us();
Delay_10us();
DATA<<=1;
if(dht)
{
DATA|=0x01;
SendStr("1");
}
else
{
DATA|=0x00;
SendStr("0");
}
}
}
void main(void)
{
unsigned char text[4]={"TEXT"};
Delayms(20000);
InitUART();
while(1)
{
dht11();
text[0]=RH_DATA_H/10+0X30;
text[1]=RH_DATA_H%10+0X30;
text[2]=T_DATA_H/10+0X30;
text[3]=T_DATA_H%10+0X30;
SendStr(text);
SendStr("\r\n");
Delayms(65535);
}
}
全部评论
您可能感兴趣的社区主题
评论
选购仪器 上yiqi.com
仪器网络推广
品牌网上传播
长按识别二维码查看信息详情