OpenEdv-开源电子网

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

STM8208C8驱动DHT11问题

[复制链接]

6

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2017-4-8
在线时间
23 小时
发表于 2017-10-3 12:25:13 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 zsky66 于 2017-10-3 12:27 编辑

[mw_shl_code=c,true]#include "DHT11.h"
#include "delay.h"
#include "iostm8s208c8.h"

/*
PB7设置位推挽输出模式
*/
void DQ_out()
{
  PB_DDR_bit.DDR7 = 1;
  PB_CR1_bit.C17 = 1;
  PB_CR2_bit.C27 = 0;
}


/*
PB7设置为浮空输入模式
*/
void DQ_in()
{
  PB_DDR_bit.DDR7 = 0;
  PB_CR1_bit.C17 = 0;
  PB_CR2_bit.C27 = 0;
}


/*
DHT11起始信号
*/
void DHT11_start(void)
{
  DQ_out();                          //PB7设置为输出模式
  PB_ODR_bit.ODR7 = 0;              //拉低PB7
  delay_ms(18);                    //延时18ms
  PB_ODR_bit.ODR7 = 1;            //拉高延时30us
  delay_us(30);
  
}


/*DHT11响应函数
返回1:接受失败
返回0:成功
*/
u8 DHT11_check()
{
  u8 retry = 0;
  DQ_in();                              //PB7设置为浮空输入模式
  while(PB_IDR_bit.IDR7 && retry<100)   //在此等待DHT11拉低总线电平
  {
    retry++;
    delay_us(1);
  }
  if(retry>=100) return 1;
  else retry = 0;
  while(!PB_IDR_bit.IDR7 && retry<100)  //等待DHT11拉高总线电平
  {
    retry++;
    delay_us(1);
  }
  if(retry>=100) return 1;
  return 0;
}

/*DHT11读取一个位*/
u8 DHT11_read_bit()
{
  u8 retry = 0;
  while(PB_IDR_bit.IDR7 && retry<100)
  {
    retry++;
    delay_us(1);
  }
  retry = 0;
  while(!PB_IDR_bit.IDR7 && retry<100)
  {
    retry++;
    delay_us(1);
  }
  delay_us(40);
  if(PB_IDR_bit.IDR7)return 1;
  else return 0;
}

/*DHT11读取一个字节*/
u8 DHT11_read_byte()
{
  u8 dat = 0;
  u8 i;
  for(i=0;i<8;i++)
  {
    dat<<=1;
    dat |= DHT11_read_bit();
  }
  return dat;
}

//u8 DHT11_read_temper()
//{
//  u8 buf[5];
//  u8 i;
//  u8 *temper;
//  DHT11_start();
//  if(DHT11_check() == 0)
//  {
//    for(i=0;i<5;i++)
//    {
//      buf=DHT11_read_byte();
//    }
//    if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
//    {
//      //*humi = buf[0];
//      *temper = buf[2];
//    }
//  }else return 1;
//  return *temper;
//}














[/mw_shl_code]自己做了一块板子,目的是使用STM8S208驱动DHT11温湿度传感器,但是现在的问题是DHT11复位之后,无法在MCU端口读取到DHT11的低电平响应,检查了很长一段时间也没发现啥问题,所有特来论坛请教。

CAN.rar

338.23 KB, 下载次数: 163

这是程序的源码,编译环境IAR

最佳答案

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

已经解决,是我在调试模式下设置的断点位置有问题
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2017-4-8
在线时间
23 小时
 楼主| 发表于 2017-10-3 12:25:14 | 显示全部楼层

已经解决,是我在调试模式下设置的断点位置有问题
回复

使用道具 举报

6

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2017-4-8
在线时间
23 小时
 楼主| 发表于 2017-10-3 12:26:12 | 显示全部楼层
[mw_shl_code=c,true]#include "DHT11.h"
#include "delay.h"
#include "iostm8s208c8.h"

u8 temp = 0;
u8 a;
int main(void)
{

  CLK_ICKR = 0x01;                      //启用内部时钟
  CLK_SWR = 0xe1;                       //不分频
  CLK_CKDIVR = 0X00;
  while(!CLK_ICKR_bit.HSIRDY);
  
  delay_init(16);                       //延时函数初始化
  DHT11_start();                        //DHT11初始化
  a = DHT11_check();                    
  temp = DHT11_read_byte();
  while(1);
}[/mw_shl_code]
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164897
金钱
164897
注册时间
2010-12-1
在线时间
2100 小时
发表于 2017-10-8 20:27:10 | 显示全部楼层
帮顶
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2019-5-9
在线时间
1 小时
发表于 2019-5-12 17:19:10 来自手机 | 显示全部楼层
断电怎么设置的呀?
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2019-5-9
在线时间
1 小时
发表于 2019-5-12 17:19:38 来自手机 | 显示全部楼层
断点怎么设置的呀?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-6-9 22:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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