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

📄 adcurrent.lss

📁 ADC差分算法
💻 LSS
📖 第 1 页 / 共 2 页
字号:

ADCurrent.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000002e8  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00800060  000002e8  0000037c  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          0000000b  00800060  00800060  0000037c  2**0
                  ALLOC
  3 .noinit       00000000  0080006b  0080006b  0000037c  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  0000037c  2**0
                  CONTENTS
  5 .stab         0000036c  00000000  00000000  0000037c  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000084  00000000  00000000  000006e8  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_aranges 0000003c  00000000  00000000  0000076c  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_pubnames 0000011e  00000000  00000000  000007a8  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_info   00000361  00000000  00000000  000008c6  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_abbrev 000001fb  00000000  00000000  00000c27  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_line   000003b8  00000000  00000000  00000e22  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_str    00000126  00000000  00000000  000011da  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54 <__ctors_end>
   4:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
   8:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
   c:	0c 94 e6 00 	jmp	0x1cc <__vector_3>
  10:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  14:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  18:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  1c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  20:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  24:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  28:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  2c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  30:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  34:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  38:	0c 94 8d 00 	jmp	0x11a <__vector_14>
  3c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  40:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  44:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  48:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  4c:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>
  50:	0c 94 45 00 	jmp	0x8a <__bad_interrupt>

00000054 <__ctors_end>:
  54:	11 24       	eor	r1, r1
  56:	1f be       	out	0x3f, r1	; 63
  58:	cf e5       	ldi	r28, 0x5F	; 95
  5a:	d4 e0       	ldi	r29, 0x04	; 4
  5c:	de bf       	out	0x3e, r29	; 62
  5e:	cd bf       	out	0x3d, r28	; 61

00000060 <__do_copy_data>:
  60:	10 e0       	ldi	r17, 0x00	; 0
  62:	a0 e6       	ldi	r26, 0x60	; 96
  64:	b0 e0       	ldi	r27, 0x00	; 0
  66:	e8 ee       	ldi	r30, 0xE8	; 232
  68:	f2 e0       	ldi	r31, 0x02	; 2
  6a:	02 c0       	rjmp	.+4      	; 0x70 <.do_copy_data_start>

0000006c <.do_copy_data_loop>:
  6c:	05 90       	lpm	r0, Z+
  6e:	0d 92       	st	X+, r0

00000070 <.do_copy_data_start>:
  70:	a0 36       	cpi	r26, 0x60	; 96
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c <.do_copy_data_loop>

00000076 <__do_clear_bss>:
  76:	10 e0       	ldi	r17, 0x00	; 0
  78:	a0 e6       	ldi	r26, 0x60	; 96
  7a:	b0 e0       	ldi	r27, 0x00	; 0
  7c:	01 c0       	rjmp	.+2      	; 0x80 <.do_clear_bss_start>

0000007e <.do_clear_bss_loop>:
  7e:	1d 92       	st	X+, r1

00000080 <.do_clear_bss_start>:
  80:	ab 36       	cpi	r26, 0x6B	; 107
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e <.do_clear_bss_loop>
  86:	0c 94 03 01 	jmp	0x206 <main>

0000008a <__bad_interrupt>:
  8a:	0c 94 00 00 	jmp	0x0 <__vectors>

0000008e <ADInit>:
影响的全局变量:无
***************************************************/
void ADInit(void)
{
	ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);//使能ADC,不允许中断
  8e:	87 e8       	ldi	r24, 0x87	; 135
  90:	86 b9       	out	0x06, r24	; 6
	ADMUX  = (1<<REFS0)|(1<<REFS0)|(1<<MUX4);           //0xD0
  92:	80 e5       	ldi	r24, 0x50	; 80
  94:	87 b9       	out	0x07, r24	; 7
  96:	08 95       	ret

00000098 <ReadVoltage>:
}

/***************************************************
函数名称:ReadVoltage()
函数功能:读取AD转换的电压值,转换一次要312us
输入参数:通道号:channal,为0、1、2、3、4
返回参数:转换出来的电压值:十位有效值
影响的全局变量:无
***************************************************/
uint16_t ReadVoltage(uint8_t channal)
{
	uint16_t temp;
	uint8_t i;
	
	temp=0;
    
    while (ADCSRA&(1<<ADSC)) ;                  //等待ADC空闲
  98:	36 99       	sbic	0x06, 6	; 6
  9a:	fe cf       	rjmp	.-4      	; 0x98 <ReadVoltage>
    
	ADMUX  = (0xD0|channal);				    //设定转换通道
  9c:	80 6d       	ori	r24, 0xD0	; 208
  9e:	87 b9       	out	0x07, r24	; 7
	
	for(i=0;i<=2;i++)
  a0:	80 e0       	ldi	r24, 0x00	; 0
	{
		ADCSRA |= (1<<ADSC);					//开始转换
  a2:	36 9a       	sbi	0x06, 6	; 6
		loop_until_bit_is_set(ADCSRA,ADIF);		//等待转换结束
  a4:	34 9b       	sbis	0x06, 4	; 6
  a6:	fe cf       	rjmp	.-4      	; 0xa4 <ReadVoltage+0xc>
		ADCSRA |= (1<<ADIF);					//清标志位
  a8:	34 9a       	sbi	0x06, 4	; 6
		temp    = ADC;
  aa:	24 b1       	in	r18, 0x04	; 4
  ac:	35 b1       	in	r19, 0x05	; 5
  ae:	8f 5f       	subi	r24, 0xFF	; 255
  b0:	83 30       	cpi	r24, 0x03	; 3
  b2:	b8 f3       	brcs	.-18     	; 0xa2 <ReadVoltage+0xa>
	}
	
	if (temp >= 0x200)                          //如果为负数,补码形式
  b4:	82 e0       	ldi	r24, 0x02	; 2
  b6:	20 30       	cpi	r18, 0x00	; 0
  b8:	38 07       	cpc	r19, r24
  ba:	38 f0       	brcs	.+14     	; 0xca <ReadVoltage+0x32>
	{
	    temp = 0x3FF - temp;
  bc:	8f ef       	ldi	r24, 0xFF	; 255
  be:	93 e0       	ldi	r25, 0x03	; 3
  c0:	82 1b       	sub	r24, r18
  c2:	93 0b       	sbc	r25, r19
  c4:	9c 01       	movw	r18, r24
	    temp ++;                                //加一后为原码
  c6:	2f 5f       	subi	r18, 0xFF	; 255
  c8:	3f 4f       	sbci	r19, 0xFF	; 255
	}
	
	return temp;								//8位精度
}
  ca:	c9 01       	movw	r24, r18
  cc:	08 95       	ret

000000ce <SetADC>:

/***************************************************
函数名称:SIGNAL(SIG_ADC)
函数功能:ADC转换完成中断
输入参数:无
返回参数:无
影响的全局变量:
***************************************************/
SIGNAL(SIG_ADC)
{
	uint16_t temp;
	
	temp = ADC;
	
	if (SampleList >= 0x20)                     //第三次采样
	{
	    if (temp >= 0x200)                      //如果为负数,补码形式
	    {
	        temp = 0x3FF - temp;
	        temp ++;                            //加一后为原码
	    }
	    
	    *PADCData = temp;                       //更新数据
        
	    SetADC();                               //更换通道
	}
	else                                        //第一次采样
	{
		ADCSRA     |= (1<<ADSC);				//开始转换
		SampleList += 0x10;
	}
}

/***************************************************
函数名称:SetADC()
函数功能:设置ADC转换通道并启动转换,转换一次要208us
输入参数:无。通道设置通过查采样等待列表得出
返回参数:无。在中断中读取数据
相关说明:该子程序是在中断中调用的
影响的全局变量:无
***************************************************/
void SetADC(void)
{
	SampleList ++;
  ce:	80 91 60 00 	lds	r24, 0x0060
  d2:	8f 5f       	subi	r24, 0xFF	; 255
  d4:	80 93 60 00 	sts	0x0060, r24
	
	SampleList &= 0x0F;						//高字节清空
  d8:	80 91 60 00 	lds	r24, 0x0060
  dc:	8f 70       	andi	r24, 0x0F	; 15
  de:	80 93 60 00 	sts	0x0060, r24
	
	if ((SampleList >= 5)||(SampleList < 2))
  e2:	80 91 60 00 	lds	r24, 0x0060
  e6:	85 30       	cpi	r24, 0x05	; 5
  e8:	20 f4       	brcc	.+8      	; 0xf2 <SetADC+0x24>
  ea:	80 91 60 00 	lds	r24, 0x0060
  ee:	82 30       	cpi	r24, 0x02	; 2
  f0:	18 f4       	brcc	.+6      	; 0xf8 <SetADC+0x2a>
	{
		SampleList = 2;					    //实现循环
  f2:	82 e0       	ldi	r24, 0x02	; 2
  f4:	80 93 60 00 	sts	0x0060, r24
	}
	
	PADCData = &Current[SampleList-2];		//更新数据存放地址指针
  f8:	80 91 60 00 	lds	r24, 0x0060
  fc:	99 27       	eor	r25, r25
  fe:	88 0f       	add	r24, r24
 100:	99 1f       	adc	r25, r25
 102:	83 5a       	subi	r24, 0xA3	; 163
 104:	9f 4f       	sbci	r25, 0xFF	; 255
 106:	90 93 68 00 	sts	0x0068, r25
 10a:	80 93 67 00 	sts	0x0067, r24
	
	ADMUX   = (0xD0|SampleList);			//设定转换通道
 10e:	80 91 60 00 	lds	r24, 0x0060
 112:	80 6d       	ori	r24, 0xD0	; 208
 114:	87 b9       	out	0x07, r24	; 7
	ADCSRA |= (1<<ADSC);					//开始转换
 116:	36 9a       	sbi	0x06, 6	; 6
 118:	08 95       	ret

0000011a <__vector_14>:
 11a:	1f 92       	push	r1
 11c:	0f 92       	push	r0
 11e:	0f b6       	in	r0, 0x3f	; 63
 120:	0f 92       	push	r0
 122:	11 24       	eor	r1, r1
 124:	2f 93       	push	r18
 126:	3f 93       	push	r19
 128:	4f 93       	push	r20
 12a:	5f 93       	push	r21
 12c:	6f 93       	push	r22
 12e:	7f 93       	push	r23
 130:	8f 93       	push	r24
 132:	9f 93       	push	r25
 134:	af 93       	push	r26
 136:	bf 93       	push	r27
 138:	ef 93       	push	r30
 13a:	ff 93       	push	r31
 13c:	24 b1       	in	r18, 0x04	; 4
 13e:	35 b1       	in	r19, 0x05	; 5
 140:	80 91 60 00 	lds	r24, 0x0060
 144:	80 32       	cpi	r24, 0x20	; 32
 146:	a0 f0       	brcs	.+40     	; 0x170 <__vector_14+0x56>
 148:	82 e0       	ldi	r24, 0x02	; 2
 14a:	20 30       	cpi	r18, 0x00	; 0
 14c:	38 07       	cpc	r19, r24
 14e:	38 f0       	brcs	.+14     	; 0x15e <__vector_14+0x44>
 150:	8f ef       	ldi	r24, 0xFF	; 255
 152:	93 e0       	ldi	r25, 0x03	; 3
 154:	82 1b       	sub	r24, r18
 156:	93 0b       	sbc	r25, r19
 158:	9c 01       	movw	r18, r24
 15a:	2f 5f       	subi	r18, 0xFF	; 255
 15c:	3f 4f       	sbci	r19, 0xFF	; 255

⌨️ 快捷键说明

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