📄 test.s
字号:
ori R24,8
sts _temp,R24
.dbline 458
; PORTD &= ~(1<<Green); //绿色指示灯灭
cbi 0xb,3
.dbline 459
; PORTB &= ~(1<<P0); //关断P0 0.16A恒流充电
cbi 0x5,1
.dbline 460
; PORTD |= (1<<P1); //打开P1 0.16A恒流充电
sbi 0xb,5
.dbline 461
; PORTB &= ~(1<<P2); //关断P2 0.16A恒流充电
cbi 0x5,7
.dbline 462
; PORTB &= ~(1<<P3); //关断P3 0.16A恒流充电
cbi 0x5,6
.dbline 463
; TC1321_SET_1(999); // D/A送电压10.0V
ldi R16,999
ldi R17,3
rcall _TC1321_SET_1
.dbline 464
; if(Second_count_3>5)
ldi R24,5
ldi R25,0
lds R2,_Second_count_3
lds R3,_Second_count_3+1
cp R24,R2
cpc R25,R3
brsh L112
.dbline 465
; {
.dbline 466
; Second_count_3=00;
clr R2
clr R3
sts _Second_count_3+1,R3
sts _Second_count_3,R2
.dbline 467
; TC1321_SET_1(735); // D/A送电压15.8V
ldi R16,735
ldi R17,2
rcall _TC1321_SET_1
.dbline 468
; Delay(0xff);
ldi R16,255
ldi R17,0
rcall _Delay
.dbline 470
;
; adc_mux=0X07;
ldi R24,7
sts _adc_mux,R24
.dbline 471
; Delay(0xff); //A/D采样延时
ldi R16,255
ldi R17,0
rcall _Delay
.dbline 472
; ad_reulst();
rcall _ad_reulst
.dbline 473
; adc_old=adc_rel;
lds R2,_adc_rel
lds R3,_adc_rel+1
sts _adc_old+1,R3
sts _adc_old,R2
.dbline 475
;
; if(adc_old > 6)
ldi R24,6
ldi R25,0
lds R2,_adc_old
lds R3,_adc_old+1
cp R24,R2
cpc R25,R3
brsh L114
.dbline 476
; {
.dbline 477
; TC1321_SET_1(735); // D/A送电压15.8V
ldi R16,735
ldi R17,2
rcall _TC1321_SET_1
.dbline 478
; Delay(0xff);
ldi R16,255
ldi R17,0
rcall _Delay
.dbline 479
; }
L114:
.dbline 480
; }
L112:
.dbline 482
ldi R24,7
sts _adc_mux,R24
.dbline 483
ldi R16,255
ldi R17,0
rcall _Delay
.dbline 484
rcall _ad_reulst
.dbline 485
lds R2,_adc_rel
lds R3,_adc_rel+1
sts _adc_old+1,R3
sts _adc_old,R2
.dbline 486
L110:
.dbline 455
lds R24,_adc_old
lds R25,_adc_old+1
cpi R24,27
ldi R30,0
cpc R25,R30
brsh X4
rjmp L109
X4:
.dbline 487
;
; adc_mux=0X07;
; Delay(0xff); //A/D采样延时
; ad_reulst();
; adc_old=adc_rel;
; }
; }
L105:
.dbline 488
; temp &= ~(1<<LED_yes);
lds R24,_temp
andi R24,247
sts _temp,R24
.dbline -2
L98:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; i -> <dead>
.even
_main::
.dbline -1
.dbline 493
; }
; /******************************************************************/
; //MAIN程序
; void main(void)
; {
.dbline 495
; unsigned char i;
; ADMUX=00; //防止两个基准原短路
clr R2
sts 124,R2
.dbline 496
; PORTB = 0x00; // I/O口初始化
out 0x5,R2
.dbline 497
; DDRB = 0xFF; // I/O口初始化 老版本是FB
ldi R24,255
out 0x4,R24
.dbline 498
; PORTC = 0x00; // I/O口初始化
out 0x8,R2
.dbline 499
; DDRC = 0x70; // I/O口初始化 老版本是F0
ldi R24,112
out 0x7,R24
.dbline 500
; PORTD = 0x00; // I/O口初始化
out 0xb,R2
.dbline 501
; DDRD = 0x2C; // I/O口初始化 老版本是FF
ldi R24,44
out 0xa,R24
.dbline 502
; Second_count_3=0;
clr R3
sts _Second_count_3+1,R3
sts _Second_count_3,R2
.dbline 503
; TC1321_SET_1(780); // 14.78,不补偿
ldi R16,780
ldi R17,3
rcall _TC1321_SET_1
.dbline 504
; if(Second_count_3<6){;}
lds R24,_Second_count_3
lds R25,_Second_count_3+1
cpi R24,6
ldi R30,0
cpc R25,R30
brsh L117
.dbline 504
.dbline 504
.dbline 504
L117:
.dbline 505
; cycle=0x00; //第五次到第一次之间循环次数清零
clr R2
sts _cycle,R2
.dbline 506
; temp &= ~(1<<plus_charge); //上电后不允许进行脉冲充电
lds R24,_temp
andi R24,239
sts _temp,R24
.dbline 507
; temp &= ~(1<<LED_yes); //开始不允许红灯闪烁
andi R24,247
sts _temp,R24
.dbline 509
;
; temp &= ~(1<<anther); //测试用
andi R24,223
sts _temp,R24
.dbline 512
; //temp |= (1<<anther);
; //temp |= (1<<LED_yes); //允许红灯闪烁
; temp |= (1<<Charge_Sel); //选择warmup_charger方式
ori R24,64
sts _temp,R24
.dbline 513
; SEI(); //使能全局中断
sei
.dbline 514
; timer1_init(); //timer 1 interrupt sources
rcall _timer1_init
.dbline 515
; TIMSK1 = 0x01; //timer 1 interrupt sources
ldi R24,1
sts 111,R24
.dbline 516
; TCNT1H = 0xFE; //reload counter high value
ldi R24,254
sts 133,R24
.dbline 517
; TCNT1L = 0xAA; //reload counter low value
ldi R24,170
sts 132,R24
.dbline 518
; PORTD &= ~(1<<Red); //关闭红色指示灯
cbi 0xb,2
.dbline 519
; PORTD &= ~(1<<Green); //关闭绿色指示灯
cbi 0xb,3
.dbline 520
; adc_init();
rcall _adc_init
.dbline 521
; adc_old=0;
clr R2
clr R3
sts _adc_old+1,R3
sts _adc_old,R2
.dbline 522
; adc_rel=0;
sts _adc_rel+1,R3
sts _adc_rel,R2
.dbline 524
;
; PORTB &= ~(1<<P0); //关断P0 0.8A恒流充电
cbi 0x5,1
.dbline 525
; PORTD &= ~(1<<P1); //关断P1 0.8A恒流充电
cbi 0xb,5
.dbline 526
; PORTB &= ~(1<<P2); //关断P2 0.8A恒流充电
cbi 0x5,7
.dbline 527
; PORTB |= (1<<P3); //打开P3 0.8A恒流充电
sbi 0x5,6
.dbline 529
;
; temp |= (1<<anther);
lds R24,_temp
ori R24,32
sts _temp,R24
.dbline 530
; alarm(); //检测过流、低压、过温
rcall _alarm
rjmp L120
X5:
.dbline 567
; //------------------ 开始进入主流层 --------------------/
; //------------------在2A负载情况下,-------------------/
; // 电池电压15.55V ADC1=421 充电器输出15.8V 电池电压15.55V
; // 电池电压14.4V ADC1=390
; // 电池电压13.8V ADC1=374
; // 电池电压13.2V ADC1=358
; // 电池电压13.0V ADC1=353
; // 电池电压12.6V ADC1=342
; // 电池电压12.0V ADC1=326
; // 电池电压11.5V ADC1=313
; // 电池电压10V ADC1=273
; // 2A ADC7=229
; //-----------------在0.16A负载情况下,------------------//
; // 电池电压15.55V ADC1=411
; // 电池电压14.4V ADC1=380
; // 电池电压13.8V ADC1=364
; // 电池电压13.2V ADC1=348
; // 电池电压13.0V ADC1=343
; // 电池电压12.6V ADC1=332
; // 电池电压12.0V ADC1=316
; // 电池电压11.5V ADC1=303
; // 电池电压10.0V ADC1=263
; // 0.16A ADC7=31
; //------------------------------------------------------/
; // 电流2A情况下,充电输出电压 15.8 V ;TC132=2.820 V 000 00000000
; // 电流2A情况下,充电输出电压 14.4 V ;TC132=2.978 V 878 00000000
; // 电流2A情况下,充电输出电压 13.8 V ;TC132=3.015 V 892 00000000
; // 电流2A情况下,充电输出电压 13.2 V ;TC132=3.047 V 903 00000000
; // 电流2A情况下,充电输出电压 13.0 V ;TC132=3.056 V 893
; // 电流2A情况下,充电输出电压 12.6 V ;TC132=3.075 V 899
; // 电流0.16A情况下,充电输出电压 12.6 V ;TC132=3.100 V 906
; // 电流0.16A情况下,充电输出电压 12.0 V ;TC132=3.127 V 921 00000000
; // 电流0.16A情况下,充电输出电压 11.5 V ;TC132=3.148 V 930 00000000
; // 电流0.16A情况下,充电输出电压 10.0 V ;TC132=3.211 V 950 00000000
; //------------------------------------------------------/
; while(1)
; {
.dbline 568
; goto step_3; //开始应该 goto step_3进入恒流充电
.dbline 571
; /***** 第一步 去硫化、脉冲、14.4V&13.8V 0.8A 1Hz 脉冲充电 红色指示灯*****/
; step_1:
; goto step_3;
.dbline 574
; /****************** 第二步 软启动、14.4V/0.8A 红色指示灯***********************/
; step_2:
; goto step_3;
L122:
.dbline 577
; /********************* 第三步 恒流4A、红色灯**************************/
; step_3:
; Second_count_1=00; //延时24小时,等于86400秒
clr R2
clr R3
sts _Second_count_1+1,R3
sts _Second_count_1,R2
.dbline 578
; Second_count_2=00; //Second_count_1*Second_count_2=60*1660
sts _Second_count_2+1,R3
sts _Second_count_2,R2
rjmp L126
L125:
.dbline 580
; while(1)
; {
.dbline 581
; temp |= (1<<anther);
lds R24,_temp
ori R24,32
sts _temp,R24
.dbline 582
; alarm(); //报警扫描
rcall _alarm
.dbline 583
; Delay(0x7ff);
ldi R16,2047
ldi R17,7
rcall _Delay
.dbline 584
; Delay(0x7ff);
ldi R16,2047
ldi R17,7
rcall _Delay
.dbline 586
;
; PORTD |= (1<<Red); //指示灯显示红色
sbi 0xb,2
.dbline 587
; PORTD &= ~(1<<Green); //绿色指示灯灭
cbi 0xb,3
.dbline 589
;
; PORTB &= ~(1<<P0); //关断P0 4A恒流充电
cbi 0x5,1
.dbline 590
; PORTD &= ~(1<<P1); //关断P1 4A恒流充电
cbi 0xb,5
.dbline 591
; PORTB &= ~(1<<P2); //关断P2 4A恒流充电
cbi 0x5,7
.dbline 592
; PORTB |= (1<<P3); //打开P3 4A恒流充电
sbi 0x5,6
.dbline 593
; TC1321_SET(878); // D/A送电压14.4V
ldi R16,878
ldi R17,3
rcall _TC1321_SET
.dbline 595
.dbline 596
L129:
.dbline 594
; while(Second_count_2>1459) //24小时到 1459
ldi R24,1459
ldi R25,5
lds R2,_Second_count_2
lds R3,_Second_count_2+1
cp R24,R2
cpc R25,R3
brsh X12
rjmp L131
X12:
.dbline 600
; { //则跳到第七步
; goto step_7;
; }
;
;
; adc_mux=0X07;
ldi R24,7
sts _adc_mux,R24
.dbline 601
; Delay(0xff); //A/D采样延时
ldi R16,255
ldi R17,0
rcall _Delay
.dbline 602
; ad_reulst();
rcall _ad_reulst
.dbline 603
; Second_count_3=00;
clr R2
clr R3
sts _Second_count_3+1,R3
sts _Second_count_3,R2
.dbline 604
; if(adc_old > 0x33 && adc_old < 390 ) //电流
ldi R24,51
ldi R25,0
lds R2,_adc_old
lds R3,_adc_old+1
cp R24,R2
cpc R25,R3
brsh L132
movw R24,R2
cpi R24,134
ldi R30,1
cpc R25,R30
brsh L132
.dbline 605
; {
L134:
.dbline 607
.dbline 614
.dbline 615
L135:
.dbline 606
; while(Second_count_3<2) //等待2秒,因为拔掉电池,电流下降也会满足此条件,但是应该进入
lds R24,_Second_count_3
lds R25,_Second_count_3+1
cpi R24,2
ldi R30,0
cpc R25,R30
brlo L134
.dbline 616
; { //0电流报警,而不该进入第四步,所以等待2秒
; // temp |= (1<<anther);
; // alarm();
; // PORTB &= ~(1<<P0); //关断P0 4A恒流充电
; // PORTD &= ~(1<<P1); //关断P1 4A恒流充电
; // PORTB &= ~(1<<P2); //关断P2 4A恒流充电
; // PORTB |= (1<<P3); //打开P3 4A恒流充电
; ;
; }
; adc_mux=0X07;
ldi R24,7
sts _adc_mux,R24
.dbline 617
; Delay(0xff); //A/D采样延时
ldi R16,255
ldi R17,0
rcall _Delay
.dbline 618
; ad_reulst();
rcall _ad_reulst
.dbline 619
; if(adc_old > 0x33 && adc_old < 390 )
ldi R24,51
ldi R25,0
lds R2,_adc_old
lds R3,_adc_old+1
cp R24,R2
cpc R25,R3
brsh L137
movw R24,R2
cpi R24,134
ldi R30,1
cpc R25,R30
brsh L137
.dbline 620
; {
.dbline 621
; goto step_4;
rjmp L139
L137:
.dbline 623
; }
; }
L132:
.dbline 626
;
;
; adc_mux=0X01; //采样当前电池电压大小
ldi R24,1
sts _adc_mux,R24
.dbline 627
; Delay(0xff); //A/D采样延时
ldi R16,255
ldi R17,0
rcall _Delay
.dbline 628
; ad_reulst(); //刷新A/D采样值
rcall _ad_reulst
.dbline 629
; if(adc_old > 390 ) //检测当前电压是不是大于14.4V A/D电压1.31
ldi R24,390
ldi R25,1
lds R2,_adc_old
lds R3,_adc_old+1
cp R24,R2
cpc R25,R3
brsh L140
.dbline 630
; {
.dbline 631
; goto step_4; //则跳到第四步
rjmp L139
L140:
.dbline 633
L126:
.dbline 579
rjmp L125
L139:
.dbline 636
; }
; }
; /************************ 第四步 恒压、14.4V、橙色灯***************************/
; step_4:
; Second_count_1=00; //延时10小时,等于36000秒
clr R2
clr R3
sts _Second_count_1+1,R3
sts _Second_count_1,R2
.dbline 637
; Second_count_2=00; //Second_count_1*Second_count_2=60*600
sts _Second_count_2+1,R3
sts _Second_count_2,R2
rjmp L143
L142:
.dbline 639
; while(1)
; {
.dbline 640
; temp |= (1<<anther); //允许0电流检测
lds R24,_temp
ori R24,32
sts _temp,R24
.dbline 641
; alarm(); //报警扫描
rcall _alarm
.dbline 642
; PORTB &= ~(1<<P0); //关断P0 4A恒流充电
cbi 0x5,1
.dbline 643
; PORTD &= ~(1<<P1); //关断P1 4A恒流充电
cbi 0xb,5
.dbline 644
; PORTB &= ~(1<<P2); //关断P2 4A恒流充电
cbi 0x5,7
.dbline 645
; PORTB |= (1<<P3); //打开P3 4A恒流充电
sbi 0x5,6
.dbline 646
; PORTD |= (1<<Green); //指示灯显示绿色
sbi 0xb,3
.dbline 647
; PORTD |= (1<<Red); //红色指示亮
sbi 0xb,2
.dbline 648
; TC1321_SET(878); // D/A送电压14.4V ,同时进行温度补偿
ldi R16,878
ldi R17,3
rcall _TC1321_SET
rjmp L146
L145:
.dbline 651
;
; while(Second_count_2>600) //10小时到 600
; { //则跳到第七步
.dbline 652
; Second_count_1=00; //延时55秒
clr R2
clr R3
sts _Second_count_1+1,R3
sts _Second_count_1,R2
rjmp L149
L148:
.dbline 654
; while(1) //延时3分钟,防止电流反灌
; {
.dbline 655
; TC1321_SET_138(892); // D/A送电压13.8V ,同时进行温度补偿
ldi R16,892
ldi R17,3
rcall _TC1321_SET_138
.dbline 656
; if(Second_count_1>55)
ldi R24,55
ldi R25,0
lds R2,_Second_count_1
lds R3,_Second_count_1+1
cp R24,R2
cpc R25,R3
brsh L151
.dbline 657
; {goto step_7;}
.dbline 657
rjmp L131
L151:
.dbline 658
L149:
.dbline 653
rjmp L148
X6:
.dbline 659
L146:
.dbline 650
ldi R24,600
ldi R25,2
lds R2,_Second_count_2
lds R3,_Second_count_2+1
cp R24,R2
cpc R25,R3
brlo L145
.dbline 662
; }
; }
;
;
; adc_mux=0X01; //采样当前电池电压大小
ldi R24,1
sts _adc_mux,R24
.dbline 663
; Delay(0xff); //A/D采样延时
ldi R16,255
ldi R17,0
rcall _Delay
.dbline 664
; ad_reulst(); //刷新A/D采样值
rcall _ad_reulst
.dbline 665
; if(adc_old < 353) //检测当前电压是不是小于13V
lds R24,_adc_old
lds R25,_adc_old+1
cpi R24,97
ldi R30,1
cpc R25,R30
brsh L153
.dbline 666
; { //小于13V则跳到第3步
.dbline 667
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -