请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP430F5529 我尝试对DHT11湿度和温度传感器进行连续读数,实际上它只是读数一次。 当我在LCD_wr_byte (RXBUF5)行后面加上一段时间(1)时,就会注意到在第一个读数中没有问题。 如您所见,RXBUF5 (校验和)给出了RXBF1 (湿度整数),RXBUF2 (湿度小数),RXBUF3 (温度整数)和RXBUF4 (温度小数)的总和,作为测试,我只需在LCD上写入RXBUF5。 但是当我取出while (1)时,我的想法是让传感器以大约3秒的时间间隔(由延迟表示)执行连续读数, 但它只在第一次读取时才读取,因为当它离开进行第二次读取时,它只是在DO { cont1++;}中停止 而(P3IN & BIT4)== BIT4)线,即,就像传感器将线下拉(到目前为止良好),然后将线上拉(也正常),但不会再次将线下拉以开始比特的传输。 对于尚未了解DHT11协议(1-Wire协议)的用户,以下是一个示例:
代码:
int main (void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
config_timerA0();// LCD的时间
CONFIG_I2I2();//LCD通信
lcdIniti();//LCD初始化
lcdBacklightON();//lcd
LCD_RS_RW();//LCD
port_out ();//WFP 3.4 = out
config_timera1();//计时器,使该行持续20毫秒
而(1){
P3OUT &=~BIT4;//启动信号
TA1R = 0;
while ((TA1CCTL0和CCIFG)== 0);//20 ms?
P3OUT |= BIT4;
Port_In();//WFP 3.4 =英寸
while ((P3IN和BIT4)= 1);
//DHT11回复
执行{
cont1++;
} 同时((P3IN和BIT4)=0);
如果(cont1 <= 10){//<= 80 us?
cont1 = 0;
执行{
cont1++;
} 而((P3IN和BIT4)== BIT4);//在第二个读数时出现问题,始终在此处停止
如果(cont1 <= 10){//<= 80 us?
yume_integer();//在RXBUF1上写入
HUEST_DECIMAL();//在RXBUF2上写入
temperature_integer();//在RXBUF3上写入
temperature_decimal();//在RXBUF4上写入
checksum();//在RXBUF5上写入
IF (((RXBUF5)==(RXBUF1 + RXBUF2 + RXBUF3 + RXBUF4)){
LCD_wr_Byte (RXBUF5);//在LCD上测试
//while (1);
}
RXBUF1 = 0;
RXBUF2 = 0;
RXBUF3 = 0;
RXBUF4 = 0;
RXBUF5 =0;}
}
//我不认为这些延迟会是问题,因为我已经尝试使用计时器,但它不起作用。
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
延迟(2万);
port_out ();
}
返回0;}
void port_out (){
P3DIR |= BIT4;
}
void port_in(){
P3DIR &=~BIT4;
P3REN |= BIT4;
P3OUT |= BIT4;
}
有人能帮我吗?

