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

📄 uart1.lss

📁 avr usart sample (interrupt)
💻 LSS
字号:

uart1.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000024a  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000016  00800060  0000024a  000002de  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000006  00800076  00800076  000002f4  2**0
                  ALLOC
  3 .noinit       00000000  0080007c  0080007c  000002f4  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  000002f4  2**0
                  CONTENTS
  5 .stab         00000354  00000000  00000000  000002f4  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000084  00000000  00000000  00000648  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_aranges 00000014  00000000  00000000  000006cc  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_pubnames 00000070  00000000  00000000  000006e0  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_info   00000215  00000000  00000000  00000750  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_abbrev 000000da  00000000  00000000  00000965  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_line   000001fb  00000000  00000000  00000a3f  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_str    000000f4  00000000  00000000  00000c3a  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	12 c0       	rjmp	.+36     	; 0x26 <__ctors_end>
   2:	2a c0       	rjmp	.+84     	; 0x58 <__bad_interrupt>
   4:	29 c0       	rjmp	.+82     	; 0x58 <__bad_interrupt>
   6:	28 c0       	rjmp	.+80     	; 0x58 <__bad_interrupt>
   8:	27 c0       	rjmp	.+78     	; 0x58 <__bad_interrupt>
   a:	26 c0       	rjmp	.+76     	; 0x58 <__bad_interrupt>
   c:	25 c0       	rjmp	.+74     	; 0x58 <__bad_interrupt>
   e:	50 c0       	rjmp	.+160    	; 0xb0 <__vector_7>
  10:	65 c0       	rjmp	.+202    	; 0xdc <__vector_8>
  12:	23 c0       	rjmp	.+70     	; 0x5a <__vector_9>
  14:	21 c0       	rjmp	.+66     	; 0x58 <__bad_interrupt>
  16:	20 c0       	rjmp	.+64     	; 0x58 <__bad_interrupt>
  18:	1f c0       	rjmp	.+62     	; 0x58 <__bad_interrupt>
  1a:	1e c0       	rjmp	.+60     	; 0x58 <__bad_interrupt>
  1c:	1d c0       	rjmp	.+58     	; 0x58 <__bad_interrupt>
  1e:	1c c0       	rjmp	.+56     	; 0x58 <__bad_interrupt>
  20:	1b c0       	rjmp	.+54     	; 0x58 <__bad_interrupt>
  22:	1a c0       	rjmp	.+52     	; 0x58 <__bad_interrupt>
  24:	19 c0       	rjmp	.+50     	; 0x58 <__bad_interrupt>

00000026 <__ctors_end>:
  26:	11 24       	eor	r1, r1
  28:	1f be       	out	0x3f, r1	; 63
  2a:	cf ed       	ldi	r28, 0xDF	; 223
  2c:	cd bf       	out	0x3d, r28	; 61

0000002e <__do_copy_data>:
  2e:	10 e0       	ldi	r17, 0x00	; 0
  30:	a0 e6       	ldi	r26, 0x60	; 96
  32:	b0 e0       	ldi	r27, 0x00	; 0
  34:	ea e4       	ldi	r30, 0x4A	; 74
  36:	f2 e0       	ldi	r31, 0x02	; 2
  38:	03 c0       	rjmp	.+6      	; 0x40 <.do_copy_data_start>

0000003a <.do_copy_data_loop>:
  3a:	c8 95       	lpm
  3c:	31 96       	adiw	r30, 0x01	; 1
  3e:	0d 92       	st	X+, r0

00000040 <.do_copy_data_start>:
  40:	a6 37       	cpi	r26, 0x76	; 118
  42:	b1 07       	cpc	r27, r17
  44:	d1 f7       	brne	.-12     	; 0x3a <.do_copy_data_loop>

00000046 <__do_clear_bss>:
  46:	10 e0       	ldi	r17, 0x00	; 0
  48:	a6 e7       	ldi	r26, 0x76	; 118
  4a:	b0 e0       	ldi	r27, 0x00	; 0
  4c:	01 c0       	rjmp	.+2      	; 0x50 <.do_clear_bss_start>

0000004e <.do_clear_bss_loop>:
  4e:	1d 92       	st	X+, r1

00000050 <.do_clear_bss_start>:
  50:	ac 37       	cpi	r26, 0x7C	; 124
  52:	b1 07       	cpc	r27, r17
  54:	e1 f7       	brne	.-8      	; 0x4e <.do_clear_bss_loop>
  56:	86 c0       	rjmp	.+268    	; 0x164 <main>

00000058 <__bad_interrupt>:
  58:	d3 cf       	rjmp	.-90     	; 0x0 <__vectors>

0000005a <__vector_9>:
static volatile uint8_t flag;
static volatile uint8_t txReady;

ISR(UART_TX_vect)
{
  5a:	1f 92       	push	r1
  5c:	0f 92       	push	r0
  5e:	0f b6       	in	r0, 0x3f	; 63
  60:	0f 92       	push	r0
  62:	11 24       	eor	r1, r1
  64:	8f 93       	push	r24
  66:	ef 93       	push	r30
  68:	ff 93       	push	r31
	uart_data_ptr++;
  6a:	e0 91 76 00 	lds	r30, 0x0076
  6e:	f0 91 77 00 	lds	r31, 0x0077
  72:	31 96       	adiw	r30, 0x01	; 1
  74:	f0 93 77 00 	sts	0x0077, r31
  78:	e0 93 76 00 	sts	0x0076, r30
  7c:	31 97       	sbiw	r30, 0x01	; 1

	if(--uart_counter && txReady) {
  7e:	80 91 78 00 	lds	r24, 0x0078
  82:	81 50       	subi	r24, 0x01	; 1
  84:	80 93 78 00 	sts	0x0078, r24
  88:	80 91 78 00 	lds	r24, 0x0078
  8c:	88 23       	and	r24, r24
  8e:	41 f0       	breq	.+16     	; 0xa0 <__vector_9+0x46>
  90:	80 91 7b 00 	lds	r24, 0x007B
  94:	88 23       	and	r24, r24
  96:	21 f0       	breq	.+8      	; 0xa0 <__vector_9+0x46>
		UDR = *uart_data_ptr;
  98:	81 81       	ldd	r24, Z+1	; 0x01
  9a:	8c b9       	out	0x0c, r24	; 12
		txReady = 0;
  9c:	10 92 7b 00 	sts	0x007B, r1
  a0:	ff 91       	pop	r31
  a2:	ef 91       	pop	r30
  a4:	8f 91       	pop	r24
  a6:	0f 90       	pop	r0
  a8:	0f be       	out	0x3f, r0	; 63
  aa:	0f 90       	pop	r0
  ac:	1f 90       	pop	r1
  ae:	18 95       	reti

000000b0 <__vector_7>:
	}
}

ISR(UART_RX_vect)
{
  b0:	1f 92       	push	r1
  b2:	0f 92       	push	r0
  b4:	0f b6       	in	r0, 0x3f	; 63
  b6:	0f 92       	push	r0
  b8:	11 24       	eor	r1, r1
  ba:	8f 93       	push	r24
	led = UDR;
  bc:	8c b1       	in	r24, 0x0c	; 12
  be:	80 93 79 00 	sts	0x0079, r24
	PORTB = ~led;
  c2:	80 91 79 00 	lds	r24, 0x0079
  c6:	80 95       	com	r24
  c8:	88 bb       	out	0x18, r24	; 24
	flag = 1;
  ca:	81 e0       	ldi	r24, 0x01	; 1
  cc:	80 93 7a 00 	sts	0x007A, r24
  d0:	8f 91       	pop	r24
  d2:	0f 90       	pop	r0
  d4:	0f be       	out	0x3f, r0	; 63
  d6:	0f 90       	pop	r0
  d8:	1f 90       	pop	r1
  da:	18 95       	reti

000000dc <__vector_8>:
}

ISR(USART_UDRE_vect)
{
  dc:	1f 92       	push	r1
  de:	0f 92       	push	r0
  e0:	0f b6       	in	r0, 0x3f	; 63
  e2:	0f 92       	push	r0
  e4:	11 24       	eor	r1, r1
  e6:	8f 93       	push	r24
	txReady = 1;
  e8:	81 e0       	ldi	r24, 0x01	; 1
  ea:	80 93 7b 00 	sts	0x007B, r24
  ee:	8f 91       	pop	r24
  f0:	0f 90       	pop	r0
  f2:	0f be       	out	0x3f, r0	; 63
  f4:	0f 90       	pop	r0
  f6:	1f 90       	pop	r1
  f8:	18 95       	reti

000000fa <uart_send>:
}


void uart_send(uint8_t* buff, uint8_t size)
{
  fa:	f9 2f       	mov	r31, r25
  fc:	e8 2f       	mov	r30, r24
	if(!uart_counter) {
  fe:	80 91 78 00 	lds	r24, 0x0078
 102:	88 23       	and	r24, r24
 104:	41 f4       	brne	.+16     	; 0x116 <uart_send+0x1c>
		uart_data_ptr = buff;
 106:	f0 93 77 00 	sts	0x0077, r31
 10a:	e0 93 76 00 	sts	0x0076, r30
		uart_counter = size;
 10e:	60 93 78 00 	sts	0x0078, r22
		UDR = *buff;
 112:	80 81       	ld	r24, Z
 114:	8c b9       	out	0x0c, r24	; 12
 116:	08 95       	ret

00000118 <uart_init>:
	}
}


void uart_init(void)
{
	UCR = _BV(RXCIE) | _BV(TXCIE) | _BV(RXEN) | _BV(TXEN);
 118:	88 ed       	ldi	r24, 0xD8	; 216
 11a:	8a b9       	out	0x0a, r24	; 10
#ifdef _AVR_IOTN2313_H_
	UBRRH = (uint8_t)(UART_BAUD_SELECT >> 8);
 11c:	12 b8       	out	0x02, r1	; 2
	UCSRC = _BV(USBS) | _BV(UCSZ0);
 11e:	8a e0       	ldi	r24, 0x0A	; 10
 120:	83 b9       	out	0x03, r24	; 3
#endif //attiny2313
	UBRR = (uint8_t)UART_BAUD_SELECT;
 122:	8c e0       	ldi	r24, 0x0C	; 12
 124:	89 b9       	out	0x09, r24	; 9
 126:	08 95       	ret

00000128 <int2str>:
}

char* int2str(uint8_t num, char* str_val)
{
 128:	b7 2f       	mov	r27, r23
 12a:	a6 2f       	mov	r26, r22
	uint8_t i;
	uint8_t hi = num >> 4;
 12c:	28 2f       	mov	r18, r24
 12e:	22 95       	swap	r18
 130:	2f 70       	andi	r18, 0x0F	; 15
	str_val[0] = '0';
 132:	90 e3       	ldi	r25, 0x30	; 48
 134:	9c 93       	st	X, r25
	str_val[1] = 'x';
 136:	98 e7       	ldi	r25, 0x78	; 120
 138:	f7 2f       	mov	r31, r23
 13a:	e6 2f       	mov	r30, r22
 13c:	91 83       	std	Z+1, r25	; 0x01
	str_val[4] = 0;
 13e:	14 82       	std	Z+4, r1	; 0x04
 140:	8f 70       	andi	r24, 0x0F	; 15
 142:	32 96       	adiw	r30, 0x02	; 2
 144:	91 e0       	ldi	r25, 0x01	; 1
	for(i=2; i<4; i++) {
		if(hi > 9) str_val[i] = hi + 55;
 146:	2a 30       	cpi	r18, 0x0A	; 10
 148:	40 f0       	brcs	.+16     	; 0x15a <int2str+0x32>
 14a:	29 5c       	subi	r18, 0xC9	; 201
		else str_val[i] = hi + 48;
 14c:	20 83       	st	Z, r18
		hi = num & 0x0f;
 14e:	28 2f       	mov	r18, r24
 150:	91 50       	subi	r25, 0x01	; 1
 152:	31 96       	adiw	r30, 0x01	; 1
 154:	97 ff       	sbrs	r25, 7
 156:	f7 cf       	rjmp	.-18     	; 0x146 <int2str+0x1e>
 158:	02 c0       	rjmp	.+4      	; 0x15e <int2str+0x36>
 15a:	20 5d       	subi	r18, 0xD0	; 208
 15c:	f7 cf       	rjmp	.-18     	; 0x14c <int2str+0x24>
	}
	return str_val;
}
 15e:	8a 2f       	mov	r24, r26
 160:	9b 2f       	mov	r25, r27
 162:	08 95       	ret

00000164 <main>:

		

int main(void)
{
 164:	c5 ec       	ldi	r28, 0xC5	; 197
 166:	d0 e0       	ldi	r29, 0x00	; 0
 168:	de bf       	out	0x3e, r29	; 62
 16a:	cd bf       	out	0x3d, r28	; 61
	cli();
 16c:	f8 94       	cli
	char str_val[5];
	char message[21] = "Recive value:";
 16e:	0c 2f       	mov	r16, r28
 170:	1d 2f       	mov	r17, r29
 172:	0a 5f       	subi	r16, 0xFA	; 250
 174:	1f 4f       	sbci	r17, 0xFF	; 255
 176:	20 e6       	ldi	r18, 0x60	; 96
 178:	a2 2e       	mov	r10, r18
 17a:	20 e0       	ldi	r18, 0x00	; 0
 17c:	b2 2e       	mov	r11, r18
 17e:	8e e0       	ldi	r24, 0x0E	; 14
 180:	b1 2f       	mov	r27, r17
 182:	a0 2f       	mov	r26, r16
 184:	fb 2d       	mov	r31, r11
 186:	ea 2d       	mov	r30, r10
 188:	01 90       	ld	r0, Z+
 18a:	0d 92       	st	X+, r0
 18c:	8a 95       	dec	r24
 18e:	e1 f7       	brne	.-8      	; 0x188 <main+0x24>
 190:	87 e0       	ldi	r24, 0x07	; 7
 192:	fd 2f       	mov	r31, r29
 194:	ec 2f       	mov	r30, r28
 196:	74 96       	adiw	r30, 0x14	; 20
 198:	11 92       	st	Z+, r1
 19a:	8a 95       	dec	r24
 19c:	e9 f7       	brne	.-6      	; 0x198 <main+0x34>

	uart_init();
 19e:	bc df       	rcall	.-136    	; 0x118 <uart_init>

	DDRB = 0xff;
 1a0:	8f ef       	ldi	r24, 0xFF	; 255
 1a2:	87 bb       	out	0x17, r24	; 23
	PORTB = 0x00;
 1a4:	18 ba       	out	0x18, r1	; 24

	flag = 0;
 1a6:	10 92 7a 00 	sts	0x007A, r1
	txReady = 1;
 1aa:	81 e0       	ldi	r24, 0x01	; 1
 1ac:	80 93 7b 00 	sts	0x007B, r24
	uart_counter = 0;
 1b0:	10 92 78 00 	sts	0x0078, r1
	
	sei();
 1b4:	78 94       	sei
 1b6:	9e e0       	ldi	r25, 0x0E	; 14
 1b8:	99 2e       	mov	r9, r25
 1ba:	83 e2       	ldi	r24, 0x23	; 35
 1bc:	c8 2e       	mov	r12, r24
 1be:	83 e2       	ldi	r24, 0x23	; 35
 1c0:	d8 2e       	mov	r13, r24
 1c2:	83 e2       	ldi	r24, 0x23	; 35
 1c4:	e8 2e       	mov	r14, r24
 1c6:	f1 2c       	mov	r15, r1
 1c8:	07 c0       	rjmp	.+14     	; 0x1d8 <main+0x74>

	while(1) {
		if(flag == 1) {	
			strcpy(message, "Recive value:");
			int2str(led, str_val);
			strcat(message, str_val);
			strcat(message, "###");
			uart_send(message, sizeof(message)-1);

			flag = 0;
		}
		sleep_enable();
 1ca:	85 b7       	in	r24, 0x35	; 53
 1cc:	80 62       	ori	r24, 0x20	; 32
 1ce:	85 bf       	out	0x35, r24	; 53
		sleep_cpu();
 1d0:	88 95       	sleep
		sleep_disable();
 1d2:	85 b7       	in	r24, 0x35	; 53
 1d4:	8f 7d       	andi	r24, 0xDF	; 223
 1d6:	85 bf       	out	0x35, r24	; 53
 1d8:	80 91 7a 00 	lds	r24, 0x007A
 1dc:	81 30       	cpi	r24, 0x01	; 1
 1de:	a9 f7       	brne	.-22     	; 0x1ca <main+0x66>
 1e0:	b1 2f       	mov	r27, r17
 1e2:	a0 2f       	mov	r26, r16
 1e4:	fb 2d       	mov	r31, r11
 1e6:	ea 2d       	mov	r30, r10
 1e8:	89 2d       	mov	r24, r9
 1ea:	01 90       	ld	r0, Z+
 1ec:	0d 92       	st	X+, r0
 1ee:	8a 95       	dec	r24
 1f0:	e1 f7       	brne	.-8      	; 0x1ea <main+0x86>
 1f2:	6c 2f       	mov	r22, r28
 1f4:	7d 2f       	mov	r23, r29
 1f6:	6f 5f       	subi	r22, 0xFF	; 255
 1f8:	7f 4f       	sbci	r23, 0xFF	; 255
 1fa:	80 91 79 00 	lds	r24, 0x0079
 1fe:	94 df       	rcall	.-216    	; 0x128 <int2str>
 200:	6c 2f       	mov	r22, r28
 202:	7d 2f       	mov	r23, r29
 204:	6f 5f       	subi	r22, 0xFF	; 255
 206:	7f 4f       	sbci	r23, 0xFF	; 255
 208:	91 2f       	mov	r25, r17
 20a:	80 2f       	mov	r24, r16
 20c:	11 d0       	rcall	.+34     	; 0x230 <strcat>
 20e:	f1 2f       	mov	r31, r17
 210:	e0 2f       	mov	r30, r16
 212:	01 90       	ld	r0, Z+
 214:	00 20       	and	r0, r0
 216:	e9 f7       	brne	.-6      	; 0x212 <main+0xae>
 218:	31 97       	sbiw	r30, 0x01	; 1
 21a:	c0 82       	st	Z, r12
 21c:	d1 82       	std	Z+1, r13	; 0x01
 21e:	e2 82       	std	Z+2, r14	; 0x02
 220:	f3 82       	std	Z+3, r15	; 0x03
 222:	64 e1       	ldi	r22, 0x14	; 20
 224:	91 2f       	mov	r25, r17
 226:	80 2f       	mov	r24, r16
 228:	68 df       	rcall	.-304    	; 0xfa <uart_send>
 22a:	10 92 7a 00 	sts	0x007A, r1
 22e:	cd cf       	rjmp	.-102    	; 0x1ca <main+0x66>

00000230 <strcat>:
 230:	e6 2f       	mov	r30, r22
 232:	f7 2f       	mov	r31, r23
 234:	a8 2f       	mov	r26, r24
 236:	b9 2f       	mov	r27, r25
 238:	0d 90       	ld	r0, X+
 23a:	00 20       	and	r0, r0
 23c:	e9 f7       	brne	.-6      	; 0x238 <strcat+0x8>
 23e:	11 97       	sbiw	r26, 0x01	; 1
 240:	01 90       	ld	r0, Z+
 242:	0d 92       	st	X+, r0
 244:	00 20       	and	r0, r0
 246:	e1 f7       	brne	.-8      	; 0x240 <strcat+0x10>
 248:	08 95       	ret

⌨️ 快捷键说明

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