本人测量温湿度用stm8S系列单片机跑DHT22温湿度传感器是成功的,但是换成stm8l系列单片机就不成功了。为什么呢?
程序是这样子的;运行到while(!DAT)的时候直接跳出不读取数据.....
谁能解答。引脚配置没问题
void RH() //接收温度湿度加校验
{
DAT_OUT; //端口设置为输出模式
DAT_L; //主机拉低
delay_ms(3);
DAT_H;
delay_us(10);
DAT_IN; //主机设为输入 判断从机响应信号
if(DAT) FLAG=1; //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行
while(!(DAT))
{
FLAG=2;
while((!(DAT))&&FLAG++);//判断从机是否发出 80us 的低电平响应信号是否结束
if(FLAG==1)break;
FLAG=2;
while((DAT)&&FLAG++); //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
if(FLAG==1)break;
COM(); //数据接收状态
if(FLAG==1)break;
RH_H=comdata; //湿度的高8位数据
COM();
if(FLAG==1)break;
RH_L=comdata; //湿度的低8位数据
COM();
if(FLAG==1)break;
T_H=comdata; //温度的高8位数据
COM();
if(FLAG==1)break;
T_L=comdata; //温度的低8位数据
COM();
if(FLAG==1)break;
check=comdata; //校验字节数据
break;
}
DAT_H; //数据校验
check_number=(T_H+T_L+RH_H+RH_L);
if(check_number==check) //若校验通过
{
temp = ((T_H*256+T_L)/100)*10+(T_H*256+T_L)/10%10; //合成并暂存16位温度数据 包括小数点后一位
humid = ((RH_H*256+RH_L)/100)*10+(RH_H*256+RH_L)/10%10; //合成并暂存16位湿度数据
}
DAT_H;
}//读取模块周期不能小于2s
|