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

📄 main.lss

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

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         00000156  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00800060  00000156  000001ea  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000024  00800060  00800060  000001ea  2**0
                  ALLOC
  3 .noinit       00000000  00800084  00800084  000001ea  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  000001ea  2**0
                  CONTENTS
  5 .stab         0000042c  00000000  00000000  000001ec  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      000005d9  00000000  00000000  00000618  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0a c0       	rjmp	.+20     	; 0x16
   2:	22 c0       	rjmp	.+68     	; 0x48
   4:	21 c0       	rjmp	.+66     	; 0x48
   6:	20 c0       	rjmp	.+64     	; 0x48
   8:	1f c0       	rjmp	.+62     	; 0x48
   a:	1e c0       	rjmp	.+60     	; 0x48
   c:	1d c0       	rjmp	.+58     	; 0x48
   e:	1d c0       	rjmp	.+58     	; 0x4a
  10:	1b c0       	rjmp	.+54     	; 0x48
  12:	41 c0       	rjmp	.+130    	; 0x96
  14:	19 c0       	rjmp	.+50     	; 0x48

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

0000001e <__do_copy_data>:
  1e:	10 e0       	ldi	r17, 0x00	; 0
  20:	a0 e6       	ldi	r26, 0x60	; 96
  22:	b0 e0       	ldi	r27, 0x00	; 0
  24:	e6 e5       	ldi	r30, 0x56	; 86
  26:	f1 e0       	ldi	r31, 0x01	; 1
  28:	03 c0       	rjmp	.+6      	; 0x30

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

00000030 <.do_copy_data_start>:
  30:	a0 36       	cpi	r26, 0x60	; 96
  32:	b1 07       	cpc	r27, r17
  34:	d1 f7       	brne	.-12     	; 0x2a

00000036 <__do_clear_bss>:
  36:	10 e0       	ldi	r17, 0x00	; 0
  38:	a0 e6       	ldi	r26, 0x60	; 96
  3a:	b0 e0       	ldi	r27, 0x00	; 0
  3c:	01 c0       	rjmp	.+2      	; 0x40

0000003e <.do_clear_bss_loop>:
  3e:	1d 92       	st	X+, r1

00000040 <.do_clear_bss_start>:
  40:	a4 38       	cpi	r26, 0x84	; 132
  42:	b1 07       	cpc	r27, r17
  44:	e1 f7       	brne	.-8      	; 0x3e
  46:	6b c0       	rjmp	.+214    	; 0x11e

00000048 <__bad_interrupt>:
  48:	db cf       	rjmp	.-74     	; 0x0

0000004a <__vector_7>:
uchar g_aRecvBuf[16];	//接收数据缓冲区

//接收中断
SIGNAL(SIG_UART_RECV)
{
  4a:	1f 92       	push	r1
  4c:	0f 92       	push	r0
  4e:	0f b6       	in	r0, 0x3f	; 63
  50:	0f 92       	push	r0
  52:	11 24       	eor	r1, r1
  54:	2f 93       	push	r18
  56:	8f 93       	push	r24
  58:	9f 93       	push	r25
  5a:	ef 93       	push	r30
  5c:	ff 93       	push	r31
	uchar c=UDR; 
  5e:	2c b1       	in	r18, 0x0c	; 12
	if(g_bRxdLen>0)
  60:	90 91 60 00 	lds	r25, 0x0060
  64:	99 23       	and	r25, r25
  66:	69 f0       	breq	.+26     	; 0x82
	{
		g_aRecvBuf[g_bRxdPos++]=c;
  68:	80 91 61 00 	lds	r24, 0x0061
  6c:	e8 2f       	mov	r30, r24
  6e:	ff 27       	eor	r31, r31
  70:	ec 59       	subi	r30, 0x9C	; 156
  72:	ff 4f       	sbci	r31, 0xFF	; 255
  74:	20 83       	st	Z, r18
  76:	8f 5f       	subi	r24, 0xFF	; 255
  78:	80 93 61 00 	sts	0x0061, r24
		g_bRxdLen--;
  7c:	91 50       	subi	r25, 0x01	; 1
  7e:	90 93 60 00 	sts	0x0060, r25
  82:	ff 91       	pop	r31
  84:	ef 91       	pop	r30
  86:	9f 91       	pop	r25
  88:	8f 91       	pop	r24
  8a:	2f 91       	pop	r18
  8c:	0f 90       	pop	r0
  8e:	0f be       	out	0x3f, r0	; 63
  90:	0f 90       	pop	r0
  92:	1f 90       	pop	r1
  94:	18 95       	reti

00000096 <__vector_9>:
	}

}
//发送中断
SIGNAL (SIG_UART_TRANS)
{
  96:	1f 92       	push	r1
  98:	0f 92       	push	r0
  9a:	0f b6       	in	r0, 0x3f	; 63
  9c:	0f 92       	push	r0
  9e:	11 24       	eor	r1, r1
  a0:	8f 93       	push	r24
  a2:	ef 93       	push	r30
  a4:	ff 93       	push	r31
	if(--g_bTxdLen>0)
  a6:	80 91 62 00 	lds	r24, 0x0062
  aa:	81 50       	subi	r24, 0x01	; 1
  ac:	80 93 62 00 	sts	0x0062, r24
  b0:	88 23       	and	r24, r24
  b2:	59 f0       	breq	.+22     	; 0xca
		UDR=g_aSendBuf[++g_bTxdPos];
  b4:	80 91 63 00 	lds	r24, 0x0063
  b8:	8f 5f       	subi	r24, 0xFF	; 255
  ba:	80 93 63 00 	sts	0x0063, r24
  be:	e8 2f       	mov	r30, r24
  c0:	ff 27       	eor	r31, r31
  c2:	ec 58       	subi	r30, 0x8C	; 140
  c4:	ff 4f       	sbci	r31, 0xFF	; 255
  c6:	80 81       	ld	r24, Z
  c8:	8c b9       	out	0x0c, r24	; 12
  ca:	ff 91       	pop	r31
  cc:	ef 91       	pop	r30
  ce:	8f 91       	pop	r24
  d0:	0f 90       	pop	r0
  d2:	0f be       	out	0x3f, r0	; 63
  d4:	0f 90       	pop	r0
  d6:	1f 90       	pop	r1
  d8:	18 95       	reti

000000da <IsRecvComplete>:
}

//是否接收完成
uchar IsRecvComplete(void)
{
	return g_bRxdLen==0;
  da:	20 e0       	ldi	r18, 0x00	; 0
  dc:	30 e0       	ldi	r19, 0x00	; 0
  de:	80 91 60 00 	lds	r24, 0x0060
  e2:	88 23       	and	r24, r24
  e4:	11 f4       	brne	.+4      	; 0xea
  e6:	21 e0       	ldi	r18, 0x01	; 1
  e8:	30 e0       	ldi	r19, 0x00	; 0
}
  ea:	93 2f       	mov	r25, r19
  ec:	82 2f       	mov	r24, r18
  ee:	08 95       	ret

000000f0 <SendToUart>:

//从发送缓冲区发送指定长度数据
void SendToUart(uchar size)
{
  f0:	98 2f       	mov	r25, r24
	g_bTxdPos=0;
  f2:	10 92 63 00 	sts	0x0063, r1
	g_bTxdLen=size;
  f6:	80 93 62 00 	sts	0x0062, r24
	UDR=g_aSendBuf[0];
  fa:	80 91 74 00 	lds	r24, 0x0074
  fe:	8c b9       	out	0x0c, r24	; 12
	while(g_bTxdLen>0);
 100:	99 23       	and	r25, r25
 102:	f1 f7       	brne	.-4      	; 0x100
 104:	08 95       	ret

00000106 <RecvFromUart>:
}

//接收指定长度数据到接收缓冲区
void RecvFromUart(uchar size,uchar bwait)
{
 106:	98 2f       	mov	r25, r24
	g_bRxdPos=0;
 108:	10 92 61 00 	sts	0x0061, r1
	g_bRxdLen=size;
 10c:	90 93 60 00 	sts	0x0060, r25
	if(bwait)
 110:	66 23       	and	r22, r22
 112:	19 f0       	breq	.+6      	; 0x11a
 114:	89 2f       	mov	r24, r25
		while(g_bRxdLen>0);
 116:	88 23       	and	r24, r24
 118:	f1 f7       	brne	.-4      	; 0x116
 11a:	08 95       	ret
 11c:	08 95       	ret

0000011e <main>:
}

int  main( void )
{
 11e:	cf ed       	ldi	r28, 0xDF	; 223
 120:	d0 e0       	ldi	r29, 0x00	; 0
 122:	de bf       	out	0x3e, r29	; 62
 124:	cd bf       	out	0x3d, r28	; 61
	uchar i;

    //uart初始化
 	UCR=(1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);	
 126:	88 ed       	ldi	r24, 0xD8	; 216
 128:	8a b9       	out	0x0a, r24	; 10
	UBRR=38;		//UBRR=FCK/(9600*16) -1   
 12a:	86 e2       	ldi	r24, 0x26	; 38
 12c:	89 b9       	out	0x09, r24	; 9

	sei();
 12e:	78 94       	sei
	
	while(1)
	{
		//异步接收16字节数据
		RecvFromUart(16,0);
 130:	60 e0       	ldi	r22, 0x00	; 0
 132:	80 e1       	ldi	r24, 0x10	; 16
 134:	e8 df       	rcall	.-48     	; 0x106

		//等待接收完成
		while(!IsRecvComplete());
 136:	d1 df       	rcall	.-94     	; 0xda
 138:	88 23       	and	r24, r24
 13a:	e9 f3       	breq	.-6      	; 0x136
 13c:	a4 e7       	ldi	r26, 0x74	; 116
 13e:	b0 e0       	ldi	r27, 0x00	; 0
 140:	e4 e6       	ldi	r30, 0x64	; 100
 142:	f0 e0       	ldi	r31, 0x00	; 0
 144:	9f e0       	ldi	r25, 0x0F	; 15
		
		//将接收到的数据复制到发送缓冲区
		for(i=0;i<16;i++)
			g_aSendBuf[i]=g_aRecvBuf[i];
 146:	81 91       	ld	r24, Z+
 148:	8d 93       	st	X+, r24
 14a:	91 50       	subi	r25, 0x01	; 1
 14c:	97 ff       	sbrs	r25, 7
 14e:	fb cf       	rjmp	.-10     	; 0x146
		
		//发送回接收到的数据
		SendToUart(16);
 150:	80 e1       	ldi	r24, 0x10	; 16
 152:	ce df       	rcall	.-100    	; 0xf0
 154:	ed cf       	rjmp	.-38     	; 0x130

⌨️ 快捷键说明

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