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

📄 main.lst

📁 这个是个航模产品的锂电测试器
💻 LST
📖 第 1 页 / 共 4 页
字号:
__text_start:
__start:
    0020 EFCF      LDI	R28,0xFF
    0021 E0D2      LDI	R29,2
    0022 BFCD      OUT	0x3D,R28
    0023 BFDE      OUT	0x3E,R29
    0024 51C0      SUBI	R28,0x10
    0025 40D0      SBCI	R29,0
    0026 EA0A      LDI	R16,0xAA
    0027 8308      STD	Y+0,R16
    0028 2400      CLR	R0
    0029 E0E2      LDI	R30,2
    002A E0F1      LDI	R31,1
    002B E011      LDI	R17,1
    002C 32E6      CPI	R30,0x26
    002D 07F1      CPC	R31,R17
    002E F011      BEQ	0x0031
    002F 9201      ST	R0,Z+
    0030 CFFB      RJMP	0x002C
    0031 8300      STD	Z+0,R16
    0032 E3EE      LDI	R30,0x3E
    0033 E0F0      LDI	R31,0
    0034 E0A0      LDI	R26,0
    0035 E0B1      LDI	R27,1
    0036 E010      LDI	R17,0
    0037 34E0      CPI	R30,0x40
    0038 07F1      CPC	R31,R17
    0039 F021      BEQ	0x003E
    003A 95C8      LPM
    003B 9631      ADIW	R30,1
    003C 920D      ST	R0,X+
    003D CFF9      RJMP	0x0037
    003E D42D      RCALL	_main
_exit:
    003F CFFF      RJMP	_exit
FILE: E:\CHIYUA~1\LI_POT~1\adc.h
(0001) 
(0002) /********************************************************************************/
(0003) //		
(0004) // 		builder : 2007-04-10
(0005) // 		Target  : ATMEAG 48V
(0006) // 		Crystal : 内部 8.00 MHz
(0007) //
(0008) //		ADC 转换模块
(0009) 		
(0010) /********************************************************************************/
(0011) 
(0012) 
(0013) #include 	<iom48v.h>
(0014) #include 	<macros.h>
(0015) 
(0016) 
(0017) extern void adc_int(void);
(0018) extern unsigned int AD_CH(unsigned char CHn);
(0019) 
(0020) 
(0021) void adc_int(void)
(0022) {
(0023) 	 ADMUX	= 0x40;		// 0xC0 基准电压2.56V ;0x40 外部AVCC
_adc_int:
    0040 E480      LDI	R24,0x40
    0041 9380007C  STS	0x7C,R24
(0024)  	 ADCSRA	= 0xC7; 	//enable adc and the div parame is 8	 
    0043 EC87      LDI	R24,0xC7
    0044 9380007A  STS	0x7A,R24
    0046 9508      RET
_AD_CH:
  adh                  --> R20
  ad_add               --> R22
  temp1                --> R12
  i                    --> R10
  temp                 --> R14
  CHn                  --> R16
    0047 D570      RCALL	push_gset5
(0025) }
(0026) 
(0027) 
(0028) /*---------------------------------------------------------------
(0029)    			ADC 
(0030) ----------------------------------------------------------------*/
(0031) 
(0032) unsigned int AD_CH(unsigned char CHn)
(0033) {
(0034)  	unsigned char i;
(0035) 	unsigned int  ad_add;
(0036) 	unsigned int  temp,temp1;
(0037) 	unsigned int  adh;
(0038) 	
(0039) 	ADMUX = (ADMUX & 0xF0) | CHn;
    0048 9180007C  LDS	R24,0x7C
    004A 7F80      ANDI	R24,0xF0
    004B 2B80      OR	R24,R16
    004C 9380007C  STS	0x7C,R24
(0040) 	
(0041) 	ad_add = 0;
    004E 2766      CLR	R22
    004F 2777      CLR	R23
(0042) 	
(0043) 	for(i=0;i<4;i++)
    0050 24AA      CLR	R10
    0051 C022      RJMP	0x0074
(0044) 	{
(0045)  		ADCSRA = ADCSRA|(1<<ADSC);			   //start the adc
    0052 9180007A  LDS	R24,0x7A
    0054 6480      ORI	R24,0x40
    0055 9380007A  STS	0x7A,R24
(0046) 		while(ADCSRA&(1<<ADSC));			   //wait for the adc finish
    0057 9020007A  LDS	R2,0x7A
    0059 FC26      SBRC	R2,6
    005A CFFC      RJMP	0x0057
(0047)  		
(0048)  		ADCSRA = ADCSRA|(1<<ADSC);			   //start the adc
    005B 9180007A  LDS	R24,0x7A
    005D 6480      ORI	R24,0x40
    005E 9380007A  STS	0x7A,R24
(0049) 		while(ADCSRA&(1<<ADSC));			   //wait for the adc finish
    0060 9020007A  LDS	R2,0x7A
    0062 FC26      SBRC	R2,6
    0063 CFFC      RJMP	0x0060
(0050) 		
(0051) 		temp1 = ADCL;
    0064 90C00078  LDS	R12,0x78
    0066 24DD      CLR	R13
(0052) 		temp  = (ADCH&0x03)<<8;
    0067 91800079  LDS	R24,0x79
    0069 2799      CLR	R25
    006A 7083      ANDI	R24,3
    006B 7090      ANDI	R25,0
    006C 017C      MOVW	R14,R24
    006D 2CFE      MOV	R15,R14
    006E 24EE      CLR	R14
(0053) 		temp   += temp1;
    006F 0CEC      ADD	R14,R12
    0070 1CFD      ADC	R15,R13
(0054) 		ad_add += temp;                                                                      
    0071 0D6E      ADD	R22,R14
    0072 1D7F      ADC	R23,R15
    0073 94A3      INC	R10
    0074 2D8A      MOV	R24,R10
    0075 3084      CPI	R24,4
    0076 F2D8      BCS	0x0052
(0055) 	}
(0056) 	adh = ad_add>>2;
    0077 01AB      MOVW	R20,R22
    0078 9556      LSR	R21
    0079 9547      ROR	R20
    007A 9556      LSR	R21
    007B 9547      ROR	R20
(0057) 	return(adh);
    007C 018A      MOVW	R16,R20
    007D D538      RCALL	pop_gset5
    007E 9508      RET
FILE: E:\CHIYUA~1\LI_POT~1\main.c
(0001) /********************************************************************************/
(0002) //		
(0003) // 		builder : 2007-04-10
(0004) // 		Target  : ATMEAG 48V
(0005) // 		Crystal : 内部 8.00 MHz
(0006) //
(0007) //		快速充电器
(0008) 		
(0009) /********************************************************************************/
(0010) 
(0011) #include <iom48v.h>
(0012) #include <macros.h>
(0013) 
(0014) #include "adc.h"
(0015) 
(0016) 
(0017) #define		uchar		unsigned char
(0018) #define		uint		unsigned int
(0019) 
(0020) 
(0021) #define		SET_LED1		PORTD |=  (1<<PD4)
(0022) #define		CLR_LED1		PORTD &= ~(1<<PD4)
(0023) 
(0024) #define		SET_LED2		PORTD |=  (1<<PD3)
(0025) #define		CLR_LED2		PORTD &= ~(1<<PD3)
(0026) 
(0027) #define		SET_LED3		PORTD |=  (1<<PD1)
(0028) #define		CLR_LED3		PORTD &= ~(1<<PD1)
(0029) 
(0030) #define		SET_LED4		PORTD |=  (1<<PD0)
(0031) #define		CLR_LED4		PORTD &= ~(1<<PD0)
(0032) 
(0033) 
(0034) #define		SET_COM1		PORTD |=  (1<<PD7)
(0035) #define		CLR_COM1		PORTD &= ~(1<<PD7)
(0036) 
(0037) #define		SET_COM2		PORTD |=  (1<<PD6)
(0038) #define		CLR_COM2		PORTD &= ~(1<<PD6)
(0039) 
(0040) #define		SET_COM3		PORTD |=  (1<<PD5)
(0041) #define		CLR_COM3		PORTD &= ~(1<<PD5)
(0042) 
(0043) #define		SET_OUT			PORTD |=  (1<<PD2)
(0044) #define		CLR_OUT			PORTD &= ~(1<<PD2)
(0045) 
(0046) 
(0047) 
(0048) static const uchar Char_tab[10] ={0x7D,0x41,0xEC,0xE5,0xD1,0xB5,0xBD,0x61,0xFD,0xF5};
(0049) 
(0050) union	
(0051) {	uint	temp;
(0052) 	uchar  	data[2];		
(0053) }CH;
(0054) 
(0055) uint	V[4];
(0056) 
(0057) uchar	flag_2ms;
(0058) uchar	flag_20ms;
(0059) 
(0060) uint	ad_temp;
(0061) uchar	adc_num,adc_ch=0;
(0062) uchar	batt;
(0063) 
(0064) uchar	dip_bit;
(0065) uint	batt_num;
(0066) 
(0067) uchar	mode,out_time;
(0068) uint	key,key1,key2;
(0069) uchar	pulse;
(0070) 
(0071) uchar	dp=0x02;
(0072) uchar	down,delay;
(0073) 
(0074) uchar	led_time,led_flag;
(0075) uchar	flas1,flas2,flas3,flas4;
(0076) 
(0077) 
(0078) 
(0079) 
(0080) /*---------------------------------------------------------------
(0081)    			初始化
(0082) ----------------------------------------------------------------*/
(0083) 
(0084) void timer0_init(void)
(0085) {
(0086)  	TCCR0B = 0x00; //stop
_timer0_init:
    007F 2422      CLR	R2
    0080 BC25      OUT	0x25,R2
(0087)  	TCNT0  = 0x06; //set count
    0081 E086      LDI	R24,6
    0082 BD86      OUT	0x26,R24
(0088)  	TCCR0A = 0x00; 
    0083 BC24      OUT	0x24,R2
(0089)  	TCCR0B = 0x03; //start timer
    0084 E083      LDI	R24,3
    0085 BD85      OUT	0x25,R24
    0086 9508      RET
(0090) }
(0091) 
(0092) 
(0093) void timer1_init(void)
(0094) {
(0095) 	TCCR1A = 0x00;
_timer1_init:
    0087 2422      CLR	R2
    0088 92200080  STS	0x80,R2
(0096) 	TCCR1B = 0x00;					
    008A 92200081  STS	0x81,R2
    008C 9508      RET
(0097) }
(0098) 
(0099) 
(0100) 
(0101) void init_devices(void)
(0102) {
(0103) 	CLI();
_init_devices:
    008D 94F8      BCLR	7
(0104) 	
(0105) 	DDRB  = 0xFF;
    008E EF8F      LDI	R24,0xFF
    008F B984      OUT	0x04,R24
(0106)  	PORTB = 0x00;
    0090 2422      CLR	R2
    0091 B825      OUT	0x05,R2
(0107)  	
(0108)  	DDRC  = 0x00;
    0092 B827      OUT	0x07,R2
(0109)  	PORTC = 0x0C; 
    0093 E08C      LDI	R24,0xC
    0094 B988      OUT	0x08,R24
(0110)  	
(0111)  	DDRD  = 0xFF;
    0095 EF8F      LDI	R24,0xFF
    0096 B98A      OUT	0x0A,R24
(0112)  	PORTD = 0x00; 
    0097 B82B      OUT	0x0B,R2
(0113)  	
(0114)  	adc_int();
    0098 DFA7      RCALL	_adc_int
(0115)  	timer0_init();
    0099 DFE5      RCALL	_timer0_init
(0116) 	timer1_init();
    009A DFEC      RCALL	_timer1_init
(0117) 
(0118)   	TIMSK0 = 0x01; 	//timer 0 interrupt sources
    009B E081      LDI	R24,1
    009C 9380006E  STS	0x6E,R24
(0119)  	TIMSK1 = 0x00; 	//timer 1 interrupt sources
    009E 2422      CLR	R2
    009F 9220006F  STS	0x6F,R2
(0120)  	TIMSK2 = 0x00; 	//timer 2 interrupt sources
    00A1 92200070  STS	0x70,R2
(0121)  	
(0122)  	SEI();
    00A3 9478      BSET	7
    00A4 9508      RET
_bubble_sort:
  j                    --> R20
  change               --> R22
  temp                 --> R10
  k                    --> R14
  len                  --> R12
  a                    --> Y+10
    00A5 D4DD      RCALL	push_arg4
    00A6 D511      RCALL	push_gset5
    00A7 2EC2      MOV	R12,R18
(0123) }
(0124) 
(0125) 
(0126) 
(0127) 
(0128) 
(0129) 
(0130) void bubble_sort(uint *a,uchar len)
(0131) {
(0132)      int j,k;
(0133)      int temp;
(0134)      int change=1;
    00A8 E061      LDI	R22,1
    00A9 E070      LDI	R23,0
(0135)      
(0136)      for (j=0;(j<len-1)&&change;j++)
    00AA 2744      CLR	R20
    00AB 2755      CLR	R21
    00AC C052      RJMP	0x00FF
(0137)      {
(0138)          change=0;
    00AD 2766      CLR	R22
    00AE 2777      CLR	R23
(0139)          for (k=j+1;k<len;k++)
    00AF 01CA      MOVW	R24,R20
    00B0 9601      ADIW	R24,1
    00B1 017C      MOVW	R14,R24
    00B2 C044      RJMP	0x00F7
(0140)          {
(0141)              if (a[k-1]>a[k])
    00B3 E002      LDI	R16,2
    00B4 E010      LDI	R17,0
    00B5 0197      MOVW	R18,R14
    00B6 D4ED      RCALL	empy16s
    00B7 0118      MOVW	R2,R16
    00B8 01F1      MOVW	R30,R2
    00B9 840A      LDD	R0,Y+10
    00BA 841B      LDD	R1,Y+11
    00BB 0DE0      ADD	R30,R0
    00BC 1DF1      ADC	R31,R1
    00BD 8040      LDD	R4,Z+0
    00BE 8051      LDD	R5,Z+1
    00BF 01F1      MOVW	R30,R2
    00C0 9732      SBIW	R30,2
    00C1 0DE0      ADD	R30,R0
    00C2 1DF1      ADC	R31,R1
    00C3 8020      LDD	R2,Z+0
    00C4 8031      LDD	R3,Z+1
    00C5 1442      CP	R4,R2
    00C6 0453      CPC	R5,R3
    00C7 F008      BCS	0x00C9
    00C8 C02B      RJMP	0x00F4
(0142)              {
(0143)                 change=1;
    00C9 E061      LDI	R22,1
    00CA E070      LDI	R23,0
(0144)                 temp=a[k-1];
    00CB E002      LDI	R16,2
    00CC E010      LDI	R17,0
    00CD 0197      MOVW	R18,R14
    00CE D4D5      RCALL	empy16s
    00CF 01F8      MOVW	R30,R16
    00D0 9732      SBIW	R30,2
    00D1 840A      LDD	R0,Y+10
    00D2 841B      LDD	R1,Y+11
    00D3 0DE0      ADD	R30,R0
    00D4 1DF1      ADC	R31,R1
    00D5 80A0      LDD	R10,Z+0
    00D6 80B1      LDD	R11,Z+1
(0145)                 a[k-1]=a[k];
    00D7 E002      LDI	R16,2
    00D8 E010      LDI	R17,0
    00D9 0197      MOVW	R18,R14
    00DA D4C9      RCALL	empy16s
    00DB 0118      MOVW	R2,R16
    00DC 01F1      MOVW	R30,R2
    00DD 840A      LDD	R0,Y+10
    00DE 841B      LDD	R1,Y+11
    00DF 0DE0      ADD	R30,R0
    00E0 1DF1      ADC	R31,R1
    00E1 8040      LDD	R4,Z+0
    00E2 8051      LDD	R5,Z+1
    00E3 01F1      MOVW	R30,R2
    00E4 9732      SBIW	R30,2
    00E5 0DE0      ADD	R30,R0
    00E6 1DF1      ADC	R31,R1
    00E7 8251      STD	Z+1,R5
    00E8 8240      STD	Z+0,R4
(0146)                 a[k]=temp;
    00E9 E002      LDI	R16,2
    00EA E010      LDI	R17,0
    00EB 0197      MOVW	R18,R14
    00EC D4B7      RCALL	empy16s
    00ED 01F8      MOVW	R30,R16
    00EE 840A      LDD	R0,Y+10
    00EF 841B      LDD	R1,Y+11
    00F0 0DE0      ADD	R30,R0
    00F1 1DF1      ADC	R31,R1
    00F2 82B1      STD	Z+1,R11
    00F3 82A0      STD	Z+0,R10
    00F4 01C7      MOVW	R24,R14
    00F5 9601      ADIW	R24,1
    00F6 017C      MOVW	R14,R24
    00F7 2C2C      MOV	R2,R12
    00F8 2433      CLR	R3
    00F9 14E2      CP	R14,R2
    00FA 04F3      CPC	R15,R3
    00FB F40C      BGE	0x00FD
    00FC CFB6      RJMP	0x00B3
    00FD 5F4F      SUBI	R20,0xFF
    00FE 4F5F      SBCI	R21,0xFF
    00FF 2D8C      MOV	R24,R12
    0100 2799      CLR	R25
    0101 9701      SBIW	R24,1
    0102 1748      CP	R20,R24
    0103 0759      CPC	R21,R25
    0104 F424      BGE	0x0109
    0105 3060      CPI	R22,0
    0106 0767      CPC	R22,R23
    0107 F009      BEQ	0x0109
    0108 CFA4      RJMP	0x00AD
    0109 D4AC      RCALL	pop_gset5
    010A 9624      ADIW	R28,4
    010B 9508      RET
_abcd:
  temp                 --> Y+0
    010C 9728      SBIW	R28,0x8
(0147)              }
(0148)          }
(0149)      }
(0150) }
(0151) 
(0152) 
(0153) 
(0154) 
(0155) void abcd(void)
(0156) {
(0157) 	uint  temp[4];
(0158) 	
(0159) 	if(batt==4) 
    010D 91800116  LDS	R24,batt
    010F 3084      CPI	R24,4
    0110 F539      BNE	0x0138
(0160) 	{
(0161) 		temp[0] = V[0];
    0111 9020011C  LDS	R2,V
    0113 9030011D  LDS	R3,V+1
    0115 8239      STD	Y+1,R3
    0116 8228      STD	Y+0,R2
(0162) 		temp[1] = V[1]-V[0];
    0117 9040011E  LDS	R4,V+2
    0119 9050011F  LDS	R5,V+3
    011B 1842      SUB	R4,R2
    011C 0853      SBC	R5,R3
    011D 825B      STD	Y+3,R5
    011E 824A      STD	Y+2,R4
(0163) 		temp[2] = V[2]-V[1];
    011F 9020011E  LDS	R2,V+2
    0121 9030011F  LDS	R3,V+3
    0123 90400120  LDS	R4,0x120
    0125 90500121  LDS	R5,0x121
    0127 1842      SUB	R4,R2
    0128 0853      SBC	R5,R3
    0129 825D      STD	Y+5,R5
    012A 824C      STD	Y+4,R4
(0164) 		temp[3] = V[3]-V[2];
    012B 90200120  LDS	R2,0x120
    012D 90300121  LDS	R3,0x121
    012F 90400122  LDS	R4,0x122
    0131 90500123  LDS	R5,0x123
    0133 1842      SUB	R4,R2
    0134 0853      SBC	R5,R3
    0135 825F      STD	Y+7,R5
    0136 824E      STD	Y+6,R4
(0165) 	}
    0137 C03D      RJMP	0x0175

⌨️ 快捷键说明

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