⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 电池放电器v2.lst

📁 这是一个电池放电器
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0111)    {delay_nus(1000);}
    04A6 EE08      LDI	R16,0xE8
    04A7 E013      LDI	R17,3
    04A8 D007      RCALL	_delay_nus
    04A9 5F4F      SUBI	R20,0xFF
    04AA 4F5F      SBCI	R21,0xFF
    04AB 1746      CP	R20,R22
    04AC 0757      CPC	R21,R23
    04AD F3C0      BCS	0x04A6
    04AE DA7E      RCALL	pop_gset2
    04AF 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R16
    04B0 DA8C      RCALL	push_gset1
(0112) }
(0113) 
(0114) void delay_nus(unsigned int n)//延时N微秒,N>=5  晶振:8MHz
(0115) {
(0116)   unsigned int i;
(0117)   for (i=5;i<n;i++)
    04B1 E045      LDI	R20,5
    04B2 E050      LDI	R21,0
    04B3 C004      RJMP	0x04B8
(0118)   	  {
(0119) 	  asm("nop");
    04B4 0000      NOP
(0120) 	  asm("nop");	 
    04B5 0000      NOP
    04B6 5F4F      SUBI	R20,0xFF
    04B7 4F5F      SBCI	R21,0xFF
    04B8 1740      CP	R20,R16
    04B9 0751      CPC	R21,R17
    04BA F3C8      BCS	0x04B4
    04BB DA84      RCALL	pop_gset1
    04BC 9508      RET
_timer2_ovf_isr:
    04BD DA96      RCALL	push_lset
FILE: E:\刻录的\电子技术\项目\电池放电器\软件V2.0\discharger.c
(0001) //项目名称:电池容量测试器V2.0
(0002) //功能描述:通过对电池放电,测量出电池的容量
(0003) //外部模块:1602LCD
(0004) //开发人员:李卓生
(0005) //开发日期:2006年2月16日
(0006) //最后修正:  2006年2月27日
(0007) //*********************************************************
(0008) #include <iom8v.h>
(0009) #include <macros.h>
(0010) #include "discharge.h"
(0011) #include "LCD_1602.h"
(0012) #include "eeprom.h"
(0013) 
(0014) #define   key_delay                 64
(0015) #define   keyboard_scan         16
(0016) #define   lcd_write                   32
(0017) #define   timer_dealy              125
(0018) 
(0019) const char *Menu[]=//系统菜单
(0020) {"Menu","Discharging","D882","Record","Clear","USART","#"};
(0021) 
(0022) unsigned char path_top,path;
(0023) //系统参数
(0024) unsigned char sec=0;
(0025) unsigned char min=0;
(0026) unsigned char hour=0;
(0027) unsigned char keyboard;
(0028) unsigned char RunTab=1;
(0029) unsigned char RunTab_old;
(0030) 
(0031) unsigned char sc_timer_dealy,sc_keyboard_scan,sc_lcd_write,sc_key_delay;//定时小于255*31.25ms的
(0032) unsigned int sc_bt1,sc_bt_ctrl,sc_eeprom,sc_discharge,sc_bt1_record,sc_bt1_v_temp;
(0033) /*//LED灯控制参数
(0034)   unsigned int G_led,G_led_cy,G_led_ht;
(0035)   unsigned int sc_G_cy,sc_G_ht;
(0036)   
(0037)   unsigned int R_led,R_led_cy,R_led_ht;
(0038)   unsigned int sc_R_cy,sc_R_ht;
(0039)   */
(0040)    // discharge
(0041)   unsigned char BT1_state;
(0042)   unsigned int BT1_V;
(0043)   unsigned int BT1_I;
(0044)   unsigned int BT1_T;
(0045)   unsigned int BT1_V_num;
(0046)   unsigned int BT1_V_num_temp;
(0047)   unsigned int bt1_v_temp;
(0048)   unsigned int bt1_v_temp_1;
(0049)   
(0050)   unsigned int BT1_I_SET;
(0051)   unsigned int PWM;
(0052)   unsigned long BT1_mAh;
(0053)   unsigned long BT1_time;
(0054)   unsigned int mAh;
(0055)   unsigned int D882_P;
(0056)   
(0057)   unsigned int mAh_set=1000;
(0058)   unsigned char speed=10;
(0059)   unsigned int BT1_P;
(0060) //T2溢出中断服务程序 8ms
(0061) #pragma interrupt_handler timer2_ovf_isr:5
(0062) void timer2_ovf_isr(void)
(0063) {
(0064)  TCNT2 = 0x06;//重装计时值0xFF=32us  0x00=8.192ms
    04BE E086      LDI	R24,6
    04BF BD84      OUT	0x24,R24
(0065)  system_clock();//系统定时器
    04C0 D117      RCALL	_system_clock
(0066)  system();//系统后台服务程序
    04C1 D00D      RCALL	_system
(0067)  //Green_led(); Red_led();
(0068)   if(RunTab_old!=RunTab)
    04C2 90200074  LDS	R2,RunTab
    04C4 903000EC  LDS	R3,RunTab_old
    04C6 1432      CP	R3,R2
    04C7 F029      BEQ	0x04CD
(0069) 	   {LCD_clear();RunTab_old=RunTab;}
    04C8 DC99      RCALL	_LCD_clear
    04C9 90200074  LDS	R2,RunTab
    04CB 922000EC  STS	RunTab_old,R2
    04CD DA9D      RCALL	pop_lset
    04CE 9518      RETI
_system:
    04CF DA6B      RCALL	push_gset2
    04D0 9722      SBIW	R28,2
(0070) }
(0071) /*----------------------------------
(0072)     系统后台服务程序
(0073) -----------------------------------*/
(0074) void system(void)
(0075) { 
(0076)  if(sc_timer_dealy==0){timer(); sc_timer_dealy=timer_dealy;}
    04D1 902000EB  LDS	R2,sc_timer_dealy
    04D3 2022      TST	R2
    04D4 F421      BNE	0x04D9
    04D5 D968      RCALL	_timer
    04D6 E78D      LDI	R24,0x7D
    04D7 938000EB  STS	sc_timer_dealy,R24
(0077)  if((sc_key_delay==0)&&(keyboard!=0)){sc_key_delay=key_delay;}
    04D9 902000E8  LDS	R2,sc_key_delay
    04DB 2022      TST	R2
    04DC F439      BNE	0x04E4
    04DD 902000ED  LDS	R2,keyboard
    04DF 2022      TST	R2
    04E0 F019      BEQ	0x04E4
    04E1 E480      LDI	R24,0x40
    04E2 938000E8  STS	sc_key_delay,R24
(0078)  if(sc_key_delay==1){keyboard=0;}
    04E4 918000E8  LDS	R24,sc_key_delay
    04E6 3081      CPI	R24,1
    04E7 F419      BNE	0x04EB
    04E8 2422      CLR	R2
    04E9 922000ED  STS	keyboard,R2
(0079)  if(sc_keyboard_scan==0)
    04EB 902000EA  LDS	R2,sc_keyboard_scan
    04ED 2022      TST	R2
    04EE F441      BNE	0x04F7
(0080)    {keyboard=key(keyboard);sc_keyboard_scan=keyboard_scan;}
    04EF 910000ED  LDS	R16,keyboard
    04F1 DB96      RCALL	_key
    04F2 930000ED  STS	keyboard,R16
    04F4 E180      LDI	R24,0x10
    04F5 938000EA  STS	sc_keyboard_scan,R24
(0081)  if(sc_lcd_write==0)
    04F7 902000E9  LDS	R2,sc_lcd_write
    04F9 2022      TST	R2
    04FA F429      BNE	0x0500
(0082)    {Run_Turn();LCD_write_new();sc_lcd_write=lcd_write;}
    04FB D163      RCALL	_Run_Turn
    04FC DE6C      RCALL	_LCD_write_new
    04FD E280      LDI	R24,0x20
    04FE 938000E9  STS	sc_lcd_write,R24
(0083) 
(0084)  if((BT1_I_SET)/*&&(sc_bt1_record==0)*/)
    0500 902000CB  LDS	R2,BT1_I_SET
    0502 903000CC  LDS	R3,BT1_I_SET+1
    0504 2022      TST	R2
    0505 F419      BNE	0x0509
    0506 2033      TST	R3
    0507 F409      BNE	0x0509
    0508 C0A2      RJMP	0x05AB
(0085) 	{
(0086)  if(sc_bt1==0)
    0509 902000E6  LDS	R2,sc_bt1
    050B 903000E7  LDS	R3,sc_bt1+1
    050D 2022      TST	R2
    050E F511      BNE	0x0531
    050F 2033      TST	R3
    0510 F501      BNE	0x0531
(0087)   {BT1_mAh+=BT1_I;sc_bt1=450;}//容量统计,每3.6秒计一次
    0511 902000D7  LDS	R2,BT1_I
    0513 903000D8  LDS	R3,BT1_I+1
    0515 2444      CLR	R4
    0516 2455      CLR	R5
    0517 908000C7  LDS	R8,BT1_mAh+2
    0519 909000C8  LDS	R9,BT1_mAh+3
    051B 906000C5  LDS	R6,BT1_mAh
    051D 907000C6  LDS	R7,BT1_mAh+1
    051F 0C62      ADD	R6,R2
    0520 1C73      ADC	R7,R3
    0521 1C84      ADC	R8,R4
    0522 1C95      ADC	R9,R5
    0523 927000C6  STS	BT1_mAh+1,R7
    0525 926000C5  STS	BT1_mAh,R6
    0527 929000C8  STS	BT1_mAh+3,R9
    0529 928000C7  STS	BT1_mAh+2,R8
    052B EC82      LDI	R24,0xC2
    052C E091      LDI	R25,1
    052D 939000E7  STS	sc_bt1+1,R25
    052F 938000E6  STS	sc_bt1,R24
(0088)  if(sc_discharge==0)
    0531 902000E0  LDS	R2,sc_discharge
    0533 903000E1  LDS	R3,sc_discharge+1
    0535 2022      TST	R2
    0536 F501      BNE	0x0557
    0537 2033      TST	R3
    0538 F4F1      BNE	0x0557
(0089)   {BT1_time++;sc_discharge=125;}//放电时间统计
    0539 E041      LDI	R20,1
    053A E050      LDI	R21,0
    053B E060      LDI	R22,0
    053C E070      LDI	R23,0
    053D 904000C3  LDS	R4,BT1_time+2
    053F 905000C4  LDS	R5,BT1_time+3
    0541 902000C1  LDS	R2,BT1_time
    0543 903000C2  LDS	R3,BT1_time+1
    0545 0E24      ADD	R2,R20
    0546 1E35      ADC	R3,R21
    0547 1E46      ADC	R4,R22
    0548 1E57      ADC	R5,R23
    0549 923000C2  STS	BT1_time+1,R3
    054B 922000C1  STS	BT1_time,R2
    054D 925000C4  STS	BT1_time+3,R5
    054F 924000C3  STS	BT1_time+2,R4
    0551 E78D      LDI	R24,0x7D
    0552 E090      LDI	R25,0
    0553 939000E1  STS	sc_discharge+1,R25
    0555 938000E0  STS	sc_discharge,R24
(0090)  if(sc_bt1_v_temp==0)
    0557 902000DC  LDS	R2,sc_bt1_v_temp
    0559 903000DD  LDS	R3,sc_bt1_v_temp+1
    055B 2022      TST	R2
    055C F4B1      BNE	0x0573
    055D 2033      TST	R3
    055E F4A1      BNE	0x0573
(0091)     {bt1_v_temp+=BT1_V;sc_bt1_v_temp=500;}
    055F 902000D9  LDS	R2,BT1_V
    0561 903000DA  LDS	R3,BT1_V+1
    0563 904000CF  LDS	R4,bt1_v_temp
    0565 905000D0  LDS	R5,bt1_v_temp+1
    0567 0C42      ADD	R4,R2
    0568 1C53      ADC	R5,R3
    0569 925000D0  STS	bt1_v_temp+1,R5
    056B 924000CF  STS	bt1_v_temp,R4
    056D EF84      LDI	R24,0xF4
    056E E091      LDI	R25,1
    056F 939000DD  STS	sc_bt1_v_temp+1,R25
    0571 938000DC  STS	sc_bt1_v_temp,R24
(0092)  if(sc_bt1_record==0)
    0573 902000DE  LDS	R2,sc_bt1_record
    0575 903000DF  LDS	R3,sc_bt1_record+1
    0577 2022      TST	R2
    0578 F449      BNE	0x0582
    0579 2033      TST	R3
    057A F439      BNE	0x0582
(0093)     {bt1_v_record();sc_bt1_record=7500;}//每分钟记录一次电压
    057B D12A      RCALL	_bt1_v_record
    057C E48C      LDI	R24,0x4C
    057D E19D      LDI	R25,0x1D
    057E 939000DF  STS	sc_bt1_record+1,R25
    0580 938000DE  STS	sc_bt1_record,R24
(0094)  if(sc_eeprom==0) 
    0582 902000E2  LDS	R2,sc_eeprom
    0584 903000E3  LDS	R3,sc_eeprom+1
    0586 2022      TST	R2
    0587 F519      BNE	0x05AB
    0588 2033      TST	R3
    0589 F509      BNE	0x05AB
(0095)   {
(0096)    if(BT1_V<2000)
    058A 918000D9  LDS	R24,BT1_V
    058C 919000DA  LDS	R25,BT1_V+1
    058E 3D80      CPI	R24,0xD0
    058F E0E7      LDI	R30,7
    0590 079E      CPC	R25,R30
    0591 F408      BCC	0x0593
(0097) 	{discharge_stop();} 
    0592 D5BC      RCALL	_discharge_stop
(0098)     EEPROM_WRITE(0x01F0,BT1_mAh);
    0593 E084      LDI	R24,4
    0594 E090      LDI	R25,0
    0595 8399      STD	Y+1,R25
    0596 8388      STD	Y+0,R24
    0597 EC25      LDI	R18,0xC5
    0598 E030      LDI	R19,0
    0599 EF00      LDI	R16,0xF0
    059A E011      LDI	R17,1
    059B DA40      RCALL	_EEPROMWriteBytes
(0099)     EEPROM_WRITE(0x01F4,BT1_time);
    059C E084      LDI	R24,4
    059D E090      LDI	R25,0
    059E 8399      STD	Y+1,R25
    059F 8388      STD	Y+0,R24
    05A0 EC21      LDI	R18,0xC1
    05A1 E030      LDI	R19,0
    05A2 EF04      LDI	R16,0xF4
    05A3 E011      LDI	R17,1
    05A4 DA37      RCALL	_EEPROMWriteBytes
(0100)     sc_eeprom=1250;//每10秒保存一次
    05A5 EE82      LDI	R24,0xE2
    05A6 E094      LDI	R25,4
    05A7 939000E3  STS	sc_eeprom+1,R25
    05A9 938000E2  STS	sc_eeprom,R24
(0101) 	}
(0102) 	}
(0103)   if(sc_bt_ctrl==0)
    05AB 902000E4  LDS	R2,sc_bt_ctrl
    05AD 903000E5  LDS	R3,sc_bt_ctrl+1
    05AF 2022      TST	R2
    05B0 F521      BNE	0x05D5
    05B1 2033      TST	R3
    05B2 F511      BNE	0x05D5
(0104)     {
(0105) 	 BT1_I_Ctrl();
    05B3 D834      RCALL	_BT1_I_Ctrl
(0106)       if((BT1_I>BT1_I_SET+5)||(BT1_I<BT1_I_SET-5))
    05B4 918000CB  LDS	R24,BT1_I_SET
    05B6 919000CC  LDS	R25,BT1_I_SET+1
    05B8 9605      ADIW	R24,5
    05B9 902000D7  LDS	R2,BT1_I
    05BB 903000D8  LDS	R3,BT1_I+1
    05BD 1582      CP	R24,R2
    05BE 0593      CPC	R25,R3
    05BF F040      BCS	0x05C8
    05C0 918000CB  LDS	R24,BT1_I_SET
    05C2 919000CC  LDS	R25,BT1_I_SET+1
    05C4 9705      SBIW	R24,5
    05C5 1628      CP	R2,R24
    05C6 0639      CPC	R3,R25
    05C7 F438      BCC	0x05CF
(0107) 	    sc_bt_ctrl=2;//PWM高速调节
    05C8 E082      LDI	R24,2
    05C9 E090      LDI	R25,0
    05CA 939000E5  STS	sc_bt_ctrl+1,R25
    05CC 938000E4  STS	sc_bt_ctrl,R24
    05CE C006      RJMP	0x05D5
(0108) 		else sc_bt_ctrl=48;//PWM低速调节
    05CF E380      LDI	R24,0x30
    05D0 E090      LDI	R25,0
    05D1 939000E5  STS	sc_bt_ctrl+1,R25
    05D3 938000E4  STS	sc_bt_ctrl,R24
(0109) 	 }
    05D5 9622      ADIW	R28,2
    05D6 D956      RCALL	pop_gset2
    05D7 9508      RET
(0110) }
(0111) 
(0112) void system_clock(void)
(0113)   {  //每个节拍为8ms
(0114)      if(sc_timer_dealy!=0)  sc_timer_dealy--;
_system_clock:
    05D8 902000EB  LDS	R2,sc_timer_dealy
    05DA 2022      TST	R2
    05DB F021      BEQ	0x05E0
    05DC 2D82      MOV	R24,R2
    05DD 5081      SUBI	R24,1
    05DE 938000EB  STS	sc_timer_dealy,R24
(0115)      if(sc_keyboard_scan!=0)  sc_keyboard_scan--;
    05E0 902000EA  LDS	R2,sc_keyboard_scan
    05E2 2022      TST	R2
    05E3 F021      BEQ	0x05E8
    05E4 2D82      MOV	R24,R2
    05E5 5081      SUBI	R24,1
    05E6 938000EA  STS	sc_keyboard_scan,R24
(0116) 	 if(sc_key_delay!=0)  sc_key_delay--;
    05E8 902000E8  LDS	R2,sc_key_delay
    05EA 2022      TST	R2
    05EB F021      BEQ	0x05F0
    05EC 2D82      MOV	R24,R2
    05ED 5081      SUBI	R24,1
    05EE 938000E8  STS	sc_key_delay,R24
(0117) 	 if(sc_lcd_write!=0)  sc_lcd_write--;
    05F0 902000E9  LDS	R2,sc_lcd_write
    05F2 2022      TST	R2
    05F3 F021      BEQ	0x05F8
    05F4 2D82      MOV	R24,R2
    05F5 5081      SUBI	R24,1
    05F6 938000E9  STS	sc_lcd_write,R24
(0118) /*	 
(0119)      if(sc_G_ht!=0)  sc_G_ht--;
(0120) 	 if(sc_G_cy!=0)  sc_G_cy--;
(0121) 	 if(sc_R_ht!=0)  sc_R_ht--;
(0122) 	 if(sc_R_cy!=0)  sc_R_cy--;
(0123) */
(0124) 	 if(sc_bt1!=0)  sc_bt1--; 
    05F8 902000E6  LDS	R2,sc_bt1
    05FA 903000E7  LDS	R3,sc_bt1+1
    05FC 2022      TST	R2
    05FD F411      BNE	0x0600
    05FE 2033      TST	R3
    05FF F049      BEQ	0x0609
    0600 918000E6  LDS	R24,sc_bt1
    0602 919000E7  LDS	R25,sc_bt1+1
    0604 970

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -