找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1359|回復: 0
打印 上一主題 下一主題
收起左側

dht11時序問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:944797 發(fā)表于 2021-6-28 16:48 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
網(wǎng)上找到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];
//延時函數(shù)
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()//讀一個字節(jié)—八位
{
  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()//讀出溫濕度數(shù)據(jù) 并放入數(shù)組里
{
  Start();
  if(Check==HH+HL+TH+TL)//數(shù)據(jù)校驗
  {
    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=";
/***************************
          主函數(shù)
***************************/
void main(void)
{
  // Delay_ms(1000);//讓設備穩(wěn)定
   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);

/****************************************************************
   串口初始化函數(shù)     
***********************************************************/
void InitUart()
{
    CLKCONCMD &= ~0x40; // 設置系統(tǒng)時鐘源為 32MHZ晶振
    while(CLKCONSTA & 0x40);                     // 等待晶振穩(wěn)定
    CLKCONCMD &= ~0x47;                          // 設置系統(tǒng)主時鐘頻率為 32MHZ

    PERCFG = 0x00;        //位置1 P0口
    P0SEL = 0x3c;        //P0_2,P0_3,P0_4,P0_5用作串口,第二功能
    P2DIR &= ~0XC0;      //P0 優(yōu)先作為UART0 ,優(yōu)先級

    U0CSR |= 0x80;       //UART 方式
    U0GCR |= 11;           //U0GCR與U0BAUD配合     
    U0BAUD |= 216;       // 波特率設為115200
    UTX0IF = 0;          //UART0 TX 中斷標志初始置位0

}

/****************************************************************
串口發(fā)送字符串函數(shù)   
****************************************************************/
void Uart_Send_String(uchar *Data,int len)
{
{
  int j;
  for(j=0;j<len;j++)
  {
    U0DBUF = *Data++;
    while(UTX0IF == 0);
    UTX0IF = 0;
  }
}
}



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表