📄 nrf905_send.lst
字号:
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 + -