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

📄 nrf905_send.lst

📁 嵌入式单片机控制温度传感的无线收发方案!
💻 LST
📖 第 1 页 / 共 5 页
字号:
    030E 8019      LDD	R1,Y+1
    030F 1402      CP	R0,R2
    0310 0413      CPC	R1,R3
    0311 F500      BCC	0x0332
(0048)     {
(0049)       if(g_aAdValue[i]-ret>max_value)
    0312 E082      LDI	R24,2
    0313 9F86      MUL	R24,R22
    0314 01F0      MOVW	R30,R0
    0315 E38D      LDI	R24,0x3D
    0316 E091      LDI	R25,1
    0317 0FE8      ADD	R30,R24
    0318 1FF9      ADC	R31,R25
    0319 8020      LDD	R2,Z+0
    031A 8031      LDD	R3,Z+1
    031B 8008      LDD	R0,Y+0
    031C 8019      LDD	R1,Y+1
    031D 1820      SUB	R2,R0
    031E 0831      SBC	R3,R1
    031F 2E44      MOV	R4,R20
    0320 2455      CLR	R5
    0321 1442      CP	R4,R2
    0322 0453      CPC	R5,R3
    0323 F570      BCC	0x0352
(0050)       {
(0051)         max_value=g_aAdValue[i]-ret;
    0324 E082      LDI	R24,2
    0325 9F86      MUL	R24,R22
    0326 01F0      MOVW	R30,R0
    0327 E38D      LDI	R24,0x3D
    0328 E091      LDI	R25,1
    0329 0FE8      ADD	R30,R24
    032A 1FF9      ADC	R31,R25
    032B 8140      LDD	R20,Z+0
    032C 8008      LDD	R0,Y+0
    032D 8019      LDD	R1,Y+1
    032E 1940      SUB	R20,R0
    032F 0951      SBC	R21,R1
(0052)         max_id=i;
    0330 2EA6      MOV	R10,R22
(0053)       }
(0054)     }
    0331 C020      RJMP	0x0352
(0055)     else
(0056)     {
(0057)       if(ret-g_aAdValue[i]>min_value)
    0332 E082      LDI	R24,2
    0333 9F86      MUL	R24,R22
    0334 01F0      MOVW	R30,R0
    0335 E38D      LDI	R24,0x3D
    0336 E091      LDI	R25,1
    0337 0FE8      ADD	R30,R24
    0338 1FF9      ADC	R31,R25
    0339 8020      LDD	R2,Z+0
    033A 8031      LDD	R3,Z+1
    033B 8048      LDD	R4,Y+0
    033C 8059      LDD	R5,Y+1
    033D 1842      SUB	R4,R2
    033E 0853      SBC	R5,R3
    033F 2C2E      MOV	R2,R14
    0340 2433      CLR	R3
    0341 1424      CP	R2,R4
    0342 0435      CPC	R3,R5
    0343 F470      BCC	0x0352
(0058)       {
(0059)         min_value=ret-g_aAdValue[i];
    0344 E082      LDI	R24,2
    0345 9F86      MUL	R24,R22
    0346 01F0      MOVW	R30,R0
    0347 E38D      LDI	R24,0x3D
    0348 E091      LDI	R25,1
    0349 0FE8      ADD	R30,R24
    034A 1FF9      ADC	R31,R25
    034B 8020      LDD	R2,Z+0
    034C 8031      LDD	R3,Z+1
    034D 80E8      LDD	R14,Y+0
    034E 80F9      LDD	R15,Y+1
    034F 18E2      SUB	R14,R2
    0350 08F3      SBC	R15,R3
(0060)         min_id=i;
    0351 2EC6      MOV	R12,R22
    0352 9563      INC	R22
    0353 3068      CPI	R22,0x8
    0354 F408      BCC	0x0356
    0355 CFAE      RJMP	0x0304
(0061)       }
(0062)     }
(0063)   }
(0064)   
(0065)   //去掉第一个和最大最小值后的平均值
(0066)   ret=0;
    0356 2400      CLR	R0
    0357 2411      CLR	R1
    0358 8219      STD	Y+1,R1
    0359 8208      STD	Y+0,R0
(0067)   for(i=1;i<8;i++)
    035A E061      LDI	R22,1
    035B C014      RJMP	0x0370
(0068)   {
(0069)     if((i!=min_id)&&(i!=max_id))
    035C 156C      CP	R22,R12
    035D F089      BEQ	0x036F
    035E 156A      CP	R22,R10
    035F F079      BEQ	0x036F
(0070)       ret+=g_aAdValue[i];     
    0360 E082      LDI	R24,2
    0361 9F86      MUL	R24,R22
    0362 01F0      MOVW	R30,R0
    0363 E38D      LDI	R24,0x3D
    0364 E091      LDI	R25,1
    0365 0FE8      ADD	R30,R24
    0366 1FF9      ADC	R31,R25
    0367 8020      LDD	R2,Z+0
    0368 8031      LDD	R3,Z+1
    0369 8008      LDD	R0,Y+0
    036A 8019      LDD	R1,Y+1
    036B 0C02      ADD	R0,R2
    036C 1C13      ADC	R1,R3
    036D 8219      STD	Y+1,R1
    036E 8208      STD	Y+0,R0
    036F 9563      INC	R22
    0370 3068      CPI	R22,0x8
    0371 F350      BCS	0x035C
(0071)   }
(0072)   if(min_id!=max_id)
    0372 14CA      CP	R12,R10
    0373 F041      BEQ	0x037C
(0073)     ret/=5;
    0374 E025      LDI	R18,5
    0375 E030      LDI	R19,0
    0376 8108      LDD	R16,Y+0
    0377 8119      LDD	R17,Y+1
    0378 D50C      RCALL	div16u
    0379 8319      STD	Y+1,R17
    037A 8308      STD	Y+0,R16
    037B C007      RJMP	0x0383
(0074)   else  
(0075)     ret/=6;
    037C E026      LDI	R18,6
    037D E030      LDI	R19,0
    037E 8108      LDD	R16,Y+0
    037F 8119      LDD	R17,Y+1
    0380 D504      RCALL	div16u
    0381 8319      STD	Y+1,R17
    0382 8308      STD	Y+0,R16
(0076) 
(0077)   ADCSRA=0;//关闭ADC
    0383 2422      CLR	R2
    0384 B826      OUT	0x06,R2
(0078)   
(0079)   return ret;
    0385 8108      LDD	R16,Y+0
    0386 8119      LDD	R17,Y+1
    0387 9622      ADIW	R28,2
    0388 D5B7      RCALL	pop_gset5
    0389 9508      RET
(0080) }
(0081) void adinit()
(0082) { 
(0083)   //ad转换相关的寄存器的初始化
(0084)       //ACSR=0x80; //别忘了关掉模拟比较器的电源哦
(0085)      // SFIOR=0x00;
(0086)    //IO初始化
(0087)       DDRB|=_BV(DDB0);
_adinit:
    038A 9AB8      SBI	0x17,0
(0088)       PORTB|=~_BV(PB0);
    038B B388      IN	R24,0x18
    038C 6F8E      ORI	R24,0xFE
    038D BB88      OUT	0x18,R24
(0089)    //ad转换相关的寄存器的初始化
(0090)      // ACSR=0x80; //别忘了关掉模拟比较器的电源哦
(0091)     //  SFIOR=0x00;
(0092) 
(0093) }
    038E 9508      RET
_AdcConvertDin:
  min_value            --> R14
  max_value            --> R20
  min_id               --> R12
  max_id               --> R10
  ret                  --> Y+0
  i                    --> R22
    038F D5D2      RCALL	push_gset5
    0390 9722      SBIW	R28,2
(0094) 
(0095) 
(0096) //AD转换8次去掉最高和最低后取平均值返回
(0097) unsigned int AdcConvertDin(void)
(0098) {
(0099)   char i;
(0100)   unsigned int  ret;
(0101)   char max_id,min_id,max_value,min_value;
(0102)   
(0103)   ADMUX=0X44;//参考电压VCC
    0391 E484      LDI	R24,0x44
    0392 B987      OUT	0x07,R24
(0104)   ADCSRA=_BV(ADEN);//使能ADC,单次转换模式
    0393 E880      LDI	R24,0x80
    0394 B986      OUT	0x06,R24
(0105)   
(0106)   //连续转换8次
(0107)   for(i=0;i<8;i++)
    0395 2766      CLR	R22
    0396 C024      RJMP	0x03BB
(0108)   {
(0109)     ADCSRA|=_BV(ADSC);
    0397 9A36      SBI	0x06,6
(0110)     delay_us(30);
    0398 E10E      LDI	R16,0x1E
    0399 E010      LDI	R17,0
    039A DED0      RCALL	_delay_us
    039B C003      RJMP	0x039F
(0111)     while(ADCSRA&_BV(ADSC))
(0112)     delay_us(30);
    039C E10E      LDI	R16,0x1E
    039D E010      LDI	R17,0
    039E DECC      RCALL	_delay_us
    039F 9936      SBIC	0x06,6
    03A0 CFFB      RJMP	0x039C
(0113)     ret=ADCL;
    03A1 B024      IN	R2,0x04
    03A2 2433      CLR	R3
    03A3 8239      STD	Y+1,R3
    03A4 8228      STD	Y+0,R2
(0114)     ret|=(unsigned int)(ADCH<<8);
    03A5 B025      IN	R2,0x05
    03A6 2433      CLR	R3
    03A7 2C32      MOV	R3,R2
    03A8 2422      CLR	R2
    03A9 8008      LDD	R0,Y+0
    03AA 8019      LDD	R1,Y+1
    03AB 2802      OR	R0,R2
    03AC 2813      OR	R1,R3
    03AD 8219      STD	Y+1,R1
    03AE 8208      STD	Y+0,R0
(0115)     g_aAdValue[i]=ret;
    03AF E082      LDI	R24,2
    03B0 9F86      MUL	R24,R22
    03B1 01F0      MOVW	R30,R0
    03B2 E38D      LDI	R24,0x3D
    03B3 E091      LDI	R25,1
    03B4 0FE8      ADD	R30,R24
    03B5 1FF9      ADC	R31,R25
    03B6 8008      LDD	R0,Y+0
    03B7 8019      LDD	R1,Y+1
    03B8 8211      STD	Z+1,R1
    03B9 8200      STD	Z+0,R0
    03BA 9563      INC	R22
    03BB 3068      CPI	R22,0x8
    03BC F2D0      BCS	0x0397
(0116)   }
(0117)   ret=0;
    03BD 2400      CLR	R0
    03BE 2411      CLR	R1
    03BF 8219      STD	Y+1,R1
    03C0 8208      STD	Y+0,R0
(0118)   for(i=1;i<8;i++)
    03C1 E061      LDI	R22,1
    03C2 C010      RJMP	0x03D3
(0119)     ret+=g_aAdValue[i];
    03C3 E082      LDI	R24,2
    03C4 9F86      MUL	R24,R22
    03C5 01F0      MOVW	R30,R0
    03C6 E38D      LDI	R24,0x3D
    03C7 E091      LDI	R25,1
    03C8 0FE8      ADD	R30,R24
    03C9 1FF9      ADC	R31,R25
    03CA 8020      LDD	R2,Z+0
    03CB 8031      LDD	R3,Z+1
    03CC 8008      LDD	R0,Y+0
    03CD 8019      LDD	R1,Y+1
    03CE 0C02      ADD	R0,R2
    03CF 1C13      ADC	R1,R3
    03D0 8219      STD	Y+1,R1
    03D1 8208      STD	Y+0,R0
    03D2 9563      INC	R22
    03D3 3068      CPI	R22,0x8
    03D4 F370      BCS	0x03C3
(0120)   
(0121)   //找到最大和最小值索引  
(0122)   ret/=7;
    03D5 E027      LDI	R18,7
    03D6 E030      LDI	R19,0
    03D7 8108      LDD	R16,Y+0
    03D8 8119      LDD	R17,Y+1
    03D9 D4AB      RCALL	div16u
    03DA 8319      STD	Y+1,R17
    03DB 8308      STD	Y+0,R16
(0123)   max_id=min_id=1;
    03DC 24CC      CLR	R12
    03DD 94C3      INC	R12
    03DE 24AA      CLR	R10
    03DF 94A3      INC	R10
(0124)   max_value=min_value=0;
    03E0 24EE      CLR	R14
    03E1 2744      CLR	R20
(0125)   for(i=1;i<8;i++)
    03E2 E061      LDI	R22,1
    03E3 C04F      RJMP	0x0433
(0126)   {
(0127)     if(g_aAdValue[i]>ret)
    03E4 E082      LDI	R24,2
    03E5 9F86      MUL	R24,R22
    03E6 01F0      MOVW	R30,R0
    03E7 E38D      LDI	R24,0x3D
    03E8 E091      LDI	R25,1
    03E9 0FE8      ADD	R30,R24
    03EA 1FF9      ADC	R31,R25
    03EB 8020      LDD	R2,Z+0
    03EC 8031      LDD	R3,Z+1
    03ED 8008      LDD	R0,Y+0
    03EE 8019      LDD	R1,Y+1
    03EF 1402      CP	R0,R2
    03F0 0413      CPC	R1,R3
    03F1 F500      BCC	0x0412
(0128)     {
(0129)       if(g_aAdValue[i]-ret>max_value)
    03F2 E082      LDI	R24,2
    03F3 9F86      MUL	R24,R22
    03F4 01F0      MOVW	R30,R0
    03F5 E38D      LDI	R24,0x3D
    03F6 E091      LDI	R25,1
    03F7 0FE8      ADD	R30,R24
    03F8 1FF9      ADC	R31,R25
    03F9 8020      LDD	R2,Z+0
    03FA 8031      LDD	R3,Z+1
    03FB 8008      LDD	R0,Y+0
    03FC 8019      LDD	R1,Y+1
    03FD 1820      SUB	R2,R0
    03FE 0831      SBC	R3,R1
    03FF 2E44      MOV	R4,R20
    0400 2455      CLR	R5
    0401 1442      CP	R4,R2
    0402 0453      CPC	R5,R3
    0403 F570      BCC	0x0432
(0130)       {
(0131)         max_value=g_aAdValue[i]-ret;
    0404 E082      LDI	R24,2
    0405 9F86      MUL	R24,R22
    0406 01F0      MOVW	R30,R0
    0407 E38D      LDI	R24,0x3D
    0408 E091      LDI	R25,1
    0409 0FE8      ADD	R30,R24
    040A 1FF9      ADC	R31,R25
    040B 8140      LDD	R20,Z+0
    040C 8008      LDD	R0,Y+0
    040D 8019      LDD	R1,Y+1
    040E 1940      SUB	R20,R0
    040F 0951      SBC	R21,R1
(0132)         max_id=i;
    0410 2EA6      MOV	R10,R22
(0133)       }
(0134)     }
    0411 C020      RJMP	0x0432
(0135)     else
(0136)     {
(0137)       if(ret-g_aAdValue[i]>min_value)
    0412 E082      LDI	R24,2
    0413 9F86      MUL	R24,R22
    0414 01F0      MOVW	R30,R0
    0415 E38D      LDI	R24,0x3D
    0416 E091      LDI	R25,1
    0417 0FE8      ADD	R30,R24
    0418 1FF9      ADC	R31,R25
    0419 8020      LDD	R2,Z+0
    041A 8031      LDD	R3,Z+1
    041B 8048      LDD	R4,Y+0
    041C 8059      LDD	R5,Y+1
    041D 1842      SUB	R4,R2
    041E 0853      SBC	R5,R3
    041F 2C2E      MOV	R2,R14
    0420 2433      CLR	R3
    0421 1424      CP	R2,R4
    0422 0435      CPC	R3,R5
    0423 F470      BCC	0x0432
(0138)       {
(0139)         min_value=ret-g_aAdValue[i];
    0424 E082      LDI	R24,2
    0425 9F86      MUL	R24,R22
    0426 01F0      MOVW	R30,R0
    0427 E38D      LDI	R24,0x3D
    0428 E091      LDI	R25,1
    0429 0FE8      ADD	R30,R24
    042A 1FF9      ADC	R31,R25
    042B 8020      LDD	R2,Z+0
    042C 8031      LDD	R3,Z+1
    042D 80E8      LDD	R14,Y+0
    042E 80F9      LDD	R15,Y+1
    042F 18E2      SUB	R14,R2
    0430 08F3      SBC	R15,R3
(0140)         min_id=i;
    0431 2EC6      MOV	R12,R22
    0432 9563      INC	R22
    0433 3068      CPI	R22,0x8
    0434 F408      BCC	0x0436
    0435 CFAE      RJMP	0x03E4
(0141)       }
(0142)     }
(0143)   }
(0144)   
(0145)   //去掉第一个和最大最小值后的平均值

⌨️ 快捷键说明

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