找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1124|回复: 0
收起左侧

dht11时序问题

[复制链接]
ID:944797 发表于 2021-6-28 16:48 | 显示全部楼层 |阅读模式
网上找到cc2530读取DHT11的温湿度源代码,由于是基于8051内核,需要改成cc2530的内核链接12864屏幕,更改之后DHT11时序不对,不知道问题所再,再次请教大佬问题所再。附上代码
DHT11.C



#include <ioCC2530.h>
#include "DHT.h"

#define DHT11 P0_6
int Check;
uchar TL,TH,HL,HH,temp[2],hum[2];
//延时函数
void Delay_us() //1 us延时
{
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");
    asm("nop");   
    asm("nop");
    asm("nop");
    asm("nop");   
    asm("nop");
}
void Delay_10us() //10 us延时
{
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();
  Delay_us();   
}
void Delay_ms(uint Time)//n ms延时
{
    unsigned char i;
    while(Time--)
    {
        for(i=0;i<100;i++)
            Delay_10us();
    }
}

void DHT11Input()
{
  P0SEL &= ~0X40; //设置 P06 为普通 IO 口
  P0DIR &= ~0x40; //重新配置IO口方向
}
void DHT11Output()
{
  P0SEL &= ~0X40; //设置 P06 为普通 IO 口
  P0DIR |= 0x40; //重新配置IO口方向
}
/***********************
   温湿度传感
***********************/
uchar Read_Byte()//读一个字节—八位
{
  uchar i,data;
  DHT11Input();
  for(i=0;i<8;i++)
  {
    while(!DHT11);
    Delay_10us();
    Delay_10us();
    Delay_10us();
   // Delay_10us();
   // Delay_10us();
    data<<=1;
    if(DHT11)
    {
      data|=0x01;
      while(DHT11);
    } else  data|=0x00;
    //data<<=1;
  }
  return data;
}

void Start()//起始信号
{
  DHT11Output();
  DHT11=0;
  Delay_ms(20);
  DHT11=1;
  Delay_10us();
  Delay_10us();
  Delay_10us();
  Delay_10us();
  DHT11Input();
  if(!DHT11)
  {
    while(!DHT11);
    while(DHT11);
    HH=Read_Byte();
    HL=Read_Byte();
    TH=Read_Byte();
    TL=Read_Byte();
    Check=Read_Byte();
    DHT11=1;

  }

}

void Temp()//读出温湿度数据 并放入数组里
{
  Start();
  if(Check==HH+HL+TH+TL)//数据校验
  {
    temp[0]=TH/10+48;temp[1]=TH%10+48;
    hum[0]=HH/10+48;hum[1]=HH%10+48;
  }
  else
  {
    temp[0]=0;temp[1]=0;
    hum[0]=0;hum[1]=0;
  }
}





main.c

/**************************************/
/*           WeBee团队                */
/*         Zigbee学习例程             */
/*例程名称:温湿度传感器DHT11         */
/*建立时间:2012/10/2                 */
/*描述:将采集到的温湿度信息通过串口打印到
        串口调试助手。
**************************************/
#include <ioCC2530.h>
#include <string.h>
#include "UART.H"
#include "DHT.h"
extern uchar hum[2];
extern uchar temp[2];
uchar temp1[5]="temp=";
uchar humidity1[9]="humidity=";
/***************************
          主函数
***************************/
void main(void)
{
  // Delay_ms(1000);//让设备稳定
   InitUart();    //串口初始化
   while(1)
    {         
     Temp();
  /*******信息通过串口打印********/
     Uart_Send_String(temp1,5);
     Uart_Send_String(temp,2);
     Uart_Send_String("\n",1);
     Uart_Send_String(humidity1,9);
     Uart_Send_String(hum,2);
     Uart_Send_String("\n",1);

     Delay_ms(2000);  //延时,使周期性2S读取1次

    }
}




UART.C

#include <ioCC2530.h>

#define uchar unsigned char
#define uint unsigned int
void InitUart();              //初始化串口
void Uart_Send_String(unsigned char *Data,int len);

/****************************************************************
   串口初始化函数     
***********************************************************/
void InitUart()
{
    CLKCONCMD &= ~0x40; // 设置系统时钟源为 32MHZ晶振
    while(CLKCONSTA & 0x40);                     // 等待晶振稳定
    CLKCONCMD &= ~0x47;                          // 设置系统主时钟频率为 32MHZ

    PERCFG = 0x00;        //位置1 P0口
    P0SEL = 0x3c;        //P0_2,P0_3,P0_4,P0_5用作串口,第二功能
    P2DIR &= ~0XC0;      //P0 优先作为UART0 ,优先级

    U0CSR |= 0x80;       //UART 方式
    U0GCR |= 11;           //U0GCR与U0BAUD配合     
    U0BAUD |= 216;       // 波特率设为115200
    UTX0IF = 0;          //UART0 TX 中断标志初始置位0

}

/****************************************************************
串口发送字符串函数   
****************************************************************/
void Uart_Send_String(uchar *Data,int len)
{
{
  int j;
  for(j=0;j<len;j++)
  {
    U0DBUF = *Data++;
    while(UTX0IF == 0);
    UTX0IF = 0;
  }
}
}



回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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