123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219 |
- C51 COMPILER V9.54 DHT11 02/17/2022 16:20:58 PAGE 1
- C51 COMPILER V9.54, COMPILATION OF MODULE DHT11
- OBJECT MODULE PLACED IN .\Objects\dht11.obj
- COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE dht11.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listings\dht
- -11.lst) TABS(2) OBJECT(.\Objects\dht11.obj)
- line level source
- 1 #include "dht11.h"
- 2
- 3
- 4
- 5 void dht11_Delay32us(void) //@11.0592MHz
- 6 {
- 7 1 unsigned char i;
- 8 1
- 9 1 i = 12;
- 10 1 while (--i);
- 11 1 }
- 12 void dht11_Delay20ms(void) //@11.0592MHz
- 13 {
- 14 1 unsigned char i, j;
- 15 1
- 16 1 i = 36;
- 17 1 j = 217;
- 18 1 do
- 19 1 {
- 20 2 while (--j);
- 21 2 } while (--i);
- 22 1 }
- 23 void dht11_Delay50us(void) //@11.0592MHz
- 24 {
- 25 1 unsigned char i;
- 26 1
- 27 1 _nop_();
- 28 1 i = 20;
- 29 1 while (--i);
- 30 1 }
- 31
- 32
- 33 unsigned char dht11_read_byte(void)
- 34 {
- 35 1 unsigned char r_val = 0;
- 36 1 unsigned char t_count = 0; //计时器,防止超时;
- 37 1 unsigned char i;
- 38 1
- 39 1 for(i = 0 ; i < 8 ; i++)
- 40 1 {
- 41 2 t_count = 0;
- 42 2
- 43 2 //低电平50us后开始一个数据位读取;
- 44 2 while( !DHT11_PIN )
- 45 2 {
- 46 3 _nop_();
- 47 3 t_count++;
- 48 3 if(t_count > 250) //超时;
- 49 3 return 100;
- 50 3 }
- 51 2 t_count = 0;
- 52 2
- 53 2 dht11_Delay32us(); //32us
- 54 2
- C51 COMPILER V9.54 DHT11 02/17/2022 16:20:58 PAGE 2
- 55 2 //高电平26~28us表示'0',70us表示'1'
- 56 2 if( DHT11_PIN == 1 )
- 57 2 {
- 58 3 r_val <<= 1;
- 59 3 r_val |= 1;
- 60 3 }
- 61 2 else
- 62 2 {
- 63 3 r_val <<= 1;
- 64 3 continue;
- 65 3 }
- 66 2
- 67 2 //等待DHT11数据输出结束;
- 68 2 while( DHT11_PIN == 1)
- 69 2 {
- 70 3 _nop_();
- 71 3 t_count++;
- 72 3 if(t_count>250)
- 73 3 {
- 74 4 return 100;
- 75 4 }
- 76 3 }
- 77 2 }
- 78 1 return r_val;
- 79 1 }
- 80
- 81
- 82 char dht11_value(unsigned char *temp , unsigned char *humi , unsigned char flag)
- 83 {
- 84 1 unsigned char t_count = 0; //计时器;
- 85 1 unsigned char h_i = 0 , h_f = 0;
- 86 1 unsigned char t_i = 0 , t_f = 0;
- 87 1 unsigned char check_sum = 0;
- 88 1
- 89 1 DHT11_PIN_OUT();
- 90 1 DHT11_PIN_L(); //输出低电平;
- 91 1
- 92 1 //低电平持续时间必须大于18ms;
- 93 1 dht11_Delay20ms(); //20ms;
- 94 1
- 95 1 DHT11_PIN_H(); //主机结束信号,高电平;
- 96 1
- 97 1 //主机等待20us~40us,读取DHT11响应输出;
- 98 1 dht11_Delay32us();
- 99 1
- 100 1 DHT11_PIN_IN();
- 101 1 if(DHT11_PIN == 0) //正确的响应输出;
- 102 1 {
- 103 2 while( !DHT11_PIN )
- 104 2 {
- 105 3 _nop_();
- 106 3 t_count++;
- 107 3
- 108 3 if(t_count > 250) //超时;
- 109 3 return -1;
- 110 3 }
- 111 2
- 112 2 t_count = 0;
- 113 2
- 114 2 dht11_Delay50us(); //DHT11给出响应输出后会拉高总线80us;
- 115 2 while( DHT11_PIN ); //等待接收;
- 116 2 {
- C51 COMPILER V9.54 DHT11 02/17/2022 16:20:58 PAGE 3
- 117 3 _nop_();
- 118 3 t_count++;
- 119 3
- 120 3 if(t_count > 250) //超时;
- 121 3 return -1;
- 122 3 }
- 123 2 EA=0;
- 124 2 h_i = dht11_read_byte(); //湿度整数部分;
- 125 2 h_f = dht11_read_byte(); //湿度小数部分;
- 126 2 t_i = dht11_read_byte(); //温度整数部分;
- 127 2 t_f = dht11_read_byte(); //温度小数部分;
- 128 2 check_sum = dht11_read_byte(); //校验和;
- 129 2 EA=1;
- 130 2 //校验和正确或者温湿度整数部分获取正确即表示获取成功!
- 131 2 if(check_sum == ( h_i + h_f + t_i + t_f ) || (h_i != 100 && t_i != 100) )
- 132 2 {
- 133 3 if(flag == DHT11_STRING)
- 134 3 {
- 135 4 temp[0] = t_i/10+0x30;
- 136 4 temp[1] = t_i%10+0x30;
- 137 4 humi[0] = h_i/10+0x30;
- 138 4 humi[1] = h_i%10+0x30;
- 139 4 }
- 140 3 else
- 141 3 {
- 142 4 if(t_i<=50&&h_i<95)
- 143 4 {
- 144 5 *temp = t_i;
- 145 5 *humi = h_i;
- 146 5 }
- 147 4 }
- 148 3 }
- 149 2 else
- 150 2 {
- 151 3 // if(flag == DHT11_STRING)
- 152 3 // {
- 153 3 // temp[0] = '0';
- 154 3 // temp[1] = '0';
- 155 3 // humi[0] = '0';
- 156 3 // humi[1] = '0';
- 157 3 // }
- 158 3 // else
- 159 3 // {
- 160 3 // *temp = 0;
- 161 3 // *humi = 0;
- 162 3 // }
- 163 3
- 164 3 return -1;
- 165 3 }
- 166 2 }
- 167 1 else
- 168 1 {
- 169 2 // if(flag == DHT11_STRING)
- 170 2 // {
- 171 2 // temp[0] = '0';
- 172 2 // temp[1] = '0';
- 173 2 // humi[0] = '0';
- 174 2 // humi[1] = '0';
- 175 2 // }
- 176 2 // else
- 177 2 // {
- 178 2 // *temp = 0;
- C51 COMPILER V9.54 DHT11 02/17/2022 16:20:58 PAGE 4
- 179 2 // *humi = 0;
- 180 2 // }
- 181 2
- 182 2 return -1;
- 183 2 }
- 184 1 return 0;
- 185 1 }
- 186
- 187
- 188
- 189
- MODULE INFORMATION: STATIC OVERLAYABLE
- CODE SIZE = 367 ----
- CONSTANT SIZE = ---- ----
- XDATA SIZE = ---- ----
- PDATA SIZE = ---- ----
- DATA SIZE = ---- 9
- IDATA SIZE = ---- ----
- BIT SIZE = ---- ----
- END OF MODULE INFORMATION.
- C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
|