请问各位大大,本人最近在玩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);
}
此帖出自
小平头技术问答
- void Read_DHT11(void)
- {
- //主机拉低20ms
- DHT11_IO = 0;
- Delay10ms();
- Delay10ms();
- DHT11_IO = 1;
- //总线由上拉电阻拉高 主机延时20us
- Delay_10us();
- Delay_10us();
- //主机设为输入 判断从机响应信号
- DHT11_IO = 1;
- //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
- if(!DHT11_IO)
- {
- u8FLAG = 2;
- //判断从机是否发出 80us 的低电平响应信号是否结束
- while((!DHT11_IO)&&u8FLAG++);
- u8FLAG = 2;
- //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
- while((DHT11_IO)&&u8FLAG++);
- //数据接收状态
- Recive_Data();
- u8RH_data_H_temp = u8comdata;
- Recive_Data();
- u8RH_data_L_temp = u8comdata;
- Recive_Data();
- u8T_data_H_temp = u8comdata;
- Recive_Data();
- u8T_data_L_temp = u8comdata;
- Recive_Data();
- u8checkdata_temp = u8comdata;
-
- DHT11_IO = 1;
- //数据校验
- u8temp = (u8T_data_H_temp +
- u8T_data_L_temp +
- u8RH_data_H_temp +
- u8RH_data_L_temp);
-
- if(u8temp == u8checkdata_temp)
- {
- u8RH_data_H = u8RH_data_H_temp;//湿度整数部分
- u8RH_data_L = u8RH_data_L_temp;//湿度小数部分
- u8T_data_H = u8T_data_H_temp; //温度整数部分
- u8T_data_L = u8T_data_L_temp; //温度小数部分
- u8checkdata = u8checkdata_temp;//校验位
- }
- }
- }
复制代码一周热门 更多>