⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 51_dht21.lst

📁 温湿度检测仪一套
💻 LST
字号:
C51 COMPILER V7.06   51_DHT21                                                              01/05/2009 21:06:12 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE 51_DHT21
OBJECT MODULE PLACED IN 51_DHT21.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil C51\C51\BIN\C51.EXE 51_DHT21.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //********************************************************************************************************
             -//
   2          //      DHT21使用范例 
   3          //      单片机 : AT89S52 或 STC89C52RC 
   4          //      功能  :串口发送温湿度数据  波特率 9600 
   5          //      硬件连接: P2.0口为通讯口连接DHT11,DHT11的电源和地连接单片机的电源和地,单片机串口加MAX232连接电脑 
   6          //      公司  :奥松电子    
   7          //********************************************************************************************************
             -//
   8          
   9          #include <reg51.h>
  10          #include <intrins.h> 
  11          //
  12          typedef unsigned char  U8;       /* defined for unsigned 8-bits integer variable          无符号8位整型变量  */
  13          typedef signed   char  S8;       /* defined for signed 8-bits integer variable            有符号8位整型变量  */
  14          typedef unsigned int   U16;      /* defined for unsigned 16-bits integer variable         无符号16位整型变量 */
  15          typedef signed   int   S16;      /* defined for signed 16-bits integer variable           有符号16位整型变量 */
  16          typedef unsigned long  U32;      /* defined for unsigned 32-bits integer variable         无符号32位整型变量 */
  17          typedef signed   long  S32;      /* defined for signed 32-bits integer variable           有符号32位整型变量 */
  18          typedef float          F32;      /* single precision floating point variable (32bits) 单精度浮点数(32位长
             -度) */
  19          typedef double         F64;      /* double precision floating point variable (64bits) 双精度浮点数(64位长
             -度) */
  20          //
  21          #define uchar unsigned char
  22          #define uint unsigned int
  23          #define   Data_0_time    4
  24          
  25          //----------------------------------------------//
  26          //----------------IO口定义区--------------------//
  27          //----------------------------------------------//
  28          sbit  P2_0  = P2^0 ;
  29          sbit  P2_1  = P2^1 ;
  30          sbit  P2_2  = P2^2 ;
  31          sbit  P2_3  = P2^3 ;
  32          
  33          //----------------------------------------------//
  34          //----------------定义区------------------------//
  35          //----------------------------------------------//
  36          U8  U8FLAG,k;
  37          U8  U8count,U8temp;
  38          U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;                   //定义温湿度高低位和校验位
  39          U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
  40          U8  U8comdata;
  41          U8  outdata[5];  //定义发送的字节数        
  42          U8  indata[5];
  43          U8  count, count_r=0;
  44          U8  str[5]={"RS232"};
  45          U16 U16temp1,U16temp2;
  46          
  47          SendData(U8 *a)
  48          {
  49   1              outdata[0] = a[0]; 
  50   1              outdata[1] = a[1];
  51   1              outdata[2] = a[2];
C51 COMPILER V7.06   51_DHT21                                                              01/05/2009 21:06:12 PAGE 2   

  52   1              outdata[3] = a[3];
  53   1              outdata[4] = a[4];
  54   1              count = 1;
  55   1              SBUF=outdata[0];
  56   1      }
  57          
  58          //延时程序
  59          void Delay(U16 j)
  60          {      
  61   1              U8 i;
  62   1              for(;j>0;j--)
  63   1              {       
  64   2              for(i=0;i<27;i++);
  65   2              }
  66   1      }
  67          
  68          void  Delay_10us(void)
  69          {
  70   1              U8 i;
  71   1              i--;
  72   1              i--;
  73   1              i--;
  74   1              i--;
  75   1              i--;
  76   1              i--;
  77   1      }
  78                  
  79          void  COM(void)
  80          {
  81   1          U8 i;
  82   1              for(i=0;i<8;i++)           
  83   1              {
  84   2                  U8FLAG=2;
  85   2                      //----------------------
  86   2              P2_1=0 ;  //T
  87   2              P2_1=1 ;  //T
  88   2                      //---------------------- 
  89   2                      while((!P2_0)&&U8FLAG++);
  90   2                      Delay_10us();
  91   2                      Delay_10us();
  92   2              //      Delay_10us();
  93   2                      U8temp=0;
  94   2                      if(P2_0)U8temp=1;
  95   2                  U8FLAG=2;
  96   2                      while((P2_0)&&U8FLAG++);
  97   2                      //----------------------
  98   2                  P2_1=0 ;  //T
  99   2              P2_1=1 ;  //T
 100   2                      //----------------------
 101   2                      //超时则跳出for循环               
 102   2                      if(U8FLAG==1)break;
 103   2                      //判断数据位是0还是1     
 104   2                      // 如果高电平高过预定0高电平值则数据位为 1 
 105   2                      U8comdata<<=1;
 106   2                      U8comdata|=U8temp;        //0
 107   2               }//rof
 108   1      }
 109          
 110          //*******************************************//
 111          //**********湿度读取子程序*******************//
 112          //*******************************************//
 113          //-------以下变量均为全局变量----------------//
C51 COMPILER V7.06   51_DHT21                                                              01/05/2009 21:06:12 PAGE 3   

 114          //-------温度高8位== U8T_data_H--------------//
 115          //-------温度低8位== U8T_data_L--------------//
 116          //-------湿度高8位== U8RH_data_H-------------//
 117          //-------湿度低8位== U8RH_data_L-------------//
 118          //-------校验 8位 == U8checkdata-------------//
 119          //-------调用相关子程序如下------------------//
 120          //-------Delay();, Delay_10us();,COM();------//
 121          //*******************************************//
 122          void RH(void)
 123          {
 124   1              //主机拉低18ms 
 125   1              P2_0=0;
 126   1              Delay(180);
 127   1              P2_0=1;
 128   1              //总线由上拉电阻拉高 主机延时20us
 129   1              Delay_10us();
 130   1              Delay_10us();
 131   1              Delay_10us();
 132   1              Delay_10us();
 133   1              //主机设为输入 判断从机响应信号 
 134   1              P2_0=1;
 135   1              //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行     
 136   1              if(!P2_0)                //T !    
 137   1          {
 138   2          U8FLAG=2;
 139   2          //判断从机是否发出 80us 的低电平响应信号是否结束     
 140   2          while((!P2_0)&&U8FLAG++);
 141   2          U8FLAG=2;
 142   2          //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
 143   2          while((P2_0)&&U8FLAG++);
 144   2          //数据接收状态               
 145   2          COM();
 146   2          U8RH_data_H_temp=U8comdata;
 147   2          COM();
 148   2          U8RH_data_L_temp=U8comdata;
 149   2          COM();
 150   2          U8T_data_H_temp=U8comdata;
 151   2          COM();
 152   2          U8T_data_L_temp=U8comdata;
 153   2          COM();
 154   2          U8checkdata_temp=U8comdata;
 155   2          P2_0=1;
 156   2          //数据校验 
 157   2          U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
 158   2          if(U8temp==U8checkdata_temp)
 159   2          {
 160   3                      U8RH_data_H=U8RH_data_H_temp;
 161   3                  U8RH_data_L=U8RH_data_L_temp;
 162   3                      U8T_data_H=U8T_data_H_temp;
 163   3                  U8T_data_L=U8T_data_L_temp;
 164   3                  U8checkdata=U8checkdata_temp;
 165   3              }//fi
 166   2              }//fi
 167   1      }
 168                  
 169          //----------------------------------------------
 170          //main()功能描述:  AT89C51  11.0592MHz  串口发 
 171          //送温湿度数据,波特率 9600 
 172          //----------------------------------------------
 173          void main()
 174          {
 175   1              U8  i,j;
C51 COMPILER V7.06   51_DHT21                                                              01/05/2009 21:06:12 PAGE 4   

 176   1              
 177   1              //uchar str[6]={"RS232"};
 178   1              /* 系统初始化 */
 179   1              TMOD = 0x20;      //定时器T1使用工作方式2
 180   1              TH1 = 253;        // 设置初值
 181   1              TL1 = 253;
 182   1              TR1 = 1;          // 开始计时
 183   1              SCON = 0x50;      //工作方式1,波特率9600bps,允许接收   
 184   1              ES = 1;
 185   1              EA = 1;           // 打开所以中断   
 186   1              TI = 0;
 187   1              RI = 0;
 188   1              SendData(str) ;   //发送到串口 
 189   1              Delay(1);         //延时100US(12M晶振)
 190   1              while(1)
 191   1              {  
 192   2      
 193   2                 //------------------------
 194   2                 //调用温湿度读取子程序 
 195   2                 RH();
 196   2                 //串口显示程序 
 197   2                 //--------------------------
 198   2      
 199   2                 str[0]=U8RH_data_H;
 200   2                 str[1]=U8RH_data_L;
 201   2                 str[2]=U8T_data_H;
 202   2                 str[3]=U8T_data_L;
 203   2                 str[4]=U8checkdata;
 204   2                 SendData(str) ;  //发送到串口  
 205   2                 //读取模块数据周期不易小于 2S 
 206   2                 Delay(20000);
 207   2              }//elihw
 208   1              
 209   1      }// main
*** WARNING C280 IN LINE 175 OF 51_DHT21.C: 'i': unreferenced local variable
*** WARNING C280 IN LINE 175 OF 51_DHT21.C: 'j': unreferenced local variable
 210          
 211          void RSINTR() interrupt 4 using 2
 212          {
 213   1              U8 InPut3;
 214   1              if(TI==1) //发送中断      
 215   1              {
 216   2                      TI=0;
 217   2                      if(count!=5) //发送完5位数据     
 218   2                      {
 219   3                              SBUF= outdata[count];
 220   3                              count++;
 221   3                      }
 222   2              }
 223   1      
 224   1              if(RI==1)        //接收中断               
 225   1              {       
 226   2                      InPut3=SBUF;
 227   2                      indata[count_r]=InPut3;
 228   2                      count_r++;
 229   2                      RI=0;                                                            
 230   2                      if (count_r==5)//接收完4位数据 
 231   2                      {
 232   3                      //数据接收完毕处理。
 233   3                              count_r=0;
 234   3                      str[0]=indata[0];
 235   3                       str[1]=indata[1];
C51 COMPILER V7.06   51_DHT21                                                              01/05/2009 21:06:12 PAGE 5   

 236   3                         str[2]=indata[2];
 237   3                               str[3]=indata[3];
 238   3                                       str[4]=indata[4];
 239   3                                       P0=0;
 240   3                      }
 241   2              }
 242   1      }
 243          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    410    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     36       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  2 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -