Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

MSP430F5529驱动DTH11的问题

$
0
0

程序源码如下:

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 timer

    UCSCTL3 = 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了,求助各位大神!!


Viewing all articles
Browse latest Browse all 3634

Trending Articles