晶振12M,波特率设置的2400,打印就不出来,更别提别的数据了。
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
sbit Temp_data = P3^6;
void DHT11_start();
unsigned char DHT11_rec_byte();
void DHT11_receive();
void DHT11_delay_us(unsigned char n);
void DHT11_delay_ms(unsigned int z);
void InitUART(void);
unsigned int rec_dat[4];
void main()
{
InitUART();
P1 = 0Xf0;
EA = 1;
while(1)
{
DHT11_delay_ms(150);
DHT11_receive();
printf("Humi:%d.%d\n",rec_dat[0],rec_dat[1]);
printf("Temp:%d.%d C\n",rec_dat[2],rec_dat[3]);
}
}
void DHT11_start()
{
Temp_data =1;
DHT11_delay_us(2);
Temp_data =0;
DHT11_delay_ms(20);
Temp_data =1;
DHT11_delay_us(13);
}
unsigned char DHT11_rec_byte()
{
unsigned char i,dat;
for(i=0;i<8;i++)
{
while(!Temp_data);
DHT11_delay_us(8);
dat<<=1;
if(Temp_data ==1)
{
dat+=1;
}
while(Temp_data);
}
return dat;
}
void DHT11_receive()
{
unsigned int R_H,R_L,T_H,T_L;
unsigned char RH,RL,TH,TL,revise;
DHT11_start();
Temp_data =1;
if(Temp_data == 0)
{
while(Temp_data == 0);
DHT11_delay_us(40);
R_H=DHT11_rec_byte();
R_L=DHT11_rec_byte();
T_H=DHT11_rec_byte();
T_L=DHT11_rec_byte();
revise=DHT11_rec_byte();
DHT11_delay_us(25);
if((R_H+R_L+T_H+T_L)==revise)
{
RH=R_H;
RL=R_L;
TH=T_H;
TL=T_L;
}
rec_dat[0]=RH;
rec_dat[1]=RL;
rec_dat[2]=TH;
rec_dat[3]=TL;
}
}
void DHT11_delay_us(unsigned char n)
{
while(--n);
}
void DHT11_delay_ms(unsigned int z)
{
unsigned int i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
void InitUART(void)
{
SCON=0x50;
REN =1;
TMOD = 0x20;
TH1 = 0xE6; // ??????V1.3???2400???????
TL1 = TH1; // ???????????
PCON = 0x80; // ????????
T1 =1;
TR1 =1;
}
|