4807|4

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

哪位大侠用msp430f149单片机写过DTH11的程序? [复制链接]

本人在用一款msp430f149单片机,通过DTH11温湿度传感器测定当前的温湿度,哪位大侠有现成的代码分享一下喂!不尽感谢!

最新回复

unsigned long ReadTempHum(){    unsigned int Timer_Cnt;    unsigned long Result;    DATA_PxDIR |= DATA;    DATA_PxOUT &= ~DATA;    __delay_cycles(19000);                    //至少18ms    DATA_PxDIR &= ~DATA;    while(DATA_PxIN & DATA);    DATA_PxIES |= DATA;    DATA_PxIFG &= ~DATA;    while(!(DATA_PxIFG & DATA));                DATA_PxIFG &= ~DATA;    for(char k=0;k<32;k++)    {        Result <<= 1;        TACTL |= TACLR;        while(!(DATA_PxIFG&DATA));        DATA_PxIFG &= ~DATA;        Timer_Cnt = TAR;        if(Timer_Cnt>90)        {            Result |= 1;        }    }    for(char k=0;k<8;k++)    {        Cal <<= 1;        TACTL |= TACLR;        while(!(DATA_PxIFG&DATA));        DATA_PxIFG &= ~DATA;        Timer_Cnt = TAR;        if(Timer_Cnt>90)        {            Cal |= 1;        }    }    return Result;}调试可行。我程序中没有加超时检测,可能会死循环。仅供参考。  详情 回复 发表于 2011-4-27 12:03
 
点赞 关注

回复
举报

996

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
我记得这款传感器厂家有代码的!~
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

回复 沙发 larrybirdkobe 的帖子

这个去哪儿找啊,我程序也有一个就是调不成功!悲剧啊!
#include
#define DATA_DIR_OUTPUT         P2DIR|=BIT2
#define DATA_DIR_INPUT         P2DIR&=~BIT2
#define DATA_H         P2OUT|=BIT2
#define DATA_L         P2OUT&=~BIT2
#define DATA_IN  ((P2IN&BIT2)>>2)
//#define DATA_IN         ((PINC & BIT(PC0)) >> PC0)
unsigned int temperature;
unsigned int humidity;
void delay_1us(void)                 //1us延时函数
{
  _NOP();
}

void delay_nus(unsigned int n)       //N us延时函数
{
   unsigned int i=0;
   for (i=0;i    _NOP();
}

void delay_ms(unsigned int n)                 //1ms延时函数
{
   unsigned int i,j;
   for(j=0; j    for (i=0;i<1140;i++);
}

unsigned char get_DHT11_value(void)
{       
    unsigned int bit;
    unsigned char p=0,time_count;
   
    temperature=0x0000;
    humidity=0x0000;
    bit=0x8000;
   
    DATA_L;
    DATA_DIR_OUTPUT;
    delay_ms(30);       //主机至少拉低18ms
    //delay_25_ms();
    DATA_H;
    delay_nus(30);         //主机拉高20~40us
    //delay_30_us();
   
    DATA_DIR_INPUT;
    delay_nus(60);
    //DelayUs(60);            //DHT11响应80us
    //delay_30_us();
    //delay_30_us();
   
    //无应答信号,退出
    if(DATA_IN!=0)                  
        return 0;
   
    //等待电平变高,设置200us超时控制
    time_count=0;
    while(DATA_IN == 0)
    {       
       delay_nus(10);
      //DelayUs(10);
      //delay_10_us();
      if(++time_count==20)        
        return 0;
    }
   
    //等待电平变低,设置150us超时控制
    time_count=0;
    while(DATA_IN==1)
    {       
      delay_nus(10);
      //delay_10_us();
      if(++time_count==15)        
        return 0;
    }
   
    //数据开始
    while(p!= 2)
    {       
        //低电平宽度50us
        //等待电平变高,设置100us超时控制
        time_count=0;
        while(DATA_IN==0)
        {       
           delay_nus(10);
          //delay_10_us();
          if(++time_count==10)
            return 0;
        }
        
        time_count=0;
        do
        {        
          delay_nus(10);
          //delay_10_us();
          time_count++;
          if(time_count==10)         
            return 0;
        }
        while(DATA_IN==1);
        
        //若高电平超过50us,说明数据位为1,否则为0
        if(time_count>=5)
        {       
          if(p==0)       
            humidity|=bit;
          if(p==1)       
            temperature|=bit;
        }
        
        bit>>=1;
        //1字节结束
        if(bit==0x0000)
        {       
          p++;
          bit=0x8000;
        }
    }
   
    return 1;
}
void main()
{
   
    WDTCTL=WDTPW+WDTHOLD;  
    get_DHT11_value( );
}
 
 
 

回复

109

帖子

0

TA的资源

纯净的硅(初级)

4
 

答复

你好!
    你可以在网上搜一下,看是否有.
   也可以到www.ti.com的社区论坛去找一下:http://e2e.ti.com/?DCMP=TIHomeTr ... ome_d_e2e_community
   
fred
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
unsigned long ReadTempHum()
{
    unsigned int Timer_Cnt;
    unsigned long Result;
    DATA_PxDIR |= DATA;
    DATA_PxOUT &= ~DATA;
    __delay_cycles(19000);                    //至少18ms
    DATA_PxDIR &= ~DATA;
    while(DATA_PxIN & DATA);
    DATA_PxIES |= DATA;
    DATA_PxIFG &= ~DATA;
    while(!(DATA_PxIFG & DATA));            
    DATA_PxIFG &= ~DATA;
    for(char k=0;k<32;k++)
    {
        Result <<= 1;
        TACTL |= TACLR;
        while(!(DATA_PxIFG&DATA));
        DATA_PxIFG &= ~DATA;
        Timer_Cnt = TAR;
        if(Timer_Cnt>90)
        {
            Result |= 1;
        }
    }
    for(char k=0;k<8;k++)
    {
        Cal <<= 1;
        TACTL |= TACLR;
        while(!(DATA_PxIFG&DATA));
        DATA_PxIFG &= ~DATA;
        Timer_Cnt = TAR;
        if(Timer_Cnt>90)
        {
            Cal |= 1;
        }
    }
    return Result;
}
调试可行。
我程序中没有加超时检测,可能会死循环。
仅供参考。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表