久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2278|回復: 7
收起左側

自己寫的dht11在51開發板上可以用,但是在51單片機最小系統用不了,求解

[復制鏈接]
ID:635913 發表于 2020-10-5 21:11 | 顯示全部樓層 |閱讀模式
#include<intrins.h>
#include<string.h>
#include<stdio.h>
#define _Nop() _nop_()

typedef unsigned char unint8;
typedef unsigned char unint16;

sbit TRH=P3^7;
unsigned char  str1[]={"  /RH"};
unsigned char  str2[]={"  'C"};
extern unsigned char wddata,sddata;


unint8 TH_data,TL_data,RH_data,RL_data,CK_data;
unint8 TH_temp,TL_temp,RH_temp,RL_temp,CK_temp;
unint8 com_data,untemp,temp;
unint8 respond;

/*********************************************************************************/

/*********************************************************************************/

/*********************************************************************************/
// 毫秒級延時子程序
/*********************************************************************************/
void delay_ms1(unsigned char ms)
{      
          unsigned char i;
          while(ms--)
          {
                    for(i = 0; i< 150; i++)
                    {
                              _nop_();
                              _nop_();
                              _nop_();
                              _nop_();
                    }
          }
}
/*********************************************************************************/
/*********************************************************************************/
//5us級延時程序
/*********************************************************************************/
void delay_us_dht11()
{
           unint8 i;
          i--;
          i--;
          i--;
          i--;
          i--;
          i--;
}
/****************************************************************************/
//收發信號檢測,數據讀取
/****************************************************************************/
char receive()
{   
          unint8 i;
          com_data=0;
          for(i=0;i<=7;i++)   
         {
                    respond=2;
                    while((!TRH)&&respond++);
                    delay_us_dht11();
                    delay_us_dht11();
                    delay_us_dht11();
                    if(TRH)
                    {
                              temp=1;
                              respond=2;
                              while((TRH)&&respond++);
                    }
                    else
                              temp=0;
                    com_data<<=1;
                    com_data|=temp;   
          }
          return(com_data);  
}
/****************************************************************************/

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

                 sddata=RH_data;
                 wddata=TH_data;
}

回復

使用道具 舉報

ID:822755 發表于 2020-10-6 10:36 | 顯示全部樓層
不同的板,運行的速度可能不一樣, 需要調整延時函數
回復

使用道具 舉報

ID:826203 發表于 2020-10-6 11:26 | 顯示全部樓層
單總線協議靠的是精準延時,估計是時鐘方面的問題,仔細看下延時的底層原環境和新環境有沒有變化
回復

使用道具 舉報

ID:451718 發表于 2020-10-6 16:19 | 顯示全部樓層
主函數上設置一個腳位電平變化,定時器里面設置一個腳位電平變化,分別測試一下,看看是單片機沒有運行起來,還是程序本身有問題。   
sbit TEST=P4^1;

test_pin(unint16 val)
{
        const unint16 i = 0;
        if(i<val)
    {
        i++;      
    }
   else
    {
        i = 0;
        TEST = ~TEST;
    }
}
main
{
    test_pin(10);               //依次加大10這個數值,看看萬用表有沒有變化
}
回復

使用道具 舉報

ID:635913 發表于 2020-10-14 20:37 | 顯示全部樓層
KongQuan 發表于 2020-10-6 10:36
不同的板,運行的速度可能不一樣, 需要調整延時函數

嗯嗯嗯,調整了,可以顯示了,謝謝
回復

使用道具 舉報

ID:635913 發表于 2020-10-14 20:37 | 顯示全部樓層
sonicspeed 發表于 2020-10-6 11:26
單總線協議靠的是精準延時,估計是時鐘方面的問題,仔細看下延時的底層原環境和新環境有沒有變化

是延遲函數的問題,解決了,謝謝呀
回復

使用道具 舉報

ID:635913 發表于 2020-10-14 20:38 | 顯示全部樓層
robinsonlin 發表于 2020-10-6 16:19
主函數上設置一個腳位電平變化,定時器里面設置一個腳位電平變化,分別測試一下,看看是單片機沒有運行起來 ...

謝謝啦,解決了
回復

使用道具 舉報

ID:420836 發表于 2020-10-15 10:04 | 顯示全部樓層
感謝您及時更新。 有幫助
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕视频在线看 | www.亚洲.com | 9191成人精品久久 | 亚洲精品一区在线观看 | 国产精品久久久久久久久免费高清 | 四虎精品在线 | 日韩高清中文字幕 | 国产精品中文字幕在线 | 天堂一区 | 国产精品一区二区在线免费观看 | 国外成人在线视频 | 在线观看成人精品 | 久久婷婷麻豆国产91天堂 | 美女久久视频 | 亚洲第一成人影院 | 激情免费视频 | 国产午夜亚洲精品不卡 | 久久国产欧美日韩精品 | 精品久久久久久18免费网站 | 蜜桃色网| 欧美日韩一 | 日韩中文字幕在线播放 | 亚洲一区二区三区在线播放 | 欧美精品在线观看 | 久久99蜜桃综合影院免费观看 | 91精品国产乱码久久久久久久久 | 欧美日韩一区二区电影 | 91久久精品一区二区二区 | 久久小视频 | 国产精品久久久久久52avav | 日韩欧美国产精品一区二区三区 | 午夜羞羞| 91精品国产综合久久久久 | 伊人伊人网 | 亚洲欧美一区二区三区国产精品 | 在线成人免费视频 | 日韩网站免费观看 | 亚洲小视频在线观看 | 精品一二三 | 精品亚洲一区二区 | 日本三级电影在线看 |