OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2194|回复: 2

在DHT11的响应程序中,如何体现拉低、拉高40~80us

[复制链接]

42

主题

153

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2017-10-30
在线时间
51 小时
发表于 2017-11-4 15:47:02 | 显示全部楼层 |阅读模式
3金钱
大家好,自己在看DHT11程序时有个疑问,在DHT11的响应程序中,如何体现拉低、拉高40~80us;此外
如果果真能体现的话,说明此程序已经有了一定时间的延迟(大概有120us),那么在读0/1时,为什么还要延迟40us来读取数据的0/1,
这样会不会错过。请大家指教,谢谢

u8 DHT11_Check(void)           
{   
        u8 retry=0;
        DHT11_IO_IN();//SET INPUT         
    while (DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us
        {
                retry++;
                delay_us(1);
        }
        if(retry>=100)return 1;
        else retry=0;
    while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us
        {
                retry++;
                delay_us(1);
        }
        if(retry>=100)return 1;            
        return 0;
}

//从DHT11读取一个位
//返回值:1/0
u8 DHT11_Read_Bit(void)                          
{
        u8 retry=0;
        while(DHT11_DQ_IN&&retry<100)//等待变为低电平
        {
                retry++;
                delay_us(1);
        }
        retry=0;
        while(!DHT11_DQ_IN&&retry<100)//等待变高电平
        {
                retry++;
                delay_us(1);
        }
        delay_us(90);//等待40us
        if(DHT11_DQ_IN)return 1;
        else return 0;               













最佳答案

查看完整内容[请看2#楼]

当然是没问题的,你注意看代码,死循环是等到满足的条件,就退出了。并不是一定要等到100us
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2017-11-4 15:47:03 | 显示全部楼层
当然是没问题的,你注意看代码,死循环是等到满足的条件,就退出了。并不是一定要等到100us
回复

使用道具 举报

42

主题

153

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2017-10-30
在线时间
51 小时
 楼主| 发表于 2017-11-6 10:58:41 | 显示全部楼层
原子哥你好,但是高、低电平都需要有40~80us的延迟,我有疑问是在死循环如果满足条件就退出,那么如何保证高低电平的40~80us的延迟。怎么体现出来了,谢谢
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-7 00:15

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表