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

📄 51_dht21.lst

📁 DHT11, c51单片机.可以直接使用。
💻 LST
字号:
C51 COMPILER V7.07   51_DHT21                                                              12/06/2008 09:05:08 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE 51_DHT21
OBJECT MODULE PLACED IN 51_DHT21.OBJ
COMPILER INVOKED BY: C:\Keil\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          U8  U8FLAG,k;
  36          U8  U8count,U8temp;
  37          U8  U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,U8checkdata;
  38          U8  U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,U8RH_data_L_temp,U8checkdata_temp;
  39          U8  U8comdata;
  40          U8  outdata[5];  //定义发送的字节数        
  41          U8  indata[5];
  42          U8  count, count_r=0;
  43          U8  str[5]={"RS232"};
  44          U16 U16temp1,U16temp2;
  45          SendData(U8 *a)
  46          {
  47   1              outdata[0] = a[0]; 
  48   1              outdata[1] = a[1];
  49   1              outdata[2] = a[2];
  50   1              outdata[3] = a[3];
  51   1              outdata[4] = a[4];
  52   1              count = 1;
  53   1              SBUF=outdata[0];
C51 COMPILER V7.07   51_DHT21                                                              12/06/2008 09:05:08 PAGE 2   

  54   1      }
  55          
  56                 void Delay(U16 j)
  57              {      U8 i;
  58   1                  for(;j>0;j--)
  59   1                {     
  60   2                      for(i=0;i<27;i++);
  61   2      
  62   2                }
  63   1          }
  64                 void  Delay_10us(void)
  65                {
  66   1              U8 i;
  67   1              i--;
  68   1              i--;
  69   1              i--;
  70   1              i--;
  71   1              i--;
  72   1              i--;
  73   1             }
  74                  
  75                  void  COM(void)
  76                {
  77   1           
  78   1                      U8 i;
  79   1             for(i=0;i<8;i++)    
  80   1                  {
  81   2                      
  82   2                          U8FLAG=2;
  83   2                      //----------------------
  84   2                       P2_1=0 ;  //T
  85   2                       P2_1=1 ;  //T
  86   2                  //---------------------- 
  87   2              
  88   2                      while((!P2_0)&&U8FLAG++);
  89   2                              Delay_10us();
  90   2                              Delay_10us();
  91   2                      //      Delay_10us();
  92   2                              U8temp=0;
  93   2                   if(P2_0)U8temp=1;
  94   2                          U8FLAG=2;
  95   2                       while((P2_0)&&U8FLAG++);
  96   2                              
  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                         
 105   2                      // 如果高电平高过预定0高电平值则数据位为 1 
 106   2                       
 107   2                         U8comdata<<=1;
 108   2                         U8comdata|=U8temp;        //0
 109   2                   }//rof
 110   1                 
 111   1              }
 112          
 113                  //--------------------------------
 114                  //-----湿度读取子程序 ------------
 115                  //--------------------------------
C51 COMPILER V7.07   51_DHT21                                                              12/06/2008 09:05:08 PAGE 3   

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

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

 238   3                      //数据接收完毕处理。
 239   3                              count_r=0;
 240   3                      str[0]=indata[0];
 241   3                       str[1]=indata[1];
 242   3                         str[2]=indata[2];
 243   3                               str[3]=indata[3];
 244   3                                       str[4]=indata[4];
 245   3                                       P0=0;
 246   3                      }
 247   2              }
 248   1      }
 249          


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 + -