欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: stc12c5a60s2單片機簡單實現DHT11源程序 [打印本頁]

作者: 1902506352    時間: 2020-2-29 13:58
標題: stc12c5a60s2單片機簡單實現DHT11源程序
網絡上有很多實現DHT11的程序,單大多都是89c52的。而有關stc12c5a60s2的很少。
本人是新手一枚,在寫關于stc12串口接收dht11數據時,發現接收到的都是0。
這是為什么呢?在網上查了一堆資料后,明白是時序的原因。
stc12系列的處理速度比89c52的速度快,且我們寫的延時函數所延時的時間與參數不成正比。需要示波器。

硬件:芯片:stc12c5a60s2
          晶振:110592mhz

部分代碼:
main.c中:
    DHT11數據讀取  串口發送 波特率9600  STC12C5A60S2
/**************************************************/
#include <reg51.h>
#include "UART.H"
#include  "DELAY.H"
#include  "stdio.h"
#include  <INTRINS.H>  
//-------相關參數定義區-----------

sbit TRH = P2^0;//溫濕度傳感器DHT11數據接入
//char str1[]={"   "};
//char str2[]={"   "};
int TH_temp,TL_temp,RH_temp,RL_temp,CK_temp,respond,com_data,temp;


//-------聲明函數區--------------
void delay(unsigned int i);
void delay_ms(unsigned int i);
void Delay10u();
void Delay18ms();                //@11.0592MHz
char DHT11_rec_byte();
void DHT11_receive();


//-------主函數區----------
void main(void)
{
        Uart1Init();    //初始化串口9600
        DHT11_receive();   //溫濕度讀取
        delay(100);   

        while(1)
        {               
//                     DHT11_receive();   //溫濕度讀取        
//                                delay_ms(120);
//                                delay_ms(120);
                                 DHT11_receive();
//                                delay_ms(1000);
//                                delay_ms(120);

                printf("wendu:%d\n",(int)TH_temp);
                printf("shidu:%d\n",(int)RH_temp);
                        
                 delay(800);   
        }
}
//-------dht11函數區---------
char DHT11_rec_byte()
{   
          char i;
          com_data=0;
          for(i=0;i<=7;i++)   
         {
                    respond=2;
                    while((!TRH)&&respond++);
            Delay10u();
                                                     Delay10u();
                                                     Delay10u();
                    if(TRH)
                    {
                              temp=1;
                              respond=2;
                              while((TRH)&&respond++);
                    }
                    else
                              temp=0;
                    com_data<<=1;
                    com_data|=temp;   
          }
          return(com_data);  
}

/****************************************************************************/
//濕度讀取子程序
//溫度高8位== TH_data
//溫度低8位== TL_data
//濕度高8位== RH_data
//濕度低8位== RL_data
//校驗 8位 == CK_data
//調用的程序有 delay();, Delay_5us();,RECEIVE();
/***************************************************************************/
void DHT11_receive()
{
          //主機拉低18ms
          TRH=0;
Delay18ms();
         TRH=1;
          //DATA總線由上拉電阻拉高 主機延時50us
                                                     Delay10u();
                                                             Delay10u();
          //delay_us();delay_us();delay_us();delay_us();
          //主機設為輸入 判斷從機響應信號
            TRH=1;
          //判斷DHT11是否有低電平響應信號 如不響應則跳出,響應則向下運行   
         if(!TRH)   
         {
                  respond=2;
                  //判斷DHT11發出 80us 的低電平響應信號是否結束
               while((!TRH)&& respond++);
                 respond=2;
                 //判斷從機是否發出 80us 的高電平,如發出則進入數據接收狀態
                while(TRH && respond++);
               //數據接收狀態   
                RH_temp = DHT11_rec_byte();
                RL_temp = DHT11_rec_byte();
                TH_temp = DHT11_rec_byte();
                TL_temp = DHT11_rec_byte();
                CK_temp = DHT11_rec_byte();
                TRH=1;

        }                                                                        
}


delay.c中:
#include  <INTRINS.H>  
//---------延時函數區----------
void delay(unsigned int i)
{
        while(i--);
}
void delay_ms(unsigned int i)
{
        while(i--)
                delay(90);
}

//---------DHT11函數區----------
void Delay10u()
{
        unsigned char i;
        _nop_();
        _nop_();
        _nop_();               
        i = 24;
        while (--i);
}

void Delay18ms()                //@11.0592MHz
{
        unsigned char i, j, k;

        _nop_();
        _nop_();
        i = 1;
        j = 194;
        k = 159;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}



//實測可以運行,并接收到溫濕度整數部分。
//本人新手,寫的不好請輕噴

OP~C7}6R[)$(TDZTDA`BNRE.png (80.78 KB, 下載次數: 26)

OP~C7}6R[)$(TDZTDA`BNRE.png

DHT11模塊化.zip

36.26 KB, 下載次數: 144, 下載積分: 黑幣 -5


作者: 51VM    時間: 2020-8-8 20:14
太感謝了,我搞了一天怎么搞也沒有數據。用了此程序數據來了




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1