📄 charger.lst
字号:
(0513) SEI(); //使能全局中断
0562 9478 BSET 7
(0514) timer1_init(); //timer 1 interrupt sources
0563 DB82 RCALL _timer1_init
(0515) TIMSK1 = 0x01; //timer 1 interrupt sources
0564 E081 LDI R24,1
0565 9380006F STS 0x6F,R24
(0516) TCNT1H = 0xFE; //reload counter high value
0567 EF8E LDI R24,0xFE
0568 93800085 STS 0x85,R24
(0517) TCNT1L = 0xAA; //reload counter low value
056A EA8A LDI R24,0xAA
056B 93800084 STS 0x84,R24
(0518) PORTD &= ~(1<<Red); //关闭红色指示灯
056D 985A CBI 0x0B,2
(0519) PORTD &= ~(1<<Green); //关闭绿色指示灯
056E 985B CBI 0x0B,3
(0520) adc_init();
056F DC0F RCALL _adc_init
(0521) adc_old=0;
0570 2422 CLR R2
0571 2433 CLR R3
0572 9230011E STS adc_old+1,R3
0574 9220011D STS adc_old,R2
(0522) adc_rel=0;
0576 92300114 STS adc_rel+1,R3
0578 92200113 STS adc_rel,R2
(0523)
(0524) PORTB &= ~(1<<P0); //关断P0 0.8A恒流充电
057A 9829 CBI 0x05,1
(0525) PORTD &= ~(1<<P1); //关断P1 0.8A恒流充电
057B 985D CBI 0x0B,5
(0526) PORTB &= ~(1<<P2); //关断P2 0.8A恒流充电
057C 982F CBI 0x05,7
(0527) PORTB |= (1<<P3); //打开P3 0.8A恒流充电
057D 9A2E SBI 0x05,6
(0528)
(0529) temp |= (1<<anther);
057E 91800116 LDS R24,temp
0580 6280 ORI R24,0x20
0581 93800116 STS temp,R24
(0530) alarm(); //检测过流、低压、过温
0583 DEDC RCALL _alarm
0584 C1FF RJMP 0x0784
(0531) //------------------ 开始进入主流层 --------------------/
(0532) //------------------在2A负载情况下,-------------------/
(0533) // 电池电压15.55V ADC1=421 充电器输出15.8V 电池电压15.55V
(0534) // 电池电压14.4V ADC1=390
(0535) // 电池电压13.8V ADC1=374
(0536) // 电池电压13.2V ADC1=358
(0537) // 电池电压13.0V ADC1=353
(0538) // 电池电压12.6V ADC1=342
(0539) // 电池电压12.0V ADC1=326
(0540) // 电池电压11.5V ADC1=313
(0541) // 电池电压10V ADC1=273
(0542) // 2A ADC7=229
(0543) //-----------------在0.16A负载情况下,------------------//
(0544) // 电池电压15.55V ADC1=411
(0545) // 电池电压14.4V ADC1=380
(0546) // 电池电压13.8V ADC1=364
(0547) // 电池电压13.2V ADC1=348
(0548) // 电池电压13.0V ADC1=343
(0549) // 电池电压12.6V ADC1=332
(0550) // 电池电压12.0V ADC1=316
(0551) // 电池电压11.5V ADC1=303
(0552) // 电池电压10.0V ADC1=263
(0553) // 0.16A ADC7=31
(0554) //------------------------------------------------------/
(0555) // 电流2A情况下,充电输出电压 15.8 V ;TC132=2.820 V 000 00000000
(0556) // 电流2A情况下,充电输出电压 14.4 V ;TC132=2.978 V 878 00000000
(0557) // 电流2A情况下,充电输出电压 13.8 V ;TC132=3.015 V 892 00000000
(0558) // 电流2A情况下,充电输出电压 13.2 V ;TC132=3.047 V 903 00000000
(0559) // 电流2A情况下,充电输出电压 13.0 V ;TC132=3.056 V 893
(0560) // 电流2A情况下,充电输出电压 12.6 V ;TC132=3.075 V 899
(0561) // 电流0.16A情况下,充电输出电压 12.6 V ;TC132=3.100 V 906
(0562) // 电流0.16A情况下,充电输出电压 12.0 V ;TC132=3.127 V 921 00000000
(0563) // 电流0.16A情况下,充电输出电压 11.5 V ;TC132=3.148 V 930 00000000
(0564) // 电流0.16A情况下,充电输出电压 10.0 V ;TC132=3.211 V 950 00000000
(0565) //------------------------------------------------------/
(0566) while(1)
(0567) {
(0568) goto step_3; //开始应该 goto step_3进入恒流充电
(0569) /***** 第一步 去硫化、脉冲、14.4V&13.8V 0.8A 1Hz 脉冲充电 红色指示灯*****/
(0570) step_1:
(0571) goto step_3;
(0572) /****************** 第二步 软启动、14.4V/0.8A 红色指示灯***********************/
(0573) step_2:
(0574) goto step_3;
(0575) /********************* 第三步 恒流4A、红色灯**************************/
(0576) step_3:
(0577) Second_count_1=00; //延时24小时,等于86400秒
0585 2422 CLR R2
0586 2433 CLR R3
0587 92300112 STS Second_count_1+1,R3
0589 92200111 STS Second_count_1,R2
(0578) Second_count_2=00; //Second_count_1*Second_count_2=60*1660
058B 92300110 STS Second_count_2+1,R3
058D 9220010F STS Second_count_2,R2
058F C069 RJMP 0x05F9
(0579) while(1)
(0580) {
(0581) temp |= (1<<anther);
0590 91800116 LDS R24,temp
0592 6280 ORI R24,0x20
0593 93800116 STS temp,R24
(0582) alarm(); //报警扫描
0595 DECA RCALL _alarm
(0583) Delay(0x7ff);
0596 EF0F LDI R16,0xFF
0597 E017 LDI R17,7
0598 DD6C RCALL _Delay
(0584) Delay(0x7ff);
0599 EF0F LDI R16,0xFF
059A E017 LDI R17,7
059B DD69 RCALL _Delay
(0585)
(0586) PORTD |= (1<<Red); //指示灯显示红色
059C 9A5A SBI 0x0B,2
(0587) PORTD &= ~(1<<Green); //绿色指示灯灭
059D 985B CBI 0x0B,3
(0588)
(0589) PORTB &= ~(1<<P0); //关断P0 4A恒流充电
059E 9829 CBI 0x05,1
(0590) PORTD &= ~(1<<P1); //关断P1 4A恒流充电
059F 985D CBI 0x0B,5
(0591) PORTB &= ~(1<<P2); //关断P2 4A恒流充电
05A0 982F CBI 0x05,7
(0592) PORTB |= (1<<P3); //打开P3 4A恒流充电
05A1 9A2E SBI 0x05,6
(0593) TC1321_SET(878); // D/A送电压14.4V
05A2 E60E LDI R16,0x6E
05A3 E013 LDI R17,3
05A4 DC83 RCALL _TC1321_SET
(0594) while(Second_count_2>1459) //24小时到 1459
05A5 EB83 LDI R24,0xB3
05A6 E095 LDI R25,5
05A7 9020010F LDS R2,Second_count_2
05A9 90300110 LDS R3,Second_count_2+1
05AB 1582 CP R24,R2
05AC 0593 CPC R25,R3
05AD F408 BCC 0x05AF
05AE C112 RJMP 0x06C1
(0595) { //则跳到第七步
(0596) goto step_7;
(0597) }
(0598)
(0599)
(0600) adc_mux=0X07;
05AF E087 LDI R24,7
05B0 9380010A STS adc_mux,R24
(0601) Delay(0xff); //A/D采样延时
05B2 EF0F LDI R16,0xFF
05B3 E010 LDI R17,0
05B4 DD50 RCALL _Delay
(0602) ad_reulst();
05B5 DE74 RCALL _ad_reulst
(0603) Second_count_3=00;
05B6 2422 CLR R2
05B7 2433 CLR R3
05B8 9230010E STS Second_count_3+1,R3
05BA 9220010D STS Second_count_3,R2
(0604) if(adc_old > 0x33 && adc_old < 390 ) //电流
05BC E383 LDI R24,0x33
05BD E090 LDI R25,0
05BE 9020011D LDS R2,adc_old
05C0 9030011E LDS R3,adc_old+1
05C2 1582 CP R24,R2
05C3 0593 CPC R25,R3
05C4 F518 BCC 0x05E8
05C5 01C1 MOVW R24,R2
05C6 3886 CPI R24,0x86
05C7 E0E1 LDI R30,1
05C8 079E CPC R25,R30
05C9 F4F0 BCC 0x05E8
(0605) {
(0606) while(Second_count_3<2) //等待2秒,因为拔掉电池,电流下降也会满足此条件,但是应该进入
05CA 9180010D LDS R24,Second_count_3
05CC 9190010E LDS R25,Second_count_3+1
05CE 3082 CPI R24,2
05CF E0E0 LDI R30,0
05D0 079E CPC R25,R30
05D1 F3C0 BCS 0x05CA
(0607) { //0电流报警,而不该进入第四步,所以等待2秒
(0608) // temp |= (1<<anther);
(0609) // alarm();
(0610) // PORTB &= ~(1<<P0); //关断P0 4A恒流充电
(0611) // PORTD &= ~(1<<P1); //关断P1 4A恒流充电
(0612) // PORTB &= ~(1<<P2); //关断P2 4A恒流充电
(0613) // PORTB |= (1<<P3); //打开P3 4A恒流充电
(0614) ;
(0615) }
(0616) adc_mux=0X07;
05D2 E087 LDI R24,7
05D3 9380010A STS adc_mux,R24
(0617) Delay(0xff); //A/D采样延时
05D5 EF0F LDI R16,0xFF
05D6 E010 LDI R17,0
05D7 DD2D RCALL _Delay
(0618) ad_reulst();
05D8 DE51 RCALL _ad_reulst
(0619) if(adc_old > 0x33 && adc_old < 390 )
05D9 E383 LDI R24,0x33
05DA E090 LDI R25,0
05DB 9020011D LDS R2,adc_old
05DD 9030011E LDS R3,adc_old+1
05DF 1582 CP R24,R2
05E0 0593 CPC R25,R3
05E1 F430 BCC 0x05E8
05E2 01C1 MOVW R24,R2
05E3 3886 CPI R24,0x86
05E4 E0E1 LDI R30,1
05E5 079E CPC R25,R30
05E6 F408 BCC 0x05E8
(0620) {
(0621) goto step_4;
05E7 C012 RJMP 0x05FA
(0622) }
(0623) }
(0624)
(0625)
(0626) adc_mux=0X01; //采样当前电池电压大小
05E8 E081 LDI R24,1
05E9 9380010A STS adc_mux,R24
(0627) Delay(0xff); //A/D采样延时
05EB EF0F LDI R16,0xFF
05EC E010 LDI R17,0
05ED DD17 RCALL _Delay
(0628) ad_reulst(); //刷新A/D采样值
05EE DE3B RCALL _ad_reulst
(0629) if(adc_old > 390 ) //检测当前电压是不是大于14.4V A/D电压1.31
05EF E886 LDI R24,0x86
05F0 E091 LDI R25,1
05F1 9020011D LDS R2,adc_old
05F3 9030011E LDS R3,adc_old+1
05F5 1582 CP R24,R2
05F6 0593 CPC R25,R3
05F7 F408 BCC 0x05F9
(0630) {
(0631) goto step_4; //则跳到第四步
05F8 C001 RJMP 0x05FA
05F9 CF96 RJMP 0x0590
(0632) }
(0633) }
(0634) /************************ 第四步 恒压、14.4V、橙色灯***************************/
(0635) step_4:
(0636) Second_count_1=00; //延时10小时,等于36000秒
05FA 2422 CLR R2
05FB 2433 CLR R3
05FC 92300112 STS Second_count_1+1,R3
05FE 92200111 STS Second_count_1,R2
(0637) Second_count_2=00; //Second_count_1*Second_count_2=60*600
0600 92300110 STS Second_count_2+1,R3
0602 9220010F STS Second_count_2,R2
0604 C0BA RJMP 0x06BF
(0638) while(1)
(0639) {
(0640) temp |= (1<<anther); //允许0电流检测
0605 91800116 LDS R24,temp
0607 6280 ORI R24,0x20
0608 93800116 STS temp,R24
(0641) alarm(); //报警扫描
060A DE55 RCALL _alarm
(0642) PORTB &= ~(1<<P0); //关断P0 4A恒流充电
060B 9829 CBI 0x05,1
(0643) PORTD &= ~(1<<P1); //关断P1 4A恒流充电
060C 985D CBI 0x0B,5
(0644) PORTB &= ~(1<<P2); //关断P2 4A恒流充电
060D 982F CBI 0x05,7
(0645) PORTB |= (1<<P3); //打开P3 4A恒流充电
060E 9A2E SBI 0x05,6
(0646) PORTD |= (1<<Green); //指示灯显示绿色
060F 9A5B SBI 0x0B,3
(0647) PORTD |= (1<<Red); //红色指示亮
0610 9A5A SBI 0x0B,2
(0648) TC1321_SET(878); // D/A送电压14.4V ,同时进行温度补偿
0611 E60E LDI R16,0x6E
0612 E013 LDI R17,3
0613 DC14 RCALL _TC1321_SET
0614 C015 RJMP 0x062A
(0649)
(0650) while(Second_count_2>600) //10小时到 600
(0651) { //则跳到第七步
(0652) Second_count_1=00; //延时55秒
0615 2422 CLR R2
0616 2433 CLR R3
0617 92300112 STS Second_count_1+1,R3
0619 92200111 STS Second_count_1,R2
061B C00D RJMP 0x0629
(0653) while(1) //延时3分钟,防止电流反灌
(0654) {
(0655) TC1321_SET_138(892); // D/A送电压13.8V ,同时进行温度补偿
061C E70C LDI R16,0x7C
061D E013 LDI R17,3
061E DC5E RCALL _TC1321_SET_138
(0656) if(Second_count_1>55)
061F E387 LDI R24,0x37
0620 E090 LDI R25,0
0621 90200111 LDS R2,Second_count_1
0623 90300112 LDS R3,Second_count_1+1
0625 1582 CP R24,R2
0626 0593 CPC R25,R3
0627 F408 BCC 0x0629
(0657) {goto step_7;}
0628 C098 RJMP 0x06C1
0629 CFF2 RJMP 0x061C
062A E588 LDI R24,0x58
062B E092 LDI R25,2
062C 9020010F LDS R2,Second_count_2
062E 90300110 LDS R3,Second_count_2+1
0630 1582 CP R24,R2
0631 0593 CPC R25,R3
0632 F310 BCS 0x0615
(0658) }
(0659) }
(0660)
(0661)
(0662) adc_mux=0X01; //采样当前电池电压大小
0633 E081 LDI R24,1
0634 9380010A STS adc_mux,R24
(0663) Delay(0xff); //A/D采样延时
0636 EF0F LDI R16,0xFF
0637 E010 LDI R17,0
0638 DCCC RCALL _Delay
(0664) ad_reulst(); //刷新A/D采样值
0639 DDF0 RCALL _ad_reulst
(0665) if(adc_old < 353) //检测当前电压是不是小于13V
063A 9180011D LDS R24,adc_old
063C 9190011E LDS R25,adc_old+1
063E 3681 CPI R24,0x61
063F E0E1 LDI R30,1
0640 079E CPC R25,R30
0641 F408 BCC 0x0643
(0666) { //小于13V则跳到第3步
(0667) goto step_3;
0642 CF42 RJMP 0x0585
(0668) }
(0669)
(0670)
(0671) adc_mux=0X07; //采样当前电流大小
0643 E087 LDI R24,7
0644 9380010A STS adc_mux,R24
(0672) Delay(0xff); //A/D采样延时
0646 EF0F LDI R16,0xFF
0647 E010 LDI R17,0
0648 DCBC RCALL _Delay
(0673) ad_reulst(); //刷新A/D采样值
0649 DDE0 RCALL _ad_reulst
(0674) Second_count_3=0; //为3秒等待做准备,因为拔掉电池插座也会满足此条件,但应该进入0电流报警,所以等3秒再检测电流
064A 2422 CLR R2
064B 2433 CLR R3
064C 9230010E STS Second_count_3+1,R3
064E 9220010D STS Second_count_3,R2
(0675) if(adc_old > 0x33 && adc_old < 217) //检测当前电流是不是小于2A---0.6V A/D
0650 E383 LDI R24,0x33
0651 E090 LDI R25,0
0652 9020011D LDS R2,adc_old
0654 9030011E LDS R3,adc_old+1
0656 1582 CP R24,R2
0657 0593 CPC R25,R3
0658 F008 BCS 0x065A
0659 C065 RJMP 0x06BF
065A 01C1 MOVW R24,R2
065B 3D89 CPI R24,0xD9
065C E0E0 LDI R30,0
065D 079E CPC R25,R30
065E F008 BCS 0x0660
065F C05F RJMP 0x06BF
(0676) { //小于则跳到第5步
(0677) while(Second_count_3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -