charger.lst
来自「a good program for battery charge,only f」· LST 代码 · 共 1,857 行 · 第 1/5 页
LST
1,857 行
02C1 DF2A RCALL _SendByte
(0301) if((temp&(1<<ack))==0)return(0);
02C2 90200116 LDS R2,temp
02C4 FC20 SBRC R2,0
02C5 C003 RJMP 0x02C9
02C6 2700 CLR R16
02C7 2711 CLR R17
02C8 C006 RJMP 0x02CF
02C9 9543 INC R20
02CA 3044 CPI R20,4
02CB F378 BCS 0x02BB
(0302) }
(0303) Stop_I2c();
02CC DF11 RCALL _Stop_I2c
(0304) return(1);
02CD E001 LDI R16,1
02CE E010 LDI R17,0
02CF 9624 ADIW R28,4
02D0 D4EE RCALL pop_gset1
02D1 9508 RET
_TC1321_SET_1:
tem --> Y+0
i --> R20
DA_SET --> R20
02D2 D4E9 RCALL push_gset1
02D3 01A8 MOVW R20,R16
02D4 9724 SBIW R28,4
(0305) }
(0306) /********************************************************************/
(0307) TC1321_SET_1(unsigned int DA_SET)
(0308) {
(0309) unsigned char i;
(0310) unsigned char tem[4];
(0311) tem[0]=0x90;
02D5 E980 LDI R24,0x90
02D6 8388 STD Y+0,R24
(0312) tem[1]=0x00;
02D7 2422 CLR R2
02D8 8229 STD Y+1,R2
(0313) tem[2]=DA_SET/4;
02D9 011A MOVW R2,R20
02DA 9436 LSR R3
02DB 9427 ROR R2
02DC 9436 LSR R3
02DD 9427 ROR R2
02DE 822A STD Y+2,R2
(0314) tem[3]=DA_SET%4;
02DF 01CA MOVW R24,R20
02E0 7083 ANDI R24,3
02E1 7090 ANDI R25,0
02E2 838B STD Y+3,R24
(0315) tem[3]=tem[3]<<6;
02E3 2E28 MOV R2,R24
02E4 0C22 LSL R2
02E5 0C22 LSL R2
02E6 0C22 LSL R2
02E7 0C22 LSL R2
02E8 0C22 LSL R2
02E9 0C22 LSL R2
02EA 822B STD Y+3,R2
(0316)
(0317) Start_I2c();
02EB DEE0 RCALL _Start_I2c
(0318) for(i=0;i<4;i++)
02EC 2744 CLR R20
02ED C00F RJMP 0x02FD
(0319) {
(0320) SendByte(tem[i]);
02EE 01CE MOVW R24,R28
02EF 2FE4 MOV R30,R20
02F0 27FF CLR R31
02F1 0FE8 ADD R30,R24
02F2 1FF9 ADC R31,R25
02F3 8100 LDD R16,Z+0
02F4 DEF7 RCALL _SendByte
(0321) if((temp&(1<<ack))==0)return(0);
02F5 90200116 LDS R2,temp
02F7 FC20 SBRC R2,0
02F8 C003 RJMP 0x02FC
02F9 2700 CLR R16
02FA 2711 CLR R17
02FB C006 RJMP 0x0302
02FC 9543 INC R20
02FD 3044 CPI R20,4
02FE F378 BCS 0x02EE
(0322) }
(0323) Stop_I2c();
02FF DEDE RCALL _Stop_I2c
(0324) return(1);
0300 E001 LDI R16,1
0301 E010 LDI R17,0
0302 9624 ADIW R28,4
0303 D4BB RCALL pop_gset1
0304 9508 RET
(0325) }
(0326) /********************************************************************/
(0327) void Delay(unsigned int ddd) //Delay50Ms() i=0xF8F;
(0328) {
(0329) //ddd=100;
(0330) while(--ddd){;}
_Delay:
ddd --> R16
0305 01C8 MOVW R24,R16
0306 9701 SBIW R24,1
0307 018C MOVW R16,R24
0308 3000 CPI R16,0
0309 0701 CPC R16,R17
030A F7D1 BNE 0x0305
030B 9508 RET
(0331) }
(0332) /********************************************************************/
(0333) void temp_det(void)
(0334) {
(0335) adc_mux=0X02;
_temp_det:
030C E082 LDI R24,2
030D 9380010A STS adc_mux,R24
(0336) Delay(0xff); //A/D采样延时
030F EF0F LDI R16,0xFF
0310 E010 LDI R17,0
0311 DFF3 RCALL _Delay
(0337) ad_reulst();
0312 D117 RCALL _ad_reulst
(0338) if(adc_old <=139 ) //当前温度为80-90
0313 E88B LDI R24,0x8B
0314 E090 LDI R25,0
0315 9020011D LDS R2,adc_old
0317 9030011E LDS R3,adc_old+1
0319 1582 CP R24,R2
031A 0593 CPC R25,R3
031B F058 BCS 0x0327
(0339) {temp_step=80;
031C E580 LDI R24,0x50
031D 93800118 STS temp_step,R24
(0340) temp_start=139;
031F E88B LDI R24,0x8B
0320 9390011A STS temp_start+1,R25
0322 93800119 STS temp_start,R24
(0341) temp_dange=3;
0324 E083 LDI R24,3
0325 93800117 STS temp_dange,R24
(0342) }
(0343) if(adc_old > 139 && adc_old <=178 ) //当前温度为70-80
0327 E88B LDI R24,0x8B
0328 E090 LDI R25,0
0329 9020011D LDS R2,adc_old
032B 9030011E LDS R3,adc_old+1
032D 1582 CP R24,R2
032E 0593 CPC R25,R3
032F F478 BCC 0x033F
0330 EB82 LDI R24,0xB2
0331 1582 CP R24,R2
0332 0593 CPC R25,R3
0333 F058 BCS 0x033F
(0344) {temp_step=70;
0334 E486 LDI R24,0x46
0335 93800118 STS temp_step,R24
(0345) temp_start=178;
0337 EB82 LDI R24,0xB2
0338 9390011A STS temp_start+1,R25
033A 93800119 STS temp_start,R24
(0346) temp_dange=4;
033C E084 LDI R24,4
033D 93800117 STS temp_dange,R24
(0347) }
(0348) if(adc_old > 178 && adc_old <=230 ) //当前温度为60-70
033F EB82 LDI R24,0xB2
0340 E090 LDI R25,0
0341 9020011D LDS R2,adc_old
0343 9030011E LDS R3,adc_old+1
0345 1582 CP R24,R2
0346 0593 CPC R25,R3
0347 F478 BCC 0x0357
0348 EE86 LDI R24,0xE6
0349 1582 CP R24,R2
034A 0593 CPC R25,R3
034B F058 BCS 0x0357
(0349) {temp_step=60;
034C E38C LDI R24,0x3C
034D 93800118 STS temp_step,R24
(0350) temp_start=230;
034F EE86 LDI R24,0xE6
0350 9390011A STS temp_start+1,R25
0352 93800119 STS temp_start,R24
(0351) temp_dange=5;
0354 E085 LDI R24,5
0355 93800117 STS temp_dange,R24
(0352) }
(0353) if(adc_old > 230 && adc_old <=293 ) //当前温度为50-60
0357 EE86 LDI R24,0xE6
0358 E090 LDI R25,0
0359 9020011D LDS R2,adc_old
035B 9030011E LDS R3,adc_old+1
035D 1582 CP R24,R2
035E 0593 CPC R25,R3
035F F480 BCC 0x0370
0360 E285 LDI R24,0x25
0361 E091 LDI R25,1
0362 1582 CP R24,R2
0363 0593 CPC R25,R3
0364 F058 BCS 0x0370
(0354) {temp_step=50;
0365 E382 LDI R24,0x32
0366 93800118 STS temp_step,R24
(0355) temp_start=293;
0368 E285 LDI R24,0x25
0369 9390011A STS temp_start+1,R25
036B 93800119 STS temp_start,R24
(0356) temp_dange=6;
036D E086 LDI R24,6
036E 93800117 STS temp_dange,R24
(0357) }
(0358) if(adc_old > 293 && adc_old <=371 ) //当前温度为40-50
0370 E285 LDI R24,0x25
0371 E091 LDI R25,1
0372 9020011D LDS R2,adc_old
0374 9030011E LDS R3,adc_old+1
0376 1582 CP R24,R2
0377 0593 CPC R25,R3
0378 F478 BCC 0x0388
0379 E783 LDI R24,0x73
037A 1582 CP R24,R2
037B 0593 CPC R25,R3
037C F058 BCS 0x0388
(0359) {temp_step=40;
037D E288 LDI R24,0x28
037E 93800118 STS temp_step,R24
(0360) temp_start=371;
0380 E783 LDI R24,0x73
0381 9390011A STS temp_start+1,R25
0383 93800119 STS temp_start,R24
(0361) temp_dange=8;
0385 E088 LDI R24,0x8
0386 93800117 STS temp_dange,R24
(0362) }
(0363) if(adc_old > 371 && adc_old <=462 ) //当前温度为30-40
0388 E783 LDI R24,0x73
0389 E091 LDI R25,1
038A 9020011D LDS R2,adc_old
038C 9030011E LDS R3,adc_old+1
038E 1582 CP R24,R2
038F 0593 CPC R25,R3
0390 F478 BCC 0x03A0
0391 EC8E LDI R24,0xCE
0392 1582 CP R24,R2
0393 0593 CPC R25,R3
0394 F058 BCS 0x03A0
(0364) {temp_step=30;
0395 E18E LDI R24,0x1E
0396 93800118 STS temp_step,R24
(0365) temp_start=462;
0398 EC8E LDI R24,0xCE
0399 9390011A STS temp_start+1,R25
039B 93800119 STS temp_start,R24
(0366) temp_dange=9;
039D E089 LDI R24,0x9
039E 93800117 STS temp_dange,R24
(0367) }
(0368) if(adc_old > 462 && adc_old <=562 ) //当前温度为20-30
03A0 EC8E LDI R24,0xCE
03A1 E091 LDI R25,1
03A2 9020011D LDS R2,adc_old
03A4 9030011E LDS R3,adc_old+1
03A6 1582 CP R24,R2
03A7 0593 CPC R25,R3
03A8 F480 BCC 0x03B9
03A9 E382 LDI R24,0x32
03AA E092 LDI R25,2
03AB 1582 CP R24,R2
03AC 0593 CPC R25,R3
03AD F058 BCS 0x03B9
(0369) {temp_step=20;
03AE E184 LDI R24,0x14
03AF 93800118 STS temp_step,R24
(0370) temp_start=562;
03B1 E382 LDI R24,0x32
03B2 9390011A STS temp_start+1,R25
03B4 93800119 STS temp_start,R24
(0371) temp_dange=10;
03B6 E08A LDI R24,0xA
03B7 93800117 STS temp_dange,R24
(0372) }
(0373) if(adc_old > 562 && adc_old <=663 ) //当前温度为10-20
03B9 E382 LDI R24,0x32
03BA E092 LDI R25,2
03BB 9020011D LDS R2,adc_old
03BD 9030011E LDS R3,adc_old+1
03BF 1582 CP R24,R2
03C0 0593 CPC R25,R3
03C1 F478 BCC 0x03D1
03C2 E987 LDI R24,0x97
03C3 1582 CP R24,R2
03C4 0593 CPC R25,R3
03C5 F058 BCS 0x03D1
(0374) {temp_step=10;
03C6 E08A LDI R24,0xA
03C7 93800118 STS temp_step,R24
(0375) temp_start=663;
03C9 E987 LDI R24,0x97
03CA 9390011A STS temp_start+1,R25
03CC 93800119 STS temp_start,R24
(0376) temp_dange=10;
03CE E08A LDI R24,0xA
03CF 93800117 STS temp_dange,R24
(0377) }
(0378) if(adc_old > 663 && adc_old <=758 ) //当前温度为0-10
03D1 E987 LDI R24,0x97
03D2 E092 LDI R25,2
03D3 9020011D LDS R2,adc_old
03D5 9030011E LDS R3,adc_old+1
03D7 1582 CP R24,R2
03D8 0593 CPC R25,R3
03D9 F470 BCC 0x03E8
03DA EF86 LDI R24,0xF6
03DB 1582 CP R24,R2
03DC 0593 CPC R25,R3
03DD F050 BCS 0x03E8
(0379) {temp_step=0;
03DE 2422 CLR R2
03DF 92200118 STS temp_step,R2
(0380) temp_start=758;
03E1 9390011A STS temp_start+1,R25
03E3 93800119 STS temp_start,R24
(0381) temp_dange=9;
03E5 E089 LDI R24,0x9
03E6 93800117 STS temp_dange,R24
(0382) }
(0383) if(adc_old > 758 && adc_old <=839 ) //当前温度为-10~0
03E8 EF86 LDI R24,0xF6
03E9 E092 LDI R25,2
03EA 9020011D LDS R2,adc_old
03EC 9030011E LDS R3,adc_old+1
03EE 1582 CP R24,R2
03EF 0593 CPC R25,R3
03F0 F480 BCC 0x0401
03F1 E487 LDI R24,0x47
03F2 E093 LDI R25,3
03F3 1582 CP R24,R2
03F4 0593 CPC R25,R3
03F5 F058 BCS 0x0401
(0384) {temp_step=-10;
03F6 EF86 LDI R24,0xF6
03F7 93800118 STS temp_step,R24
(0385) temp_start=839;
03F9 E487 LDI R24,0x47
03FA 9390011A STS temp_start+1,R25
03FC 93800119 STS temp_start,R24
(0386) temp_dange=8;
03FE E088 LDI R24,0x8
03FF 93800117 STS temp_dange,R24
(0387) }
(0388) now_temp=(temp_step+(temp_start-adc_old)/temp_dange);
0401 9020011D LDS R2,adc_old
0403 9030011E LDS R3,adc_old+1
0405 91000119 LDS R16,temp_start
0407 9110011A LDS R17,temp_start+1
0409 1902 SUB R16,R2
040A 0913 SBC R17,R3
040B 91200117 LDS R18,temp_dange
040D 2733 CLR R19
040E D379 RCALL div16u
040F 90200118 LDS R2,temp_step
0411 2433 CLR R3
0412 FC27 SBRC R2,7
0413 9430 COM R3
0414 0E20 ADD R2,R16
0415 1E31 ADC R3,R17
0416 92300108 STS now_temp+1,R3
0418 92200107 STS now_temp,R2
(0389) if(adc_old > 839 )
041A E487 LDI R24,0x47
041B E093 LDI R25,3
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?