[求助] DHT11数据发送的问题

有容乃大   2016-10-5 16:55 楼主
请问各位大大,本人最近在玩DHT11 ,想用串口把数据发送到电脑的串口助手上来,如果发送自己给的具体的数值时就可以,但是要发送DHT11返回的值的时候就无法正常显示了 ,然后我在DHT11的子函数里加了亮一个灯的语句,灯是可以亮的,我一下找不出问题在哪里,望指教!
DHT11的子函数代码是这样的:
int DHT11()
{
uchar  U8RH_data_H_temp,U8RH_data_L_temp,U8T_data_H_temp,U8T_data_L_temp,U8checkdata_temp;
int H1;
  //主机拉低18ms
   P2_0=0;
   delay1ms(60);
   P2_0=1;
//总线由上拉电阻拉高 主机延时20us
   delay1us(0);
//   Delay_10us();
//   Delay_10us();
//主机设为输入 判断从机响应信号
   P2_0=1;
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行   
   if(!P2_0)   //T !   
   {
   U8FLAG=2;
//判断从机是否发出 80us 的低电平响应信号是否结束  
   while((!P2_0)&&U8FLAG++);
   U8FLAG=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
   while((P2_0)&&U8FLAG++);
//数据接收状态   
   COM();
   U8RH_data_H_temp=U8comdata;
   COM();
   U8RH_data_L_temp=U8comdata;
   COM();
   U8T_data_H_temp=U8comdata;
   COM();
   U8T_data_L_temp=U8comdata;
   COM();
   U8checkdata_temp=U8comdata;
   P2_0=1;
  // H1=U8T_data_H_temp;
//数据校验
   U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
   if(U8temp==U8checkdata_temp)
   {
    H1=U8T_data_H_temp;
   }
   }//fi
   return(H1);
}

回复评论 (2)

没毛病
点赞  2016-10-5 21:26
  1. void Read_DHT11(void)
  2. {
  3.         //主机拉低20ms
  4.         DHT11_IO        =        0;
  5.         Delay10ms();
  6.         Delay10ms();
  7.         DHT11_IO        =        1;
  8.         //总线由上拉电阻拉高 主机延时20us
  9.         Delay_10us();
  10.         Delay_10us();

  11.         //主机设为输入 判断从机响应信号
  12.         DHT11_IO        =        1;
  13.         //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行         
  14.         if(!DHT11_IO)
  15.         {
  16.                 u8FLAG = 2;
  17.                 //判断从机是否发出 80us 的低电平响应信号是否结束         
  18.                 while((!DHT11_IO)&&u8FLAG++);
  19.                 u8FLAG = 2;
  20.                 //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
  21.                 while((DHT11_IO)&&u8FLAG++);
  22.                 //数据接收状态                 
  23.                 Recive_Data();
  24.                 u8RH_data_H_temp = u8comdata;
  25.                 Recive_Data();
  26.                 u8RH_data_L_temp = u8comdata;
  27.                 Recive_Data();
  28.                 u8T_data_H_temp  = u8comdata;
  29.                 Recive_Data();
  30.                 u8T_data_L_temp  = u8comdata;
  31.                 Recive_Data();
  32.                 u8checkdata_temp = u8comdata;
  33.                
  34.                 DHT11_IO = 1;
  35.                 //数据校验

  36.                 u8temp = (u8T_data_H_temp +
  37.                                                         u8T_data_L_temp +
  38.                                                         u8RH_data_H_temp +
  39.                                                         u8RH_data_L_temp);
  40.                
  41.                 if(u8temp == u8checkdata_temp)
  42.                 {
  43.                         u8RH_data_H = u8RH_data_H_temp;//湿度整数部分
  44.                         u8RH_data_L = u8RH_data_L_temp;//湿度小数部分
  45.                         u8T_data_H  = u8T_data_H_temp; //温度整数部分
  46.                         u8T_data_L  = u8T_data_L_temp; //温度小数部分
  47.                         u8checkdata = u8checkdata_temp;//校验位
  48.                 }
  49.         }
  50. }
点赞  2016-10-5 21:27
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复