📄 main.lst
字号:
(0166) else if(batt==3)
0138 91800116 LDS R24,batt
013A 3083 CPI R24,3
013B F4D9 BNE 0x0157
(0167) {
(0168) temp[0] = V[0];
013C 9020011C LDS R2,V
013E 9030011D LDS R3,V+1
0140 8239 STD Y+1,R3
0141 8228 STD Y+0,R2
(0169) temp[1] = V[1]-V[0];
0142 9040011E LDS R4,V+2
0144 9050011F LDS R5,V+3
0146 1842 SUB R4,R2
0147 0853 SBC R5,R3
0148 825B STD Y+3,R5
0149 824A STD Y+2,R4
(0170) temp[2] = V[2]-V[1];
014A 9020011E LDS R2,V+2
014C 9030011F LDS R3,V+3
014E 90400120 LDS R4,0x120
0150 90500121 LDS R5,0x121
0152 1842 SUB R4,R2
0153 0853 SBC R5,R3
0154 825D STD Y+5,R5
0155 824C STD Y+4,R4
(0171) }
0156 C01E RJMP 0x0175
(0172) else if(batt==2)
0157 91800116 LDS R24,batt
0159 3082 CPI R24,2
015A F479 BNE 0x016A
(0173) {
(0174) temp[0] = V[0];
015B 9020011C LDS R2,V
015D 9030011D LDS R3,V+1
015F 8239 STD Y+1,R3
0160 8228 STD Y+0,R2
(0175) temp[1] = V[1]-V[0];
0161 9040011E LDS R4,V+2
0163 9050011F LDS R5,V+3
0165 1842 SUB R4,R2
0166 0853 SBC R5,R3
0167 825B STD Y+3,R5
0168 824A STD Y+2,R4
(0176) }
0169 C00B RJMP 0x0175
(0177) else if(batt==1)
016A 91800116 LDS R24,batt
016C 3081 CPI R24,1
016D F009 BEQ 0x016F
016E C066 RJMP 0x01D5
(0178) {
(0179) temp[0] = V[0];
016F 9020011C LDS R2,V
0171 9030011D LDS R3,V+1
0173 8239 STD Y+1,R3
0174 8228 STD Y+0,R2
(0180) }
(0181) else return;
(0182)
(0183)
(0184) if(temp[1]<131) flas2 = 1;
0175 818A LDD R24,Y+2
0176 819B LDD R25,Y+3
0177 3883 CPI R24,0x83
0178 E0E0 LDI R30,0
0179 079E CPC R25,R30
017A F418 BCC 0x017E
017B E081 LDI R24,1
017C 93800104 STS flas2,R24
(0185) if(temp[2]<131) flas3 = 1;
017E 818C LDD R24,Y+4
017F 819D LDD R25,Y+5
0180 3883 CPI R24,0x83
0181 E0E0 LDI R30,0
0182 079E CPC R25,R30
0183 F418 BCC 0x0187
0184 E081 LDI R24,1
0185 93800103 STS flas3,R24
(0186) if(temp[3]<131) flas4 = 1;
0187 818E LDD R24,Y+6
0188 819F LDD R25,Y+7
0189 3883 CPI R24,0x83
018A E0E0 LDI R30,0
018B 079E CPC R25,R30
018C F418 BCC 0x0190
018D E081 LDI R24,1
018E 93800102 STS flas4,R24
(0187)
(0188) bubble_sort(temp, batt);
0190 91200116 LDS R18,batt
0192 018E MOVW R16,R28
0193 DF11 RCALL _bubble_sort
(0189)
(0190) if(batt==4)
0194 91800116 LDS R24,batt
0196 3084 CPI R24,4
0197 F4A9 BNE 0x01AD
(0191) {
(0192) if( (temp[0]-temp[3])>10 )
0198 802E LDD R2,Y+6
0199 803F LDD R3,Y+7
019A 8048 LDD R4,Y+0
019B 8059 LDD R5,Y+1
019C 1842 SUB R4,R2
019D 0853 SBC R5,R3
019E E08A LDI R24,0xA
019F E090 LDI R25,0
01A0 1584 CP R24,R4
01A1 0595 CPC R25,R5
01A2 F590 BCC 0x01D5
(0193) {
(0194) flas1 = 1;
01A3 E081 LDI R24,1
01A4 93800105 STS flas1,R24
(0195) flas2 = 1;
01A6 93800104 STS flas2,R24
(0196) flas3 = 1;
01A8 93800103 STS flas3,R24
(0197) flas4 = 1;
01AA 93800102 STS flas4,R24
(0198) }
(0199) }
01AC C028 RJMP 0x01D5
(0200) else if(batt==3)
01AD 91800116 LDS R24,batt
01AF 3083 CPI R24,3
01B0 F481 BNE 0x01C1
(0201) {
(0202) if(temp[0]> (temp[2]+5))
01B1 818C LDD R24,Y+4
01B2 819D LDD R25,Y+5
01B3 9605 ADIW R24,5
01B4 8028 LDD R2,Y+0
01B5 8039 LDD R3,Y+1
01B6 1582 CP R24,R2
01B7 0593 CPC R25,R3
01B8 F4E0 BCC 0x01D5
(0203) {
(0204) flas1 = 1;
01B9 E081 LDI R24,1
01BA 93800105 STS flas1,R24
(0205) flas2 = 1;
01BC 93800104 STS flas2,R24
(0206) flas3 = 1;
01BE 93800103 STS flas3,R24
(0207) }
(0208) }
01C0 C014 RJMP 0x01D5
(0209) else if(batt==2)
01C1 91800116 LDS R24,batt
01C3 3082 CPI R24,2
01C4 F481 BNE 0x01D5
(0210) {
(0211) if( (temp[0]-temp[1])>10 )
01C5 802A LDD R2,Y+2
01C6 803B LDD R3,Y+3
01C7 8048 LDD R4,Y+0
01C8 8059 LDD R5,Y+1
01C9 1842 SUB R4,R2
01CA 0853 SBC R5,R3
01CB E08A LDI R24,0xA
01CC E090 LDI R25,0
01CD 1584 CP R24,R4
01CE 0595 CPC R25,R5
01CF F428 BCC 0x01D5
(0212) {
(0213) flas1 = 1;
01D0 E081 LDI R24,1
01D1 93800105 STS flas1,R24
(0214) flas2 = 1;
01D3 93800104 STS flas2,R24
(0215) }
(0216) }
01D5 9628 ADIW R28,0x8
01D6 9508 RET
_ADC_count:
temp --> R20
01D7 D3E8 RCALL push_gset1
(0217)
(0218) }
(0219)
(0220)
(0221)
(0222)
(0223) /*---------------------------------------------------------------
(0224) A/D 转换
(0225) ----------------------------------------------------------------*/
(0226)
(0227) void ADC_count(void)
(0228) {
(0229) uint temp;
(0230)
(0231) ad_temp += AD_CH(adc_ch);
01D8 91000100 LDS R16,adc_ch
01DA DE6C RCALL _AD_CH
01DB 90200118 LDS R2,ad_temp
01DD 90300119 LDS R3,ad_temp+1
01DF 0E20 ADD R2,R16
01E0 1E31 ADC R3,R17
01E1 92300119 STS ad_temp+1,R3
01E3 92200118 STS ad_temp,R2
(0232) adc_num ++;
01E5 91800117 LDS R24,adc_num
01E7 5F8F SUBI R24,0xFF
01E8 93800117 STS adc_num,R24
(0233) if(adc_num>=16)
01EA 3180 CPI R24,0x10
01EB F408 BCC 0x01ED
01EC C043 RJMP 0x0230
(0234) {
(0235) adc_num = 0;
01ED 2422 CLR R2
01EE 92200117 STS adc_num,R2
(0236) temp = ad_temp>>4;
01F0 91400118 LDS R20,ad_temp
01F2 91500119 LDS R21,ad_temp+1
01F4 9556 LSR R21
01F5 9547 ROR R20
01F6 9556 LSR R21
01F7 9547 ROR R20
01F8 9556 LSR R21
01F9 9547 ROR R20
01FA 9556 LSR R21
01FB 9547 ROR R20
(0237) ad_temp = 0;
01FC 2433 CLR R3
01FD 92300119 STS ad_temp+1,R3
01FF 92200118 STS ad_temp,R2
(0238)
(0239) if(adc_ch==0)
0201 90200100 LDS R2,adc_ch
0203 2022 TST R2
0204 F441 BNE 0x020D
(0240) {
(0241) V[1] = temp;
0205 9350011F STS V+3,R21
0207 9340011E STS V+2,R20
(0242) adc_ch = 1;
0209 E081 LDI R24,1
020A 93800100 STS adc_ch,R24
(0243) }
020C C023 RJMP 0x0230
(0244) else if(adc_ch==1)
020D 91800100 LDS R24,adc_ch
020F 3081 CPI R24,1
0210 F441 BNE 0x0219
(0245) {
(0246) V[0] = temp;
0211 9350011D STS V+1,R21
0213 9340011C STS V,R20
(0247) adc_ch = 6;
0215 E086 LDI R24,6
0216 93800100 STS adc_ch,R24
(0248) }
0218 C017 RJMP 0x0230
(0249) else if(adc_ch==6)
0219 91800100 LDS R24,adc_ch
021B 3086 CPI R24,6
021C F441 BNE 0x0225
(0250) {
(0251) V[3] = temp ;
021D 93500123 STS 0x123,R21
021F 93400122 STS 0x122,R20
(0252) adc_ch = 7;
0221 E087 LDI R24,7
0222 93800100 STS adc_ch,R24
(0253) }
0224 C00B RJMP 0x0230
(0254) else if(adc_ch==7)
0225 91800100 LDS R24,adc_ch
0227 3087 CPI R24,7
0228 F439 BNE 0x0230
(0255) {
(0256) V[2] = temp ;
0229 93500121 STS 0x121,R21
022B 93400120 STS 0x120,R20
(0257) adc_ch = 0;
022D 2422 CLR R2
022E 92200100 STS adc_ch,R2
(0258) }
(0259)
(0260) //abcd();
(0261) }
0230 D392 RCALL pop_gset1
0231 9508 RET
(0262)
(0263) }
(0264)
(0265)
(0266)
(0267)
(0268) /*---------------------------------------------------------------
(0269) 电池组数检测
(0270) ----------------------------------------------------------------*/
(0271)
(0272) void batt_test(void)
(0273) {
(0274) if(AD_CH(1)>60) batt =1;
_batt_test:
0232 E001 LDI R16,1
0233 DE13 RCALL _AD_CH
0234 E38C LDI R24,0x3C
0235 E090 LDI R25,0
0236 1780 CP R24,R16
0237 0791 CPC R25,R17
0238 F418 BCC 0x023C
0239 E081 LDI R24,1
023A 93800116 STS batt,R24
(0275) if(AD_CH(0)>120) batt =2;
023C 2700 CLR R16
023D DE09 RCALL _AD_CH
023E E788 LDI R24,0x78
023F E090 LDI R25,0
0240 1780 CP R24,R16
0241 0791 CPC R25,R17
0242 F418 BCC 0x0246
0243 E082 LDI R24,2
0244 93800116 STS batt,R24
(0276) if(AD_CH(7)>180) batt =3;
0246 E007 LDI R16,7
0247 DDFF RCALL _AD_CH
0248 EB84 LDI R24,0xB4
0249 E090 LDI R25,0
024A 1780 CP R24,R16
024B 0791 CPC R25,R17
024C F418 BCC 0x0250
024D E083 LDI R24,3
024E 93800116 STS batt,R24
(0277) if(AD_CH(6)>240) batt =4;
0250 E006 LDI R16,6
0251 DDF5 RCALL _AD_CH
0252 EF80 LDI R24,0xF0
0253 E090 LDI R25,0
0254 1780 CP R24,R16
0255 0791 CPC R25,R17
0256 F418 BCC 0x025A
0257 E084 LDI R24,4
0258 93800116 STS batt,R24
025A 9508 RET
_LED_display:
temp1 --> Y+1
l --> R20
m --> R22
h --> R10
temp --> R20
025B D360 RCALL push_gset3
(0278)
(0279) }
(0280)
(0281)
(0282)
(0283)
(0284) /*---------------------------------------------------------------
(0285) LED 显示
(0286) ----------------------------------------------------------------*/
(0287)
(0288) void LED_display(void)
(0289) {
(0290) uint temp,temp1;
(0291) uchar h,m,l;
(0292)
(0293) if(mode==0)
025C 90200112 LDS R2,mode
025E 2022 TST R2
025F F009 BEQ 0x0261
0260 C0CF RJMP 0x0330
(0294) {
(0295) if(batt_num<=1000)
0261 EE88 LDI R24,0xE8
0262 E093 LDI R25,3
0263 90200113 LDS R2,batt_num
0265 90300114 LDS R3,batt_num+1
0267 1582 CP R24,R2
0268 0593 CPC R25,R3
0269 F108 BCS 0x028B
(0296) {
(0297) temp = V[0];
026A 9140011C LDS R20,V
026C 9150011D LDS R21,V+1
(0298)
(0299) if(V[0]<131) flas1 = 1;
026E 3843 CPI R20,0x83
026F E0E0 LDI R30,0
0270 075E CPC R21,R30
0271 F420 BCC 0x0276
0272 E081 LDI R24,1
0273 93800105 STS flas1,R24
0275 C003 RJMP 0x0279
(0300) else flas1 = 0;
0276 2422 CLR R2
0277 92200105 STS flas1,R2
(0301)
(0302) if(led_time<80 && flas1)
0279 91800107 LDS R24,led_time
027B 3580 CPI R24,0x50
027C F448 BCC 0x0286
027D 90200105 LDS R2,flas1
027F 2022 TST R2
0280 F029 BEQ 0x0286
(0303) {
(0304) CLR_LED1;
0281 985C CBI 0x0B,4
(0305) CLR_LED2;
0282 985B CBI 0x0B,3
(0306) CLR_LED3;
0283 9859 CBI 0x0B,1
(0307) CLR_LED4;
0284 9858 CBI 0x0B,0
(0308) }
0285 C09E RJMP 0x0324
(0309) else
(0310) {
(0311) SET_LED1;
0286 9A5C SBI 0x0B,4
(0312) CLR_LED2;
0287 985B CBI 0x0B,3
(0313) CLR_LED3;
0288 9859 CBI 0x0B,1
(0314) CLR_LED4;
0289 9858 CBI 0x0B,0
(0315) }
(0316) }
028A C099 RJMP 0x0324
(0317)
(0318) else if(batt_num>1000&&batt_num<=2000)
028B EE88 LDI R24,0xE8
028C E093 LDI R25,3
028D 90200113 LDS R2,batt_num
028F 90300114 LDS R3,batt_num+1
0291 1582 CP R24,R2
0292 0593 CPC R25,R3
0293 F560 BCC 0x02C0
0294 ED80 LDI R24,0xD0
0295 E097 LDI R25,7
0296 1582 CP R24,R2
0297 0593 CPC R25,R3
0298 F138 BCS 0x02C0
(0319) {
(0320) temp = V[1]-V[0];
0299 9020011C LDS R2,V
029B 9030011D LDS R3,V+1
029D 9140011E LDS R20,V+2
029F 9150011F LDS R21,V+3
02A1 1942 SUB R20,R2
02A2 0953 SBC R21,R3
(0321) if(temp<101) flas2 = 1;
02A3 3645 CPI R20,0x65
02A4 E0E0 LDI R30,0
02A5 075E CPC R21,R30
02A6 F420 BCC 0x02AB
02A7 E081 LDI R24,1
02A8 93800104 STS flas2,R24
02AA C003 RJMP 0x02AE
(0322) else flas2 = 0;
02AB 2422 CLR R2
02AC 92200104 STS flas2,R2
(0323)
(0324) if(led_time<80 && flas2)
02AE 91800107 LDS R24,led_time
02B0 3580 CPI R24,0x50
02B1 F448 BCC 0x02BB
02B2 90200104 LDS R2,flas2
02B4 2022 TST R2
02B5 F029 BEQ 0x02BB
(0325) {
(0326) CLR_LED1;
02B6 985C CBI 0x0B,4
(0327) CLR_LED2;
02B7 985B CBI 0x0B,3
(0328) CLR_LED3;
02B8 9859 CBI 0x0B,1
(0329) CLR_LED4;
02B9 9858 CBI 0x0B,0
(0330) }
02BA C069 RJMP 0x0324
(0331) else
(0332) {
(0333) CLR_LED1;
02BB 985C CBI 0x0B,4
(0334) SET_LED2;
02BC 9A5B SBI 0x0B,3
(0335) CLR_LED3;
02BD 9859 CBI 0x0B,1
(0336) CLR_LED4;
02BE 9858 CBI 0x0B,0
(0337) }
(0338) }
02BF C064 RJMP 0x0324
(0339) else if(batt_num>2000&&batt_num<=3000)
02C0 ED80 LDI R24,0xD0
02C1 E097 LDI R25,7
02C2 90200113 LDS R2,batt_num
02C4 90300114 LDS R3,batt_num+1
02C6 1582 CP R24,R2
02C7 0593 CPC R25,R3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -