TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430F5529驱动DTH11的问题

程序源码如下:

1.main.c

#include <msp430.h>
#include <stdio.h>
#include "DTH11.h"
#include "oled.h"

unsigned char tem[10], hum[10];

int main(void) {WDTCTL = WDTPW + WDTHOLD;	// Stop watchdog timerUCSCTL3 = SELREF_2;		//设置FLL的参考时钟源为REFOCLK		典型值为32768Hz
	/*配置FLL分频倍频系数*/
	__bis_SR_register(SCG0);	//禁止FLL
	UCSCTL1 = DCORSEL_5;		//设置DCO频率范围
	UCSCTL2 |= 762;				//设置DCO频率为25MHz			UCSCTL2用于设置FLL分频、倍频系数
								//计算公式: (762 + 1) * 32768 = 25MHz
	UCSCTL2 |= FLLD_0;
	__bic_SR_register(SCG0);	//启动FLL

	DTH11_Initial();
	OLED_Init();

	/*Use for debug*/
	P8DIR |= BIT1;
	P8OUT |= BIT1;
	
	while(1)
	{
		RH();
		OLED_ShowString(16,0,"DTH11 TEST");

		sprintf (tem, "Tem : %d", U8T_data_H);
		OLED_ShowString(0,2,tem);

		sprintf (hum, "Hum : %d", U8RH_data_H);
		OLED_ShowString(0,4,hum);
		Delay_100us(10000);
	}
}

2.DTH11.c

#include "DTH11.h"
/*GLOBAL VARIBALE*/
unsigned char U8FLAG;
unsigned char U8temp;
unsigned char U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
unsigned char U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
unsigned char U8comdata = 0;

void DTH11_Initial()
{
	P2DIR |= BIT0;
	P2OUT |= BIT0;
}

void Delay_100us(unsigned int i)
{
	unsigned int j;
	for (; i > 0; i--)
		for (j = 0; j < 347; j++);
}

void Delay_10us()
{
	unsigned char i = 53;
	for(;i > 0; i--);
}

void COM(void)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		U8FLAG=2;
		while((!(P2_0IN))&&U8FLAG++);
		Delay_10us();
		Delay_10us();
		Delay_10us();
		U8temp=0;
		if(P2_0IN)U8temp=1;
		U8FLAG=2;
		while((P2_0IN)&&U8FLAG++);
		if(U8FLAG==1)break;

		U8comdata <<= 1;
		U8comdata |= U8temp;
	}
}

void RH(void)
{
	unsigned int i, j;
	P2_0L;

	for (i = 180; i > 0; i--)
			for (j = 0; j < 347; j++);

//	P2_0H;
	Delay_10us();
	Delay_10us();
	Delay_10us();
	Delay_10us();

	if(!(P2_0IN))
	{
		U8FLAG=2;
		while((!P2_0IN)&&U8FLAG++);
		U8FLAG=2;
		while((P2_0IN)&&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设为输出
		P2_0H;

		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;
		}//fi
	}//fi
}

3.DTH11.h

#ifndef SRC_DTH11_H_
#define SRC_DTH11_H_
#include <msp430f5529.h>

#define P2_0L (P2OUT &= ~BIT0)
#define P2_0H (P2OUT |= BIT0)
#define P2_0IN (P2IN & BIT0)

void DTH11_Initial();
void Delay_100us(unsigned int i);
void Delay_10us();
void COM(void);
void RH(void);

extern unsigned char U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;

#endif

在查看寄存器的时候,无论经过多少遍循环,打个断点停下来,发现所有的变量的value都是“.”,截图如下:

逻辑分析仪测到的数字波形如下:

对比数据手册后,发现数据是对的,就是单片机对读到的数据不对,变量的值不会改变。

比如我将断点打在

        U8FLAG=2;
        while((!(P2_0IN))&&U8FLAG++);

上面的那行,执行以后,看变量U8FLAG的变量依然是没有,值也不显示,现在没办法DEBUG了,求助各位大神!!

灰小子:

用的是DHT11吧?

硬件链接有没有问题?或者换一个DHT11试试

Retrdxt:

回复 灰小子:

嗯,是的,不是DTH11硬件的问题吧,我逻辑分析仪都能够采出来序列呀~

大腿你那里有没有5529驱动DTH11的Project呀?或者能不能帮我调试一下呀~

Retrdxt:

回复 灰小子:

还有一段OLED的代码我没加进去,我觉得问题不大,寄存器里读出来的数据都没有,所以我没办法Debug了。

HG:

如果是“.”,右击Value那里的点,重新选择数据格式看看

zefeng Pan:

这个问题真的好难 你解决了吗,我挺想知道怎么回事的,可否说说

灰小子:

回复 zefeng Pan:

这类问题没有太好的办法,建议用逻辑分析仪观察时序,然后和手册里的时序对比

zefeng Pan:

都不能再2.1口采集到波形  

zefeng Pan:

回复 灰小子:

用5529LP的板子设置,都不能用示波器在P2.1口子采集到波形,是不是意味着程序设置2.1时就有问题啊?设置成2.2可以吗

赞(0)
未经允许不得转载:TI中文支持网 » MSP430F5529驱动DTH11的问题
分享到: 更多 (0)

登录

注册