7266|2

53

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

msp430f149控制DHT11温湿度传感器的串口程序 [复制链接]

哪位大侠写过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[] = {"\r\n**DHT11 TEST**\r\n"};
const char word2[] = {"\r\n**DHT11 CHECK**\r\n"};
const char word3[] = {"\r\n**DHT11 NOT EXIST**\r\n"};
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]='\r';
    table[10]='\n';
    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

最新回复

辛苦了 很乐意为大家服务QQ:2418894925  详情 回复 发表于 2011-10-5 16:33
 
点赞 关注(1)

回复
举报

1729

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
没有用过湿度传感器!
 
 

回复

12

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
辛苦了 很乐意为大家服务QQ:2418894925
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表