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

📄 main.lss

📁 基于AVR单片机 Atmel Mega128的AD采集程序。
💻 LSS
📖 第 1 页 / 共 5 页
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .data         00000000  00800100  0000122c  000012c0  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  1 .text         0000122c  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .bss          00000024  00800100  00800100  000012c0  2**0
                  ALLOC
  3 .noinit       00000000  00800124  00800124  000012c0  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  000012c0  2**0
                  CONTENTS
  5 .stab         00001830  00000000  00000000  000012c0  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000c22  00000000  00000000  00002af0  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
       0:	0c 94 46 00 	jmp	0x8c
       4:	0c 94 63 00 	jmp	0xc6
       8:	0c 94 63 00 	jmp	0xc6
       c:	0c 94 63 00 	jmp	0xc6
      10:	0c 94 63 00 	jmp	0xc6
      14:	0c 94 63 00 	jmp	0xc6
      18:	0c 94 63 00 	jmp	0xc6
      1c:	0c 94 63 00 	jmp	0xc6
      20:	0c 94 f4 00 	jmp	0x1e8
      24:	0c 94 63 00 	jmp	0xc6
      28:	0c 94 63 00 	jmp	0xc6
      2c:	0c 94 63 00 	jmp	0xc6
      30:	0c 94 63 00 	jmp	0xc6
      34:	0c 94 63 00 	jmp	0xc6
      38:	0c 94 63 00 	jmp	0xc6
      3c:	0c 94 63 00 	jmp	0xc6
      40:	0c 94 63 00 	jmp	0xc6
      44:	0c 94 63 00 	jmp	0xc6
      48:	0c 94 65 00 	jmp	0xca
      4c:	0c 94 63 00 	jmp	0xc6
      50:	0c 94 63 00 	jmp	0xc6
      54:	0c 94 63 00 	jmp	0xc6
      58:	0c 94 63 00 	jmp	0xc6
      5c:	0c 94 63 00 	jmp	0xc6
      60:	0c 94 63 00 	jmp	0xc6
      64:	0c 94 63 00 	jmp	0xc6
      68:	0c 94 63 00 	jmp	0xc6
      6c:	0c 94 63 00 	jmp	0xc6
      70:	0c 94 63 00 	jmp	0xc6
      74:	0c 94 63 00 	jmp	0xc6
      78:	0c 94 63 00 	jmp	0xc6
      7c:	0c 94 63 00 	jmp	0xc6
      80:	0c 94 63 00 	jmp	0xc6
      84:	0c 94 63 00 	jmp	0xc6
      88:	0c 94 63 00 	jmp	0xc6

0000008c <__ctors_end>:
      8c:	11 24       	eor	r1, r1
      8e:	1f be       	out	0x3f, r1	; 63
      90:	cf ef       	ldi	r28, 0xFF	; 255
      92:	d0 e1       	ldi	r29, 0x10	; 16
      94:	de bf       	out	0x3e, r29	; 62
      96:	cd bf       	out	0x3d, r28	; 61

00000098 <__do_copy_data>:
      98:	11 e0       	ldi	r17, 0x01	; 1
      9a:	a0 e0       	ldi	r26, 0x00	; 0
      9c:	b1 e0       	ldi	r27, 0x01	; 1
      9e:	ec e2       	ldi	r30, 0x2C	; 44
      a0:	f2 e1       	ldi	r31, 0x12	; 18
      a2:	00 e0       	ldi	r16, 0x00	; 0
      a4:	0b bf       	out	0x3b, r16	; 59
      a6:	02 c0       	rjmp	.+4      	; 0xac

000000a8 <.__do_copy_data_loop>:
      a8:	07 90       	elpm	r0, Z+
      aa:	0d 92       	st	X+, r0

000000ac <.__do_copy_data_start>:
      ac:	a0 30       	cpi	r26, 0x00	; 0
      ae:	b1 07       	cpc	r27, r17
      b0:	d9 f7       	brne	.-10     	; 0xa8

000000b2 <__do_clear_bss>:
      b2:	11 e0       	ldi	r17, 0x01	; 1
      b4:	a0 e0       	ldi	r26, 0x00	; 0
      b6:	b1 e0       	ldi	r27, 0x01	; 1
      b8:	01 c0       	rjmp	.+2      	; 0xbc

000000ba <.do_clear_bss_loop>:
      ba:	1d 92       	st	X+, r1

000000bc <.do_clear_bss_start>:
      bc:	a4 32       	cpi	r26, 0x24	; 36
      be:	b1 07       	cpc	r27, r17
      c0:	e1 f7       	brne	.-8      	; 0xba
      c2:	0c 94 48 02 	jmp	0x490

000000c6 <__bad_interrupt>:
      c6:	0c 94 00 00 	jmp	0x0

000000ca <__vector_18>:
uint16_t global_voltage_counter;//操作电压地址计数器
uint8_t global_ad_finish_flag;//AD转换结束标志
//串口接收中断////////////////////////
SIGNAL(SIG_UART0_RECV)
{
      ca:	1f 92       	push	r1
      cc:	0f 92       	push	r0
      ce:	0f b6       	in	r0, 0x3f	; 63
      d0:	0f 92       	push	r0
      d2:	11 24       	eor	r1, r1
      d4:	2f 93       	push	r18
      d6:	3f 93       	push	r19
      d8:	4f 93       	push	r20
      da:	5f 93       	push	r21
      dc:	6f 93       	push	r22
      de:	7f 93       	push	r23
      e0:	8f 93       	push	r24
      e2:	9f 93       	push	r25
      e4:	af 93       	push	r26
      e6:	bf 93       	push	r27
      e8:	ef 93       	push	r30
      ea:	ff 93       	push	r31
      ec:	cf 93       	push	r28
      ee:	df 93       	push	r29
      f0:	cd b7       	in	r28, 0x3d	; 61
      f2:	de b7       	in	r29, 0x3e	; 62
      f4:	25 97       	sbiw	r28, 0x05	; 5
      f6:	de bf       	out	0x3e, r29	; 62
      f8:	cd bf       	out	0x3d, r28	; 61
//变量定义
	uint8_t temp_data;
	uint16_t i;
//关全局中断
    cli();
      fa:	f8 94       	cli
//等待接收到数据标志被置位
	loop_until_bit_is_set(UCSR0A,RXC0);
      fc:	80 91 2b 00 	lds	r24, 0x002B
     100:	88 23       	and	r24, r24
     102:	e4 f7       	brge	.-8      	; 0xfc
//对接收到的字节进行判断
	temp_data=UDR0;//读取接收的字节
     104:	80 91 2c 00 	lds	r24, 0x002C
     108:	89 83       	std	Y+1, r24	; 0x01
	if(temp_data!=0)//如果接收到非零
     10a:	89 81       	ldd	r24, Y+1	; 0x01
     10c:	88 23       	and	r24, r24
     10e:	09 f4       	brne	.+2      	; 0x112
     110:	4e c0       	rjmp	.+156    	; 0x1ae
	{
		if(global_flag_serie==0)//如果接收到的为第一字节
     112:	80 91 0f 01 	lds	r24, 0x010F
     116:	88 23       	and	r24, r24
     118:	51 f5       	brne	.+84     	; 0x16e
		{
			switch (temp_data)
     11a:	89 81       	ldd	r24, Y+1	; 0x01
     11c:	28 2f       	mov	r18, r24
     11e:	33 27       	eor	r19, r19
     120:	2c 83       	std	Y+4, r18	; 0x04
     122:	3d 83       	std	Y+5, r19	; 0x05
     124:	8c 81       	ldd	r24, Y+4	; 0x04
     126:	9d 81       	ldd	r25, Y+5	; 0x05
     128:	80 31       	cpi	r24, 0x10	; 16
     12a:	91 05       	cpc	r25, r1
     12c:	d1 f0       	breq	.+52     	; 0x162
     12e:	2c 81       	ldd	r18, Y+4	; 0x04
     130:	3d 81       	ldd	r19, Y+5	; 0x05
     132:	21 31       	cpi	r18, 0x11	; 17
     134:	31 05       	cpc	r19, r1
     136:	34 f4       	brge	.+12     	; 0x144
     138:	8c 81       	ldd	r24, Y+4	; 0x04
     13a:	9d 81       	ldd	r25, Y+5	; 0x05
     13c:	82 30       	cpi	r24, 0x02	; 2
     13e:	91 05       	cpc	r25, r1
     140:	39 f0       	breq	.+14     	; 0x150
     142:	35 c0       	rjmp	.+106    	; 0x1ae
     144:	2c 81       	ldd	r18, Y+4	; 0x04
     146:	3d 81       	ldd	r19, Y+5	; 0x05
     148:	22 32       	cpi	r18, 0x22	; 34
     14a:	31 05       	cpc	r19, r1
     14c:	69 f0       	breq	.+26     	; 0x168
     14e:	2f c0       	rjmp	.+94     	; 0x1ae
			{
				case 2://接到本机地址
					global_flag_serie=1;//准备接收第二字节数据
     150:	81 e0       	ldi	r24, 0x01	; 1
     152:	80 93 0f 01 	sts	0x010F, r24
					UCSR0A&=~(1<<MPCM0);//清零MPCM0,允许继续接收数据包
     156:	80 91 2b 00 	lds	r24, 0x002B
     15a:	8e 7f       	andi	r24, 0xFE	; 254
     15c:	80 93 2b 00 	sts	0x002B, r24
					break;
     160:	26 c0       	rjmp	.+76     	; 0x1ae
			//	case 0://接到复位命令
			//		global_start_sample_flag=0xff;//复位开始
			//		break;
				case 0x10://接到采集命令
					global_start_sample_flag=0;//开始采集数据
     162:	10 92 17 01 	sts	0x0117, r1
				//	sbi(PORTG,3);//测试用///////////////
					break;
     166:	23 c0       	rjmp	.+70     	; 0x1ae
			//	case 17://接到采集结束命令
				//	global_start_sample_flag=0xff;//结束采集数据
			//		break;
				case 0x22://接收到自动测试信号
					global_sample_mode_flag=0;
     168:	10 92 14 01 	sts	0x0114, r1
					break;
     16c:	20 c0       	rjmp	.+64     	; 0x1ae
				default:
					break;
			}
		}
		else if((global_flag_serie==1)&&(temp_data<=32))//如果接收的是第二字节
     16e:	80 91 0f 01 	lds	r24, 0x010F
     172:	81 30       	cpi	r24, 0x01	; 1
     174:	e1 f4       	brne	.+56     	; 0x1ae
     176:	89 81       	ldd	r24, Y+1	; 0x01
     178:	81 32       	cpi	r24, 0x21	; 33
     17a:	c8 f4       	brcc	.+50     	; 0x1ae
		{
			for(i=0;i<0xfff;i++){;}//延时等待
     17c:	1a 82       	std	Y+2, r1	; 0x02
     17e:	1b 82       	std	Y+3, r1	; 0x03
     180:	8a 81       	ldd	r24, Y+2	; 0x02
     182:	9b 81       	ldd	r25, Y+3	; 0x03
     184:	3f e0       	ldi	r19, 0x0F	; 15
     186:	8f 3f       	cpi	r24, 0xFF	; 255
     188:	93 07       	cpc	r25, r19
     18a:	08 f0       	brcs	.+2      	; 0x18e
     18c:	06 c0       	rjmp	.+12     	; 0x19a
     18e:	8a 81       	ldd	r24, Y+2	; 0x02
     190:	9b 81       	ldd	r25, Y+3	; 0x03
     192:	01 96       	adiw	r24, 0x01	; 1
     194:	8a 83       	std	Y+2, r24	; 0x02
     196:	9b 83       	std	Y+3, r25	; 0x03
     198:	f3 cf       	rjmp	.-26     	; 0x180
			SEND_ONE_PACKAGE(temp_data);//发送数据包,temp_data为包序号
     19a:	89 81       	ldd	r24, Y+1	; 0x01
     19c:	0e 94 9a 06 	call	0xd34
		//	if(temp_data==17){sbi(PORTG,3);}//测试用////////////
			global_flag_serie=0;
     1a0:	10 92 0f 01 	sts	0x010F, r1
			UCSR0A|=(1<<MPCM0);//准备接收地址
     1a4:	80 91 2b 00 	lds	r24, 0x002B
     1a8:	81 60       	ori	r24, 0x01	; 1
     1aa:	80 93 2b 00 	sts	0x002B, r24
		}
    }
	cbi(PORTE,2);//改为接收状态
     1ae:	80 91 23 00 	lds	r24, 0x0023
     1b2:	8b 7f       	andi	r24, 0xFB	; 251
     1b4:	80 93 23 00 	sts	0x0023, r24
	sei();
     1b8:	78 94       	sei
}
     1ba:	25 96       	adiw	r28, 0x05	; 5
     1bc:	f8 94       	cli
     1be:	de bf       	out	0x3e, r29	; 62
     1c0:	cd bf       	out	0x3d, r28	; 61
     1c2:	df 91       	pop	r29
     1c4:	cf 91       	pop	r28
     1c6:	ff 91       	pop	r31
     1c8:	ef 91       	pop	r30
     1ca:	bf 91       	pop	r27
     1cc:	af 91       	pop	r26
     1ce:	9f 91       	pop	r25
     1d0:	8f 91       	pop	r24
     1d2:	7f 91       	pop	r23
     1d4:	6f 91       	pop	r22
     1d6:	5f 91       	pop	r21
     1d8:	4f 91       	pop	r20
     1da:	3f 91       	pop	r19
     1dc:	2f 91       	pop	r18
     1de:	0f 90       	pop	r0
     1e0:	0f be       	out	0x3f, r0	; 63
     1e2:	0f 90       	pop	r0
     1e4:	1f 90       	pop	r1
     1e6:	18 95       	reti

000001e8 <__vector_8>:

//AD转换结束中断int7//////////////////
SIGNAL(SIG_INTERRUPT7)
{
     1e8:	1f 92       	push	r1
     1ea:	0f 92       	push	r0
     1ec:	0f b6       	in	r0, 0x3f	; 63
     1ee:	0f 92       	push	r0
     1f0:	11 24       	eor	r1, r1
     1f2:	2f 93       	push	r18
     1f4:	3f 93       	push	r19
     1f6:	4f 93       	push	r20
     1f8:	5f 93       	push	r21
     1fa:	6f 93       	push	r22
     1fc:	7f 93       	push	r23
     1fe:	8f 93       	push	r24
     200:	9f 93       	push	r25
     202:	af 93       	push	r26
     204:	bf 93       	push	r27
     206:	ef 93       	push	r30
     208:	ff 93       	push	r31
     20a:	cf 93       	push	r28
     20c:	df 93       	push	r29
     20e:	cd b7       	in	r28, 0x3d	; 61
     210:	de b7       	in	r29, 0x3e	; 62
     212:	27 97       	sbiw	r28, 0x07	; 7
     214:	de bf       	out	0x3e, r29	; 62
     216:	cd bf       	out	0x3d, r28	; 61
//变量定义
	uint16_t int16_temp1;
	uint8_t temp1,temp2,i;
//关中断
	cli();
     218:	f8 94       	cli
//读取ad转换结果
	int16_temp1=AD7891_READ();
     21a:	0e 94 c6 04 	call	0x98c
     21e:	89 83       	std	Y+1, r24	; 0x01
     220:	9a 83       	std	Y+2, r25	; 0x02
//如果是需要保存到RAM的采样
	if(global_sample_mode_flag==0xFF)
     222:	80 91 14 01 	lds	r24, 0x0114
     226:	8f 3f       	cpi	r24, 0xFF	; 255
     228:	09 f0       	breq	.+2      	; 0x22c
     22a:	96 c0       	rjmp	.+300    	; 0x358
	{
	//AD7891 deselect,否则数据总线与RAM冲突
		sbi(PORTD,5);
     22c:	80 91 32 00 	lds	r24, 0x0032
     230:	80 62       	ori	r24, 0x20	; 32
     232:	80 93 32 00 	sts	0x0032, r24
	//AD转换结果存入RAM
		temp1=int16_temp1/256;
     236:	89 81       	ldd	r24, Y+1	; 0x01
     238:	9a 81       	ldd	r25, Y+2	; 0x02
     23a:	89 2f       	mov	r24, r25
     23c:	99 27       	eor	r25, r25
     23e:	8b 83       	std	Y+3, r24	; 0x03
		temp2=int16_temp1%256;
     240:	89 81       	ldd	r24, Y+1	; 0x01
     242:	9a 81       	ldd	r25, Y+2	; 0x02
     244:	90 70       	andi	r25, 0x00	; 0
     246:	8c 83       	std	Y+4, r24	; 0x04
	//保存数据
		switch(global_channel_flag)
     248:	80 91 00 01 	lds	r24, 0x0100
     24c:	28 2f       	mov	r18, r24
     24e:	33 27       	eor	r19, r19
     250:	2e 83       	std	Y+6, r18	; 0x06
     252:	3f 83       	std	Y+7, r19	; 0x07
     254:	8e 81       	ldd	r24, Y+6	; 0x06
     256:	9f 81       	ldd	r25, Y+7	; 0x07

⌨️ 快捷键说明

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