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

📄 main.lss

📁 avr的I/O、串口、定时器/计数器、外部中断、LCD等的例程
💻 LSS
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000001fa  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000062  00800060  000001fa  0000028e  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000012  008000c2  008000c2  000002f0  2**0
                  ALLOC
  3 .noinit       00000000  008000d4  008000d4  000002f0  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  000002f0  2**0
                  CONTENTS
  5 .debug_aranges 00000014  00000000  00000000  000002f0  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_pubnames 00000088  00000000  00000000  00000304  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_info   00000170  00000000  00000000  0000038c  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_abbrev 000000be  00000000  00000000  000004fc  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_line   000001b5  00000000  00000000  000005ba  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_str    000000a8  00000000  00000000  0000076f  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54
   4:	0c 94 45 00 	jmp	0x8a
   8:	0c 94 45 00 	jmp	0x8a
   c:	0c 94 45 00 	jmp	0x8a
  10:	0c 94 45 00 	jmp	0x8a
  14:	0c 94 45 00 	jmp	0x8a
  18:	0c 94 45 00 	jmp	0x8a
  1c:	0c 94 45 00 	jmp	0x8a
  20:	0c 94 45 00 	jmp	0x8a
  24:	0c 94 45 00 	jmp	0x8a
  28:	0c 94 45 00 	jmp	0x8a
  2c:	0c 94 67 00 	jmp	0xce
  30:	0c 94 45 00 	jmp	0x8a
  34:	0c 94 45 00 	jmp	0x8a
  38:	0c 94 45 00 	jmp	0x8a
  3c:	0c 94 45 00 	jmp	0x8a
  40:	0c 94 45 00 	jmp	0x8a
  44:	0c 94 45 00 	jmp	0x8a
  48:	0c 94 45 00 	jmp	0x8a
  4c:	0c 94 45 00 	jmp	0x8a
  50:	0c 94 45 00 	jmp	0x8a

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:	ea ef       	ldi	r30, 0xFA	; 250
  68:	f1 e0       	ldi	r31, 0x01	; 1
  6a:	02 c0       	rjmp	.+4      	; 0x70

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

00000070 <.do_copy_data_start>:
  70:	a2 3c       	cpi	r26, 0xC2	; 194
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c

00000076 <__do_clear_bss>:
  76:	10 e0       	ldi	r17, 0x00	; 0
  78:	a2 ec       	ldi	r26, 0xC2	; 194
  7a:	b0 e0       	ldi	r27, 0x00	; 0
  7c:	01 c0       	rjmp	.+2      	; 0x80

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

00000080 <.do_clear_bss_start>:
  80:	a4 3d       	cpi	r26, 0xD4	; 212
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e
  86:	0c 94 ed 00 	jmp	0x1da

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

0000008e <uart_init>:
	// Character Size: 8-bit
	// Mode: Asynchronous
	// Parity: Disabled
	// Stop Bit: 1-bit
	UBRRL = 0x2f; //9600
  8e:	8f e2       	ldi	r24, 0x2F	; 47
  90:	89 b9       	out	0x09, r24	; 9
	UBRRH = 0x00;
  92:	10 bc       	out	0x20, r1	; 32
	UCSRA = 0x00;  //
  94:	1b b8       	out	0x0b, r1	; 11
	UCSRC = 0x86;  //异步工作模式,Parity: Disabled,
  96:	86 e8       	ldi	r24, 0x86	; 134
  98:	80 bd       	out	0x20, r24	; 32
	UCSRB = 0x98;  //接收结束中断,接收器使能,发送器使能
  9a:	88 e9       	ldi	r24, 0x98	; 152
  9c:	8a b9       	out	0x0a, r24	; 10
  9e:	08 95       	ret

000000a0 <put_c>:
	//}}WIZARD_MAP(UART)
}

void put_c(uchar c) //发送采用查询方式
{
	while( !(UCSRA & (1<<UDRE)) );
  a0:	5d 9b       	sbis	0x0b, 5	; 11
  a2:	fe cf       	rjmp	.-4      	; 0xa0
	UDR=c;
  a4:	8c b9       	out	0x0c, r24	; 12
  a6:	08 95       	ret

000000a8 <put_s>:
}

void put_s(uchar *ptr)
{
  a8:	cf 93       	push	r28
  aa:	df 93       	push	r29
  ac:	ec 01       	movw	r28, r24
	while (*ptr)
	{
		put_c(*ptr++);
  ae:	88 81       	ld	r24, Y
  b0:	88 23       	and	r24, r24
  b2:	21 f0       	breq	.+8      	; 0xbc
  b4:	89 91       	ld	r24, Y+
  b6:	0e 94 50 00 	call	0xa0
  ba:	f9 cf       	rjmp	.-14     	; 0xae
	}
	put_c(0x0D);
  bc:	8d e0       	ldi	r24, 0x0D	; 13
  be:	0e 94 50 00 	call	0xa0
	put_c(0x0A);  //结尾发送回车换行
  c2:	8a e0       	ldi	r24, 0x0A	; 10
  c4:	0e 94 50 00 	call	0xa0
  c8:	df 91       	pop	r29
  ca:	cf 91       	pop	r28
  cc:	08 95       	ret

000000ce <__vector_11>:
}


SIGNAL(SIG_USART_RECV) //串口接收中断服务程序
{
  ce:	1f 92       	push	r1
  d0:	0f 92       	push	r0
  d2:	0f b6       	in	r0, 0x3f	; 63
  d4:	0f 92       	push	r0
  d6:	11 24       	eor	r1, r1
  d8:	2f 93       	push	r18
  da:	3f 93       	push	r19
  dc:	4f 93       	push	r20
  de:	5f 93       	push	r21
  e0:	6f 93       	push	r22
  e2:	7f 93       	push	r23
  e4:	8f 93       	push	r24
  e6:	9f 93       	push	r25
  e8:	af 93       	push	r26
  ea:	bf 93       	push	r27
  ec:	ef 93       	push	r30
  ee:	ff 93       	push	r31
	PC_COMMAND=UDR;
  f0:	8c b1       	in	r24, 0x0c	; 12
  f2:	80 93 d3 00 	sts	0x00D3, r24
	switch(PC_COMMAND)
  f6:	80 91 d3 00 	lds	r24, 0x00D3
  fa:	99 27       	eor	r25, r25
  fc:	81 33       	cpi	r24, 0x31	; 49
  fe:	91 05       	cpc	r25, r1
 100:	69 f0       	breq	.+26     	; 0x11c
 102:	82 33       	cpi	r24, 0x32	; 50
 104:	91 05       	cpc	r25, r1
 106:	1c f4       	brge	.+6      	; 0x10e
 108:	c0 97       	sbiw	r24, 0x30	; 48
 10a:	21 f0       	breq	.+8      	; 0x114
 10c:	0e c0       	rjmp	.+28     	; 0x12a
 10e:	c2 97       	sbiw	r24, 0x32	; 50
 110:	49 f0       	breq	.+18     	; 0x124
 112:	0b c0       	rjmp	.+22     	; 0x12a
	{
		case '0':	//0x30 ASCII '0'
			//LED0_ON();
			LCD_EN_PORT |= LCD_EN;    //EN=1
 114:	d8 9a       	sbi	0x1b, 0	; 27
			put_s("用户输入0#指令");
 116:	80 e6       	ldi	r24, 0x60	; 96
 118:	90 e0       	ldi	r25, 0x00	; 0
 11a:	09 c0       	rjmp	.+18     	; 0x12e
			break;
		case '1':
			//LED1_ON();
			LCD_EN_PORT &= ~LCD_EN;   //EN=0
 11c:	d8 98       	cbi	0x1b, 0	; 27
			put_s("用户输入1#指令");
 11e:	8f e6       	ldi	r24, 0x6F	; 111
 120:	90 e0       	ldi	r25, 0x00	; 0
 122:	05 c0       	rjmp	.+10     	; 0x12e
			break;
		case '2':
			//LED0_OFF();
			//LED1_OFF();
			//FLAG=!FLAG;
			put_s("用户输入2#指令");
 124:	8e e7       	ldi	r24, 0x7E	; 126
 126:	90 e0       	ldi	r25, 0x00	; 0
 128:	02 c0       	rjmp	.+4      	; 0x12e
			break;
		default:
			put_s("用户输入的指令无效!");
 12a:	8d e8       	ldi	r24, 0x8D	; 141
 12c:	90 e0       	ldi	r25, 0x00	; 0
 12e:	0e 94 54 00 	call	0xa8
			break;
	}
	/*
	  注意,使用put_s函数发送数据需要一定的时间,如果输入数据的速度过高将会导致数据丢失
	  所以,一般建议中断服务程序的处理时间尽量的短,只做采集数据和设标志位,命令的处理交由主程序来完成
	  这里只是示范简单的命令处理
	*/
	RX_BUFFER[RX_index]=PC_COMMAND;		//保存数据到数组里面
 132:	80 91 d2 00 	lds	r24, 0x00D2
 136:	e8 2f       	mov	r30, r24
 138:	ff 27       	eor	r31, r31
 13a:	ee 53       	subi	r30, 0x3E	; 62
 13c:	ff 4f       	sbci	r31, 0xFF	; 255
 13e:	80 91 d3 00 	lds	r24, 0x00D3
 142:	80 83       	st	Z, r24
	RX_index++;
 144:	80 91 d2 00 	lds	r24, 0x00D2
 148:	8f 5f       	subi	r24, 0xFF	; 255
 14a:	80 93 d2 00 	sts	0x00D2, r24
	if (RX_index>=16) RX_index=0;		//防止数组溢出
 14e:	80 91 d2 00 	lds	r24, 0x00D2
 152:	80 31       	cpi	r24, 0x10	; 16
 154:	10 f0       	brcs	.+4      	; 0x15a
 156:	10 92 d2 00 	sts	0x00D2, r1
 15a:	ff 91       	pop	r31
 15c:	ef 91       	pop	r30
 15e:	bf 91       	pop	r27
 160:	af 91       	pop	r26
 162:	9f 91       	pop	r25
 164:	8f 91       	pop	r24
 166:	7f 91       	pop	r23
 168:	6f 91       	pop	r22
 16a:	5f 91       	pop	r21
 16c:	4f 91       	pop	r20
 16e:	3f 91       	pop	r19
 170:	2f 91       	pop	r18
 172:	0f 90       	pop	r0
 174:	0f be       	out	0x3f, r0	; 63
 176:	0f 90       	pop	r0
 178:	1f 90       	pop	r1
 17a:	18 95       	reti

0000017c <pro_coammand>:
		
}

void pro_coammand(void) //多字节命令的处理程序
{
 17c:	cf 93       	push	r28
	uchar i;
	
	if (RX_index>=10) 
 17e:	80 91 d2 00 	lds	r24, 0x00D2
 182:	8a 30       	cpi	r24, 0x0A	; 10
 184:	40 f1       	brcs	.+80     	; 0x1d6
	{
    	UCSRB&= ~(1<<RXCIE);	//关断USART接收中断
 186:	57 98       	cbi	0x0a, 7	; 10
		put_c(0x0D);
 188:	8d e0       	ldi	r24, 0x0D	; 13
 18a:	0e 94 50 00 	call	0xa0
		put_c(0x0A);  //发送回车换行
 18e:	8a e0       	ldi	r24, 0x0A	; 10
 190:	0e 94 50 00 	call	0xa0
		put_s("Hello! 你之前输入的命令列表是:");
 194:	81 ea       	ldi	r24, 0xA1	; 161
 196:	90 e0       	ldi	r25, 0x00	; 0
 198:	0e 94 54 00 	call	0xa8
		for (i=0;i<RX_index;i++) put_c(RX_BUFFER[i]);
 19c:	c0 e0       	ldi	r28, 0x00	; 0
 19e:	80 91 d2 00 	lds	r24, 0x00D2
 1a2:	c8 17       	cp	r28, r24
 1a4:	48 f4       	brcc	.+18     	; 0x1b8
 1a6:	ec 2f       	mov	r30, r28
 1a8:	ff 27       	eor	r31, r31
 1aa:	ee 53       	subi	r30, 0x3E	; 62
 1ac:	ff 4f       	sbci	r31, 0xFF	; 255
 1ae:	80 81       	ld	r24, Z
 1b0:	0e 94 50 00 	call	0xa0
 1b4:	cf 5f       	subi	r28, 0xFF	; 255
 1b6:	f3 cf       	rjmp	.-26     	; 0x19e
		put_c(0x0D);
 1b8:	8d e0       	ldi	r24, 0x0D	; 13
 1ba:	0e 94 50 00 	call	0xa0
		put_c(0x0A);
 1be:	8a e0       	ldi	r24, 0x0A	; 10
 1c0:	0e 94 50 00 	call	0xa0
		put_c(0x0D);
 1c4:	8d e0       	ldi	r24, 0x0D	; 13
 1c6:	0e 94 50 00 	call	0xa0
		put_c(0x0A);  //发送回车换行
 1ca:	8a e0       	ldi	r24, 0x0A	; 10
 1cc:	0e 94 50 00 	call	0xa0
		RX_index=0;				//清零
 1d0:	10 92 d2 00 	sts	0x00D2, r1
    	UCSRB|= (1<<RXCIE);	//打开USART接收中断
 1d4:	57 9a       	sbi	0x0a, 7	; 10
 1d6:	cf 91       	pop	r28
 1d8:	08 95       	ret

000001da <main>:
	}
}


int main(void)
{
 1da:	cf e5       	ldi	r28, 0x5F	; 95
 1dc:	d4 e0       	ldi	r29, 0x04	; 4
 1de:	de bf       	out	0x3e, r29	; 62
 1e0:	cd bf       	out	0x3d, r28	; 61
	PORTA =0xFF;											
 1e2:	9f ef       	ldi	r25, 0xFF	; 255
 1e4:	9b bb       	out	0x1b, r25	; 27
	PORTB =0xFF;
 1e6:	98 bb       	out	0x18, r25	; 24
    PORTC =0xFF;
 1e8:	95 bb       	out	0x15, r25	; 21
    DDRD  =(1<<PIN_TXD);								//TXD为输出
 1ea:	82 e0       	ldi	r24, 0x02	; 2
 1ec:	81 bb       	out	0x11, r24	; 17
    PORTD =0xFF;
 1ee:	92 bb       	out	0x12, r25	; 18
	CONTROL_PORT |= LCD_EN; //out
 1f0:	d0 9a       	sbi	0x1a, 0	; 26
	uart_init();
 1f2:	0e 94 47 00 	call	0x8e
	sei();
 1f6:	78 94       	sei
	while(1)
 1f8:	ff cf       	rjmp	.-2      	; 0x1f8

⌨️ 快捷键说明

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