专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
哪位大侠用msp430f149单片机写过DTH11的程序?
2019-03-24 16:15
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
7041
4
902
本人在用一款msp430f149单片机,通过DTH11温湿度传感器测定当前的温湿度,哪位大侠有现成的代码分享一下喂!不尽感谢! 此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
yejun5665
2019-03-25 03:24
< :TI_MSP430_内容页_SA7 --> 这个去哪儿找啊,我程序也有一个就是调不成功!悲剧啊!
#include<msp430x16x.h>
#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<n;i++)
_NOP();
}
void delay_ms(unsigned int n) //1ms延时函数
{
unsigned int i,j;
for(j=0; j<n; ++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( );
}
加载中...
查看其它4个回答
一周热门
更多
>
相关问题
相关文章
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#include<msp430x16x.h>
#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<n;i++)
_NOP();
}
void delay_ms(unsigned int n) //1ms延时函数
{
unsigned int i,j;
for(j=0; j<n; ++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( );
}
一周热门 更多>