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

📄 demo.lss

📁 avr单片机的一些实际应用源码
💻 LSS
字号:

demo.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000200  00001800  00001800  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00800060  00001a00  00000294  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000044  00800060  00800060  00000294  2**0
                  ALLOC
  3 .noinit       00000000  008000a4  008000a4  00000294  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00000294  2**0
                  CONTENTS
  5 .stab         00000510  00000000  00000000  00000294  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      00000737  00000000  00000000  000007a4  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00001800 <__vectors>:
    1800:	12 c0       	rjmp	.+36     	; 0x1826
    1802:	2b c0       	rjmp	.+86     	; 0x185a
    1804:	2a c0       	rjmp	.+84     	; 0x185a
    1806:	29 c0       	rjmp	.+82     	; 0x185a
    1808:	28 c0       	rjmp	.+80     	; 0x185a
    180a:	27 c0       	rjmp	.+78     	; 0x185a
    180c:	26 c0       	rjmp	.+76     	; 0x185a
    180e:	25 c0       	rjmp	.+74     	; 0x185a
    1810:	24 c0       	rjmp	.+72     	; 0x185a
    1812:	23 c0       	rjmp	.+70     	; 0x185a
    1814:	22 c0       	rjmp	.+68     	; 0x185a
    1816:	21 c0       	rjmp	.+66     	; 0x185a
    1818:	20 c0       	rjmp	.+64     	; 0x185a
    181a:	1f c0       	rjmp	.+62     	; 0x185a
    181c:	1e c0       	rjmp	.+60     	; 0x185a
    181e:	1d c0       	rjmp	.+58     	; 0x185a
    1820:	1c c0       	rjmp	.+56     	; 0x185a
    1822:	1b c0       	rjmp	.+54     	; 0x185a
    1824:	1a c0       	rjmp	.+52     	; 0x185a

00001826 <__ctors_end>:
    1826:	11 24       	eor	r1, r1
    1828:	1f be       	out	0x3f, r1	; 63
    182a:	cf e5       	ldi	r28, 0x5F	; 95
    182c:	d4 e0       	ldi	r29, 0x04	; 4
    182e:	de bf       	out	0x3e, r29	; 62
    1830:	cd bf       	out	0x3d, r28	; 61

00001832 <__do_copy_data>:
    1832:	10 e0       	ldi	r17, 0x00	; 0
    1834:	a0 e6       	ldi	r26, 0x60	; 96
    1836:	b0 e0       	ldi	r27, 0x00	; 0
    1838:	e0 e0       	ldi	r30, 0x00	; 0
    183a:	fa e1       	ldi	r31, 0x1A	; 26
    183c:	02 c0       	rjmp	.+4      	; 0x1842

0000183e <.do_copy_data_loop>:
    183e:	05 90       	lpm	r0, Z+
    1840:	0d 92       	st	X+, r0

00001842 <.do_copy_data_start>:
    1842:	a0 36       	cpi	r26, 0x60	; 96
    1844:	b1 07       	cpc	r27, r17
    1846:	d9 f7       	brne	.-10     	; 0x183e

00001848 <__do_clear_bss>:
    1848:	10 e0       	ldi	r17, 0x00	; 0
    184a:	a0 e6       	ldi	r26, 0x60	; 96
    184c:	b0 e0       	ldi	r27, 0x00	; 0
    184e:	01 c0       	rjmp	.+2      	; 0x1852

00001850 <.do_clear_bss_loop>:
    1850:	1d 92       	st	X+, r1

00001852 <.do_clear_bss_start>:
    1852:	a4 3a       	cpi	r26, 0xA4	; 164
    1854:	b1 07       	cpc	r27, r17
    1856:	e1 f7       	brne	.-8      	; 0x1850
    1858:	9e c0       	rjmp	.+316    	; 0x1996

0000185a <__bad_interrupt>:
    185a:	d2 cf       	rjmp	.-92     	; 0x1800

0000185c <uart_putc>:
void (*reset)(void)=0x0000;

void uart_putc(uchar c)
{
	while( !(UCSRA & (1<<UDRE)) );
    185c:	5d 9b       	sbis	0x0b, 5	; 11
    185e:	fe cf       	rjmp	.-4      	; 0x185c
	UDR=c;
    1860:	8c b9       	out	0x0c, r24	; 12
    1862:	08 95       	ret

00001864 <uart_getc>:
}

uchar uart_getc(void)
{
	while( !(UCSRA & (1<<RXC)) );	
    1864:	5f 9b       	sbis	0x0b, 7	; 11
    1866:	fe cf       	rjmp	.-4      	; 0x1864
	return UDR;
    1868:	8c b1       	in	r24, 0x0c	; 12
}
    186a:	99 27       	eor	r25, r25
    186c:	08 95       	ret

0000186e <WritePage>:

void WritePage(void)
{
    186e:	0f 93       	push	r16
    1870:	1f 93       	push	r17
    1872:	cf 93       	push	r28
    1874:	04 e6       	ldi	r16, 0x64	; 100
    1876:	10 e0       	ldi	r17, 0x00	; 0
    1878:	cf e3       	ldi	r28, 0x3F	; 63
	uchar i;
	
	//	接收当前页面数据
	for(i=0;i<PAGE_SIZE;i++)
		g_aPageTemp[i]=uart_getc();
    187a:	f4 df       	rcall	.-24     	; 0x1864
    187c:	f8 01       	movw	r30, r16
    187e:	81 93       	st	Z+, r24
    1880:	8f 01       	movw	r16, r30
    1882:	c1 50       	subi	r28, 0x01	; 1
    1884:	c7 ff       	sbrs	r28, 7
    1886:	f9 cf       	rjmp	.-14     	; 0x187a
	
	//	页擦除操作
    boot_page_erase(g_wPageIndex<<6);
    1888:	07 b6       	in	r0, 0x37	; 55
    188a:	00 fc       	sbrc	r0, 0
    188c:	fd cf       	rjmp	.-6      	; 0x1888
    188e:	e1 99       	sbic	0x1c, 1	; 28
    1890:	fe cf       	rjmp	.-4      	; 0x188e
    1892:	23 e0       	ldi	r18, 0x03	; 3
    1894:	40 91 62 00 	lds	r20, 0x0062
    1898:	50 91 63 00 	lds	r21, 0x0063
    189c:	ca 01       	movw	r24, r20
    189e:	66 e0       	ldi	r22, 0x06	; 6
    18a0:	88 0f       	add	r24, r24
    18a2:	99 1f       	adc	r25, r25
    18a4:	6a 95       	dec	r22
    18a6:	e1 f7       	brne	.-8      	; 0x18a0
    18a8:	fc 01       	movw	r30, r24
    18aa:	20 93 57 00 	sts	0x0057, r18
    18ae:	e8 95       	spm
    while(boot_rww_busy())
        boot_rww_enable();
    18b0:	07 b6       	in	r0, 0x37	; 55
    18b2:	06 fe       	sbrs	r0, 6
    18b4:	0c c0       	rjmp	.+24     	; 0x18ce
    18b6:	81 e1       	ldi	r24, 0x11	; 17
    18b8:	07 b6       	in	r0, 0x37	; 55
    18ba:	00 fc       	sbrc	r0, 0
    18bc:	fd cf       	rjmp	.-6      	; 0x18b8
    18be:	e1 99       	sbic	0x1c, 1	; 28
    18c0:	fe cf       	rjmp	.-4      	; 0x18be
    18c2:	80 93 57 00 	sts	0x0057, r24
    18c6:	e8 95       	spm
    18c8:	07 b6       	in	r0, 0x37	; 55
    18ca:	06 fc       	sbrc	r0, 6
    18cc:	f5 cf       	rjmp	.-22     	; 0x18b8

	//	填充缓冲页
    for(i = 0; i < PAGE_SIZE; i += 2)
    18ce:	c0 e0       	ldi	r28, 0x00	; 0
    18d0:	61 e0       	ldi	r22, 0x01	; 1
        boot_page_fill((unsigned long)i,*((uint *)(g_aPageTemp +i)));
    18d2:	07 b6       	in	r0, 0x37	; 55
    18d4:	00 fc       	sbrc	r0, 0
    18d6:	fd cf       	rjmp	.-6      	; 0x18d2
    18d8:	e1 99       	sbic	0x1c, 1	; 28
    18da:	fe cf       	rjmp	.-4      	; 0x18d8
    18dc:	8c 2f       	mov	r24, r28
    18de:	99 27       	eor	r25, r25
    18e0:	fc 01       	movw	r30, r24
    18e2:	ec 59       	subi	r30, 0x9C	; 156
    18e4:	ff 4f       	sbci	r31, 0xFF	; 255
    18e6:	20 81       	ld	r18, Z
    18e8:	31 81       	ldd	r19, Z+1	; 0x01
    18ea:	09 01       	movw	r0, r18
    18ec:	fc 01       	movw	r30, r24
    18ee:	60 93 57 00 	sts	0x0057, r22
    18f2:	e8 95       	spm
    18f4:	11 24       	eor	r1, r1
    18f6:	ce 5f       	subi	r28, 0xFE	; 254
    18f8:	c0 34       	cpi	r28, 0x40	; 64
    18fa:	58 f3       	brcs	.-42     	; 0x18d2

    //	页写入操作
    boot_page_write(g_wPageIndex<<6);
    18fc:	07 b6       	in	r0, 0x37	; 55
    18fe:	00 fc       	sbrc	r0, 0
    1900:	fd cf       	rjmp	.-6      	; 0x18fc
    1902:	e1 99       	sbic	0x1c, 1	; 28
    1904:	fe cf       	rjmp	.-4      	; 0x1902
    1906:	25 e0       	ldi	r18, 0x05	; 5
    1908:	ca 01       	movw	r24, r20
    190a:	36 e0       	ldi	r19, 0x06	; 6
    190c:	88 0f       	add	r24, r24
    190e:	99 1f       	adc	r25, r25
    1910:	3a 95       	dec	r19
    1912:	e1 f7       	brne	.-8      	; 0x190c
    1914:	fc 01       	movw	r30, r24
    1916:	20 93 57 00 	sts	0x0057, r18
    191a:	e8 95       	spm
    while(boot_rww_busy())
        boot_rww_enable();
    191c:	07 b6       	in	r0, 0x37	; 55
    191e:	06 fe       	sbrs	r0, 6
    1920:	0c c0       	rjmp	.+24     	; 0x193a
    1922:	81 e1       	ldi	r24, 0x11	; 17
    1924:	07 b6       	in	r0, 0x37	; 55
    1926:	00 fc       	sbrc	r0, 0
    1928:	fd cf       	rjmp	.-6      	; 0x1924
    192a:	e1 99       	sbic	0x1c, 1	; 28
    192c:	fe cf       	rjmp	.-4      	; 0x192a
    192e:	80 93 57 00 	sts	0x0057, r24
    1932:	e8 95       	spm
    1934:	07 b6       	in	r0, 0x37	; 55
    1936:	06 fc       	sbrc	r0, 6
    1938:	f5 cf       	rjmp	.-22     	; 0x1924
    
    g_wPageIndex++;
    193a:	4f 5f       	subi	r20, 0xFF	; 255
    193c:	5f 4f       	sbci	r21, 0xFF	; 255
    193e:	50 93 63 00 	sts	0x0063, r21
    1942:	40 93 62 00 	sts	0x0062, r20
    1946:	cf 91       	pop	r28
    1948:	1f 91       	pop	r17
    194a:	0f 91       	pop	r16
    194c:	08 95       	ret

0000194e <ReadPage>:
}

void ReadPage(void)
{
    194e:	1f 93       	push	r17
    1950:	cf 93       	push	r28
    1952:	df 93       	push	r29
    1954:	c0 e0       	ldi	r28, 0x00	; 0
    1956:	d0 e0       	ldi	r29, 0x00	; 0
    1958:	1f e3       	ldi	r17, 0x3F	; 63
    uchar i;
    
    for(i=0;i<PAGE_SIZE;i++)
    	uart_putc(pgm_read_byte(i+(g_wPageIndex*PAGE_SIZE)));
    195a:	e0 91 62 00 	lds	r30, 0x0062
    195e:	f0 91 63 00 	lds	r31, 0x0063
    1962:	76 e0       	ldi	r23, 0x06	; 6
    1964:	ee 0f       	add	r30, r30
    1966:	ff 1f       	adc	r31, r31
    1968:	7a 95       	dec	r23
    196a:	e1 f7       	brne	.-8      	; 0x1964
    196c:	ec 0f       	add	r30, r28
    196e:	fd 1f       	adc	r31, r29
    1970:	84 91       	lpm	r24, Z
    1972:	74 df       	rcall	.-280    	; 0x185c
    1974:	11 50       	subi	r17, 0x01	; 1
    1976:	21 96       	adiw	r28, 0x01	; 1
    1978:	17 ff       	sbrs	r17, 7
    197a:	ef cf       	rjmp	.-34     	; 0x195a

	g_wPageIndex++;
    197c:	80 91 62 00 	lds	r24, 0x0062
    1980:	90 91 63 00 	lds	r25, 0x0063
    1984:	01 96       	adiw	r24, 0x01	; 1
    1986:	90 93 63 00 	sts	0x0063, r25
    198a:	80 93 62 00 	sts	0x0062, r24
    198e:	df 91       	pop	r29
    1990:	cf 91       	pop	r28
    1992:	1f 91       	pop	r17
    1994:	08 95       	ret

00001996 <main>:
}

int  main(void) 
{
    1996:	cf e5       	ldi	r28, 0x5F	; 95
    1998:	d4 e0       	ldi	r29, 0x04	; 4
    199a:	de bf       	out	0x3e, r29	; 62
    199c:	cd bf       	out	0x3d, r28	; 61
	uchar tmp;

	//uart init
	UBRRH=0;
    199e:	10 bc       	out	0x20, r1	; 32
	UBRRL=25;//9600 baud 6MHz:38  4MHz:25
    19a0:	89 e1       	ldi	r24, 0x19	; 25
    19a2:	89 b9       	out	0x09, r24	; 9
	UCSRB=(1<<RXEN)|(1<<TXEN);
    19a4:	88 e1       	ldi	r24, 0x18	; 24
    19a6:	8a b9       	out	0x0a, r24	; 10
	
	while(1)
	{
		tmp=uart_getc();//recv command
    19a8:	5d df       	rcall	.-326    	; 0x1864
		
		
		switch(tmp)
    19aa:	99 27       	eor	r25, r25
    19ac:	8f 3a       	cpi	r24, 0xAF	; 175
    19ae:	91 05       	cpc	r25, r1
    19b0:	01 f1       	breq	.+64     	; 0x19f2
    19b2:	80 3b       	cpi	r24, 0xB0	; 176
    19b4:	91 05       	cpc	r25, r1
    19b6:	3c f4       	brge	.+14     	; 0x19c6
    19b8:	80 3a       	cpi	r24, 0xA0	; 160
    19ba:	91 05       	cpc	r25, r1
    19bc:	e1 f0       	breq	.+56     	; 0x19f6
    19be:	8a 3a       	cpi	r24, 0xAA	; 170
    19c0:	91 05       	cpc	r25, r1
    19c2:	d9 f0       	breq	.+54     	; 0x19fa
    19c4:	f1 cf       	rjmp	.-30     	; 0x19a8
    19c6:	80 3b       	cpi	r24, 0xB0	; 176
    19c8:	91 05       	cpc	r25, r1
    19ca:	21 f0       	breq	.+8      	; 0x19d4
    19cc:	8f 3b       	cpi	r24, 0xBF	; 191
    19ce:	91 05       	cpc	r25, r1
    19d0:	51 f0       	breq	.+20     	; 0x19e6
    19d2:	ea cf       	rjmp	.-44     	; 0x19a8
		{
			case 0xB0://设置页地址
				g_wPageIndex=uart_getc();
    19d4:	47 df       	rcall	.-370    	; 0x1864
    19d6:	99 27       	eor	r25, r25
    19d8:	90 93 63 00 	sts	0x0063, r25
    19dc:	80 93 62 00 	sts	0x0062, r24
				uart_putc(g_wPageIndex);
    19e0:	80 91 62 00 	lds	r24, 0x0062
    19e4:	0b c0       	rjmp	.+22     	; 0x19fc
				break;
				
			case 0xBF:
				reset();
    19e6:	e0 91 60 00 	lds	r30, 0x0060
    19ea:	f0 91 61 00 	lds	r31, 0x0061
    19ee:	09 95       	icall
				break;
    19f0:	db cf       	rjmp	.-74     	; 0x19a8
				
			case 0xAF://写一页
				WritePage();
    19f2:	3d df       	rcall	.-390    	; 0x186e
    19f4:	02 c0       	rjmp	.+4      	; 0x19fa
				uart_putc(UART_ACK);	//应答
				break;
				
			case 0xA0://读一页
				ReadPage();
    19f6:	ab df       	rcall	.-170    	; 0x194e
				break;
    19f8:	d7 cf       	rjmp	.-82     	; 0x19a8
				
			case UART_ACK:
				uart_putc(UART_ACK);
    19fa:	8a ea       	ldi	r24, 0xAA	; 170
    19fc:	2f df       	rcall	.-418    	; 0x185c
				break;
    19fe:	d4 cf       	rjmp	.-88     	; 0x19a8

⌨️ 快捷键说明

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