关于用MSP430F149测温湿度和风速的问题,温湿度传感器用的是DHT11(直接输出数字信号),风速采集的是模拟信号经过AD转换后输出。现在问题是用串口调试助手调试时显示的全是0(完全没有按指定的数据帧格式输出,不过在测试时风速传感器没有接单片机(不知道有没有影响)),但如果把风速那块程序注释掉,又可以按指定的格式输出。代码如下:
#include
//#include"dht11.h"
//#include"uart0.h"
#include"Config.h"
#include
chars[40];
voiddelayus(unsignedintn);
typedefunsignedintU16;
typedefunsignedcharU8;
unsignedcharU8FLAG,k;
unsignedcharU8count,U8temp;
unsignedcharU8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
unsignedcharU8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
unsignedcharU8comdata;
unsignedcharoutdata[5];//定义发送的字节数
unsignedcharindata[5];
unsignedcharcount,count_r=0;
unsignedintU16temp1,U16temp2;
uintTEMP0=0;//ADC值暂存变量
ucharValue[9];
uintCount=0;//时间计数变量
voidVoltage_do(uchartemp0,uchartemp1,uchartemp2,uchartemp3,uinttemp4)
{
Value[0]=0XAA;
Value[1]=0X05;
Value[2]=temp0;
Value[3]=temp1;
Value[4]=temp2;
Value[5]=temp3;
Value[6]=temp4>>8;
Value[7]=temp4;
Value[8]=0xBB;
}
//*************************************************************************
//ADC初始化程序,用于配置ADC相关寄存器
//*************************************************************************
voidADC_Init()
{
P6SEL|=0x01;//选择ADC通道
ADC12CTL0|=ADC12ON+SHT0_2+MSC;
ADC12CTL1|=ADC12SSEL1+ADC12SSEL0+CONSEQ_2+SHP;//SMCLK做时钟源
ADC12MCTL0=INCH_0;//参考控制位及通道选择,这里选择通道0
ADC12CTL0|=ENC;//使能转换器
}
//*************************************************************************
//串口初始化及发送
//*************************************************************************
voidUART_Init()
{
U0CTL|=SWRST;//复位SWRST
U0CTL|=CHAR;//8位数据模式
U0TCTL|=SSEL1;//SMCLK为串口时钟
U0BR1=baud_h;//BRCLK=8MHZ,Baud=BRCLK/N
U0BR0=baud_l;//N=UBR+(UxMCTL)/8
U0MCTL=0x00;//微调寄存器为0,波特率9600bps
ME1|=UTXE0;//UART1发送使能
ME1|=URXE0;//UART1接收使能
U0CTL&=~SWRST;
IE1|=URXIE0;//接收中断使能位
P3SEL|=BIT4;//设置IO口为普通I/O模式
P3DIR|=BIT4;//设置IO口方向为输出
P3SEL|=BIT5;
}
voidSend_Byte(uchardata)
{
while((IFG1&UTXIFG0)==0);//发送寄存器空的时候发送数据
U0TXBUF=data;
}
//////////////////////DHT11///////////////////////////////////////////////////////
voidDHT11_ReadChar(void)
{
U8i;
DHT11_INPUT;
for(i=0;i599)Second=0;//最大计数99秒
}
///////////////////////主函数///////////////////////////////////////////
voidmain(void)
{
WDTCTL=WDTPW+WDTHOLD;//关看门狗
Clock_Init();
UART_Init();
delay_ms(100);//延时100ms
delay_ms(100);//延时100ms
delay_ms(50000);
TIMERA_Init();//设置TIMERA,P12输出PWM信号
_EINT();
ADC12CTL0|=ADC12SC;//开启转换
while(1)
{
start_DHT11();
while((ADC12IFG&0x0001)==0);//等待转换结束
TEMP0=ADC12MEM0;//读取ADC转换值
Voltage_do(U8RH_data_H,U8RH_data_L,U8T_data_H,U8T_data_L,TEMP0);
}
}
分 -->
|