msp430f149控制DHT11温湿度传感器的串口程序

2019-03-24 15:35发布

哪位大侠写过msp430f149控制DHT11温室读传感器的串口显示程序,我调了好久总是不能显示数据 ?不知道什么原因?高手帮忙啊,不胜感激之至!! 串口程序; #include  "usart.h"
struct DHT_data
{
 unsigned char DH_H;     //湿度整数
 unsigned char DH_L;     //湿度小数
 unsigned char T_H;      //温度整数
 unsigned char T_L;      //温度小数
 unsigned char Checksum; //校验和
}DHT_data;
void Usart_Init(void)
{
  
    P3SEL |= 0x30;                            // P3.4,5 = USCI_A0 TXD/RXD
    ME1 |= UTXE0 + URXE0;                     // 使能USART0收发
    UCTL0 |= CHAR;                            // 8-bit character
    UTCTL0 |= SSEL0;                          // UCLK = ACLK
    UBR00 = 0x03;                             // 32k/9600 - 3.41
    UBR10 = 0x00;                             //
    UMCTL0 = 0x4A;                             // Modulation
    UCTL0 &= ~SWRST;                          // 初始化UART0状态机
    IE1 |= URXIE0;                            // 使能接收中断
    _EINT();
}
void TXString( char* string, int length )//发送字符串
{
  int pointer;
  for( pointer = 0; pointer < length; pointer++)
  {
    volatile int i;
    TXBUF0 = string[pointer];
    while (!(IFG1 & UTXIFG0));             
  }
}
void my_putchar(unsigned char ch)
{
  TXBUF0=(unsigned char) ch;
  while (!(IFG1 & UTXIFG0));               
 
}
void my_puts(unsigned char *s)
{
  while(*s++)
    my_putchar(*s);
}
DHT11 程序:   #include "dht11.h"
unsigned char humidity, temperature, check_sum ;   
/**********************************************/
/*           开始 DHT11 温湿度计              */
/* 输入:无                   */
/* 输出:应答标志  0:应答失败   1:应答成功  */
/**********************************************/
unsigned  char start_DHT11(void)
{
 unsigned  char time=0;
 DHT11_OUTPUT;
 DHT11_H;
 DHT11_L;   //拉低18ms以上
 delay_ms(30);  DHT11_H;
 delay_us(40);
 DHT11_INPUT;
// temp=DHT11_IN;
 if(!DHT11_IN)
 {
   while(!(DHT11_IN)&&time++);
   while(DHT11_IN&&time++);
   return 1;
 }
 else
   {
     return 0;
   }
}
void read_DHT11(void)
{
   unsigned char tem[5];     //读到的五个数
   unsigned char i, j, temp;
   for(i = 0; i < 5; i ++)
  {
     tem = 0;
     for(j = 0; j < 8; j ++)            
     {
        tem *= 2;    //不可用tem << 1 否则不移位
        temp = 2;       //
        delay_us(20);   //先延20uS 再检查30uS       
        while((!DHT11_IN) && temp ++)//避免死等
           if(temp == 2)
              break;
        delay_us(32);   //高电平长于26-28uS为1否为0
        temp = 2;  
        if(DHT11_IN)
        {
           while(DHT11_IN && temp ++) //当为1时等到低电平再进入下次循环。
              if(temp == 2)
                 break;
           tem |= 0x01;
        }
        delay_us(5);
     }
   humidity = tem[0];
   temperature = tem[2];
   check_sum = tem[4];
  }
  
}   主函数main: #include <msp430x14x.h>
#include "dht11.h"
#include "usart.h"
const char word1[] = {" **DHT11 TEST** "};
const char word2[] = {" **DHT11 CHECK** "};
const char word3[] = {" **DHT11 NOT EXIST** "};
void display(void); void  main( void )
{
 
  WDTCTL=WDTPW+WDTHOLD;         //关看门狗
  Usart_Init();
  P2DIR |=BIT7;//点亮LED0 RED
  P2OUT &=~BIT7;
  P2DIR |=BIT5;//点亮LED1 GREEN
  TXString((char*)word1, sizeof word1);
  delay_ms(1000);
  delay_ms(1000);
  while(1)
  {
   
    if(start_DHT11())       //如果应答成功
    {      
       P2OUT |=BIT7;
       TXString((char*)word2, sizeof word2);
       read_DHT11();    //读温湿度
      
          display();         //则显示温湿度数值
      
    }
    else
    {
      P2OUT &=~BIT7;
      TXString((char*)word3, sizeof word3);
    }
    P2OUT |=BIT5;
    delay_ms(1000);
    P2OUT&=~BIT5;
    delay_ms(1000);
  }
 
}
void display(void)
{
    unsigned char table[11];
    table[0]=humidity/0x10+0x30;//湿度
    table[1]=humidity%0x10+0x30;
    table[2]='%';
    table[3]='R';
    table[4]='H';
    table[5]=' ';
    table[6]=temperature/0X10+0x30;//温度
    table[7]=temperature%0X10+0x30;
    table[8]='C';
    table[9]=' ';
    table[10]=' ';
    TXString((char*)table, sizeof table);
}
  需要的头文件:   usart.h   #ifndef _USART_H_
#define _USART_H_
#include"msp430x14x.h"
void Usart_Init(void);
void TXString( char* string, int length );//发送字符串
void my_putchar(unsigned char ch);
void my_puts(unsigned char *s);
#endif
  dht11.h #ifndef _DHT11_H_
#define _DHT11_H_
#include "msp430x14x.h"
#define CPU          (12000000)
#define delay_us(x)   (__delay_cycles((double)x*CPU/1000000.0))
#define delay_ms(x)   (__delay_cycles((double)x*CPU/1000.0)) #define DHT11_OUTPUT   P1DIR|=BIT0
#define DHT11_INPUT   P1DIR&=~BIT0
#define DHT11_H   P1OUT|=BIT0
#define DHT11_L   P1OUT&=~BIT0
#define DHT11_IN   (P1IN&BIT0)
extern unsigned char humidity, temperature, check_sum ;   
unsigned  char start_DHT11(void);
void read_DHT11(void); #endif

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
cat3902982
1楼-- · 2019-03-24 23:28
没有用过湿度传感器!
爱家乡爱家乡
2楼-- · 2019-03-25 01:10
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章