charger.lst
来自「a good program for battery charge,only f」· LST 代码 · 共 1,857 行 · 第 1/5 页
LST
1,857 行
041C 9020011D LDS R2,adc_old
041E 9030011E LDS R3,adc_old+1
0420 1582 CP R24,R2
0421 0593 CPC R25,R3
0422 F430 BCC 0x0429
(0390) {
(0391) now_temp=-11;
0423 EF85 LDI R24,0xF5
0424 EF9F LDI R25,0xFF
0425 93900108 STS now_temp+1,R25
0427 93800107 STS now_temp,R24
(0392) }
0429 9508 RET
(0393) }
(0394) /**********************A/D循环采样60次取平均值********************/
(0395) void ad_reulst(void)
(0396) {
(0397) abc=61;
_ad_reulst:
042A E38D LDI R24,0x3D
042B E090 LDI R25,0
042C 93900104 STS abc+1,R25
042E 93800103 STS abc,R24
(0398) adc_old=0;
0430 2422 CLR R2
0431 2433 CLR R3
0432 9230011E STS adc_old+1,R3
0434 9220011D STS adc_old,R2
0436 C011 RJMP 0x0448
(0399) while(--abc)
(0400) {Delay(0xff);
0437 EF0F LDI R16,0xFF
0438 E010 LDI R17,0
0439 DECB RCALL _Delay
(0401) adc_old=(adc_old+adc_rel);
043A 90200113 LDS R2,adc_rel
043C 90300114 LDS R3,adc_rel+1
043E 9040011D LDS R4,adc_old
0440 9050011E LDS R5,adc_old+1
0442 0C42 ADD R4,R2
0443 1C53 ADC R5,R3
0444 9250011E STS adc_old+1,R5
0446 9240011D STS adc_old,R4
0448 91800103 LDS R24,abc
044A 91900104 LDS R25,abc+1
044C 9701 SBIW R24,1
044D 93900104 STS abc+1,R25
044F 93800103 STS abc,R24
0451 3080 CPI R24,0
0452 0789 CPC R24,R25
0453 F719 BNE 0x0437
(0402) }
(0403) adc_old=adc_old/60;
0454 E32C LDI R18,0x3C
0455 E030 LDI R19,0
0456 9100011D LDS R16,adc_old
0458 9110011E LDS R17,adc_old+1
045A D32D RCALL div16u
045B 9310011E STS adc_old+1,R17
045D 9300011D STS adc_old,R16
045F 9508 RET
(0404) }
(0405) /********************************************************************/
(0406) void alarm(void)
(0407) {
(0408) adc_mux=0X01;
_alarm:
0460 E081 LDI R24,1
0461 9380010A STS adc_mux,R24
(0409) Delay(0xff); //A/D采样延时
0463 EF0F LDI R16,0xFF
0464 E010 LDI R17,0
0465 DE9F RCALL _Delay
(0410) ad_reulst();
0466 DFC3 RCALL _ad_reulst
0467 C01C RJMP 0x0484
(0411) while(adc_old > 440) //检测当前电压是不是大于16.5V
(0412) {
(0413) temp |= (1<<LED_yes);
0468 91800116 LDS R24,temp
046A 6088 ORI R24,0x8
046B 93800116 STS temp,R24
(0414) PORTD &= ~(1<<Green); //绿色指示灯灭
046D 985B CBI 0x0B,3
(0415) PORTB &= ~(1<<P0); //关断P0 0.16A恒流充电
046E 9829 CBI 0x05,1
(0416) PORTD |= (1<<P1); //打开P1 0.16A恒流充电
046F 9A5D SBI 0x0B,5
(0417) PORTB &= ~(1<<P2); //关断P2 0.16A恒流充电
0470 982F CBI 0x05,7
(0418) PORTB &= ~(1<<P3); //关断P3 0.16A恒流充电
0471 982E CBI 0x05,6
(0419) TC1321_SET_1(999); // D/A送电压10V
0472 EE07 LDI R16,0xE7
0473 E013 LDI R17,3
0474 DE5D RCALL _TC1321_SET_1
(0420)
(0421) adc_mux=0X01;
0475 E081 LDI R24,1
0476 9380010A STS adc_mux,R24
(0422) Delay(0xff); //A/D采样延时
0478 EF0F LDI R16,0xFF
0479 E010 LDI R17,0
047A DE8A RCALL _Delay
(0423) ad_reulst();
047B DFAE RCALL _ad_reulst
(0424) adc_old=adc_rel;
047C 90200113 LDS R2,adc_rel
047E 90300114 LDS R3,adc_rel+1
0480 9230011E STS adc_old+1,R3
0482 9220011D STS adc_old,R2
0484 EB88 LDI R24,0xB8
0485 E091 LDI R25,1
0486 9020011D LDS R2,adc_old
0488 9030011E LDS R3,adc_old+1
048A 1582 CP R24,R2
048B 0593 CPC R25,R3
048C F2D8 BCS 0x0468
(0425) }
(0426) temp &= ~(1<<LED_yes);
048D 91800116 LDS R24,temp
048F 7F87 ANDI R24,0xF7
0490 93800116 STS temp,R24
(0427)
(0428)
(0429) adc_mux=0X02;
0492 E082 LDI R24,2
0493 9380010A STS adc_mux,R24
(0430) Delay(0x4ff); //A/D采样延时
0495 EF0F LDI R16,0xFF
0496 E014 LDI R17,4
0497 DE6D RCALL _Delay
(0431) ad_reulst();
0498 DF91 RCALL _ad_reulst
0499 C018 RJMP 0x04B2
(0432) while(adc_old < 0x7A) //检测温度有没有大于85摄氏度 0.42V
(0433) {
(0434) PORTD &= ~(1<<Green); //绿色指示灯灭
049A 985B CBI 0x0B,3
(0435) PORTD |= (1<<Red);
049B 9A5A SBI 0x0B,2
(0436)
(0437) PORTB &= ~(1<<P0); //关断P0 0.16A恒流充电
049C 9829 CBI 0x05,1
(0438) PORTD |= (1<<P1); //打开P1 0.16A恒流充电
049D 9A5D SBI 0x0B,5
(0439) PORTB &= ~(1<<P2); //关断P2 0.16A恒流充电
049E 982F CBI 0x05,7
(0440) PORTB &= ~(1<<P3); //关断P3 0.16A恒流充电
049F 982E CBI 0x05,6
(0441) TC1321_SET_1(999); // D/A送电压10.0V
04A0 EE07 LDI R16,0xE7
04A1 E013 LDI R17,3
04A2 DE2F RCALL _TC1321_SET_1
(0442) adc_mux=0X02;
04A3 E082 LDI R24,2
04A4 9380010A STS adc_mux,R24
(0443) Delay(0x4ff); //A/D采样延时
04A6 EF0F LDI R16,0xFF
04A7 E014 LDI R17,4
04A8 DE5C RCALL _Delay
(0444) ad_reulst();
04A9 DF80 RCALL _ad_reulst
(0445) adc_old=adc_rel;
04AA 90200113 LDS R2,adc_rel
04AC 90300114 LDS R3,adc_rel+1
04AE 9230011E STS adc_old+1,R3
04B0 9220011D STS adc_old,R2
04B2 9180011D LDS R24,adc_old
04B4 9190011E LDS R25,adc_old+1
04B6 378A CPI R24,0x7A
04B7 E0E0 LDI R30,0
04B8 079E CPC R25,R30
04B9 F300 BCS 0x049A
(0446) }
(0447)
(0448)
(0449) if((temp&(1<<anther))==0x20) //0电流检测使能位
04BA 91800116 LDS R24,temp
04BC 7280 ANDI R24,0x20
04BD 3280 CPI R24,0x20
04BE F009 BEQ 0x04C0
04BF C06F RJMP 0x052F
(0450) {
(0451) adc_mux=0X07;
04C0 E087 LDI R24,7
04C1 9380010A STS adc_mux,R24
(0452) Delay(0xff); //A/D采样延时
04C3 EF0F LDI R16,0xFF
04C4 E010 LDI R17,0
04C5 DE3F RCALL _Delay
(0453) ad_reulst();
04C6 DF63 RCALL _ad_reulst
(0454) if(adc_old < 27){Second_count_3=00;} //27
04C7 9180011D LDS R24,adc_old
04C9 9190011E LDS R25,adc_old+1
04CB 318B CPI R24,0x1B
04CC E0E0 LDI R30,0
04CD 079E CPC R25,R30
04CE F008 BCS 0x04D0
04CF C056 RJMP 0x0526
04D0 2422 CLR R2
04D1 2433 CLR R3
04D2 9230010E STS Second_count_3+1,R3
04D4 9220010D STS Second_count_3,R2
04D6 C04F RJMP 0x0526
(0455) while(adc_old < 27) //检测当前电流是不是为0
(0456) {
(0457) temp |= (1<<LED_yes);
04D7 91800116 LDS R24,temp
04D9 6088 ORI R24,0x8
04DA 93800116 STS temp,R24
(0458) PORTD &= ~(1<<Green); //绿色指示灯灭
04DC 985B CBI 0x0B,3
(0459) PORTB &= ~(1<<P0); //关断P0 0.16A恒流充电
04DD 9829 CBI 0x05,1
(0460) PORTD |= (1<<P1); //打开P1 0.16A恒流充电
04DE 9A5D SBI 0x0B,5
(0461) PORTB &= ~(1<<P2); //关断P2 0.16A恒流充电
04DF 982F CBI 0x05,7
(0462) PORTB &= ~(1<<P3); //关断P3 0.16A恒流充电
04E0 982E CBI 0x05,6
(0463) TC1321_SET_1(999); // D/A送电压10.0V
04E1 EE07 LDI R16,0xE7
04E2 E013 LDI R17,3
04E3 DDEE RCALL _TC1321_SET_1
(0464) if(Second_count_3>5)
04E4 E085 LDI R24,5
04E5 E090 LDI R25,0
04E6 9020010D LDS R2,Second_count_3
04E8 9030010E LDS R3,Second_count_3+1
04EA 1582 CP R24,R2
04EB 0593 CPC R25,R3
04EC F550 BCC 0x0517
(0465) {
(0466) Second_count_3=00;
04ED 2422 CLR R2
04EE 2433 CLR R3
04EF 9230010E STS Second_count_3+1,R3
04F1 9220010D STS Second_count_3,R2
(0467) TC1321_SET_1(735); // D/A送电压15.8V
04F3 ED0F LDI R16,0xDF
04F4 E012 LDI R17,2
04F5 DDDC RCALL _TC1321_SET_1
(0468) Delay(0xff);
04F6 EF0F LDI R16,0xFF
04F7 E010 LDI R17,0
04F8 DE0C RCALL _Delay
(0469)
(0470) adc_mux=0X07;
04F9 E087 LDI R24,7
04FA 9380010A STS adc_mux,R24
(0471) Delay(0xff); //A/D采样延时
04FC EF0F LDI R16,0xFF
04FD E010 LDI R17,0
04FE DE06 RCALL _Delay
(0472) ad_reulst();
04FF DF2A RCALL _ad_reulst
(0473) adc_old=adc_rel;
0500 90200113 LDS R2,adc_rel
0502 90300114 LDS R3,adc_rel+1
0504 9230011E STS adc_old+1,R3
0506 9220011D STS adc_old,R2
(0474)
(0475) if(adc_old > 6)
0508 E086 LDI R24,6
0509 E090 LDI R25,0
050A 9020011D LDS R2,adc_old
050C 9030011E LDS R3,adc_old+1
050E 1582 CP R24,R2
050F 0593 CPC R25,R3
0510 F430 BCC 0x0517
(0476) {
(0477) TC1321_SET_1(735); // D/A送电压15.8V
0511 ED0F LDI R16,0xDF
0512 E012 LDI R17,2
0513 DDBE RCALL _TC1321_SET_1
(0478) Delay(0xff);
0514 EF0F LDI R16,0xFF
0515 E010 LDI R17,0
0516 DDEE RCALL _Delay
(0479) }
(0480) }
(0481)
(0482) adc_mux=0X07;
0517 E087 LDI R24,7
0518 9380010A STS adc_mux,R24
(0483) Delay(0xff); //A/D采样延时
051A EF0F LDI R16,0xFF
051B E010 LDI R17,0
051C DDE8 RCALL _Delay
(0484) ad_reulst();
051D DF0C RCALL _ad_reulst
(0485) adc_old=adc_rel;
051E 90200113 LDS R2,adc_rel
0520 90300114 LDS R3,adc_rel+1
0522 9230011E STS adc_old+1,R3
0524 9220011D STS adc_old,R2
0526 9180011D LDS R24,adc_old
0528 9190011E LDS R25,adc_old+1
052A 318B CPI R24,0x1B
052B E0E0 LDI R30,0
052C 079E CPC R25,R30
052D F408 BCC 0x052F
052E CFA8 RJMP 0x04D7
(0486) }
(0487) }
(0488) temp &= ~(1<<LED_yes);
052F 91800116 LDS R24,temp
0531 7F87 ANDI R24,0xF7
0532 93800116 STS temp,R24
0534 9508 RET
(0489) }
(0490) /******************************************************************/
(0491) //MAIN程序
(0492) void main(void)
(0493) {
(0494) unsigned char i;
(0495) ADMUX=00; //防止两个基准原短路
_main:
i --> Y+1
0535 2422 CLR R2
0536 9220007C STS 0x7C,R2
(0496) PORTB = 0x00; // I/O口初始化
0538 B825 OUT 0x05,R2
(0497) DDRB = 0xFF; // I/O口初始化 老版本是FB
0539 EF8F LDI R24,0xFF
053A B984 OUT 0x04,R24
(0498) PORTC = 0x00; // I/O口初始化
053B B828 OUT 0x08,R2
(0499) DDRC = 0x70; // I/O口初始化 老版本是F0
053C E780 LDI R24,0x70
053D B987 OUT 0x07,R24
(0500) PORTD = 0x00; // I/O口初始化
053E B82B OUT 0x0B,R2
(0501) DDRD = 0x2C; // I/O口初始化 老版本是FF
053F E28C LDI R24,0x2C
0540 B98A OUT 0x0A,R24
(0502) Second_count_3=0;
0541 2433 CLR R3
0542 9230010E STS Second_count_3+1,R3
0544 9220010D STS Second_count_3,R2
(0503) TC1321_SET_1(780); // 14.78,不补偿
0546 E00C LDI R16,0xC
0547 E013 LDI R17,3
0548 DD89 RCALL _TC1321_SET_1
(0504) if(Second_count_3<6){;}
0549 9180010D LDS R24,Second_count_3
054B 9190010E LDS R25,Second_count_3+1
054D 3086 CPI R24,6
054E E0E0 LDI R30,0
054F 079E CPC R25,R30
0550 F400 BCC 0x0551
(0505) cycle=0x00; //第五次到第一次之间循环次数清零
0551 2422 CLR R2
0552 92200115 STS cycle,R2
(0506) temp &= ~(1<<plus_charge); //上电后不允许进行脉冲充电
0554 91800116 LDS R24,temp
0556 7E8F ANDI R24,0xEF
0557 93800116 STS temp,R24
(0507) temp &= ~(1<<LED_yes); //开始不允许红灯闪烁
0559 7F87 ANDI R24,0xF7
055A 93800116 STS temp,R24
(0508)
(0509) temp &= ~(1<<anther); //测试用
055C 7D8F ANDI R24,0xDF
055D 93800116 STS temp,R24
(0510) //temp |= (1<<anther);
(0511) //temp |= (1<<LED_yes); //允许红灯闪烁
(0512) temp |= (1<<Charge_Sel); //选择warmup_charger方式
055F 6480 ORI R24,0x40
0560 93800116 STS temp,R24
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?