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

📄 main.lss

📁 单片机的串口通信协议
💻 LSS
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000001ac  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .bss          0000000d  00800060  000001ac  00000220  2**0
                  ALLOC
  2 .debug_aranges 00000020  00000000  00000000  00000220  2**0
                  CONTENTS, READONLY, DEBUGGING
  3 .debug_pubnames 000000c9  00000000  00000000  00000240  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_info   000002e4  00000000  00000000  00000309  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_abbrev 00000195  00000000  00000000  000005ed  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_line   000002a0  00000000  00000000  00000782  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_frame  000000a0  00000000  00000000  00000a24  2**2
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_str    00000103  00000000  00000000  00000ac4  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_loc    00000080  00000000  00000000  00000bc7  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	12 c0       	rjmp	.+36     	; 0x26 <__ctors_end>
   2:	2c c0       	rjmp	.+88     	; 0x5c <__bad_interrupt>
   4:	2b c0       	rjmp	.+86     	; 0x5c <__bad_interrupt>
   6:	2a c0       	rjmp	.+84     	; 0x5c <__bad_interrupt>
   8:	29 c0       	rjmp	.+82     	; 0x5c <__bad_interrupt>
   a:	28 c0       	rjmp	.+80     	; 0x5c <__bad_interrupt>
   c:	27 c0       	rjmp	.+78     	; 0x5c <__bad_interrupt>
   e:	26 c0       	rjmp	.+76     	; 0x5c <__bad_interrupt>
  10:	25 c0       	rjmp	.+74     	; 0x5c <__bad_interrupt>
  12:	25 c0       	rjmp	.+74     	; 0x5e <__vector_9>
  14:	23 c0       	rjmp	.+70     	; 0x5c <__bad_interrupt>
  16:	55 c0       	rjmp	.+170    	; 0xc2 <__vector_11>
  18:	21 c0       	rjmp	.+66     	; 0x5c <__bad_interrupt>
  1a:	7c c0       	rjmp	.+248    	; 0x114 <__vector_13>
  1c:	1f c0       	rjmp	.+62     	; 0x5c <__bad_interrupt>
  1e:	1e c0       	rjmp	.+60     	; 0x5c <__bad_interrupt>
  20:	1d c0       	rjmp	.+58     	; 0x5c <__bad_interrupt>
  22:	1c c0       	rjmp	.+56     	; 0x5c <__bad_interrupt>
  24:	1b c0       	rjmp	.+54     	; 0x5c <__bad_interrupt>

00000026 <__ctors_end>:
  26:	11 24       	eor	r1, r1
  28:	1f be       	out	0x3f, r1	; 63
  2a:	cf e5       	ldi	r28, 0x5F	; 95
  2c:	d4 e0       	ldi	r29, 0x04	; 4
  2e:	de bf       	out	0x3e, r29	; 62
  30:	cd bf       	out	0x3d, r28	; 61

00000032 <__do_copy_data>:
  32:	10 e0       	ldi	r17, 0x00	; 0
  34:	a0 e6       	ldi	r26, 0x60	; 96
  36:	b0 e0       	ldi	r27, 0x00	; 0
  38:	ec ea       	ldi	r30, 0xAC	; 172
  3a:	f1 e0       	ldi	r31, 0x01	; 1
  3c:	02 c0       	rjmp	.+4      	; 0x42 <.do_copy_data_start>

0000003e <.do_copy_data_loop>:
  3e:	05 90       	lpm	r0, Z+
  40:	0d 92       	st	X+, r0

00000042 <.do_copy_data_start>:
  42:	a0 36       	cpi	r26, 0x60	; 96
  44:	b1 07       	cpc	r27, r17
  46:	d9 f7       	brne	.-10     	; 0x3e <.do_copy_data_loop>

00000048 <__do_clear_bss>:
  48:	10 e0       	ldi	r17, 0x00	; 0
  4a:	a0 e6       	ldi	r26, 0x60	; 96
  4c:	b0 e0       	ldi	r27, 0x00	; 0
  4e:	01 c0       	rjmp	.+2      	; 0x52 <.do_clear_bss_start>

00000050 <.do_clear_bss_loop>:
  50:	1d 92       	st	X+, r1

00000052 <.do_clear_bss_start>:
  52:	ad 36       	cpi	r26, 0x6D	; 109
  54:	b1 07       	cpc	r27, r17
  56:	e1 f7       	brne	.-8      	; 0x50 <.do_clear_bss_loop>
  58:	7e d0       	rcall	.+252    	; 0x156 <main>
  5a:	a6 c0       	rjmp	.+332    	; 0x1a8 <_exit>

0000005c <__bad_interrupt>:
  5c:	d1 cf       	rjmp	.-94     	; 0x0 <__vectors>

0000005e <__vector_9>:
volatile unsigned char recestate=0;   // 0--接收空闲;1--正在接收;3--总超时; 4--头超时;5--间隔超时;6--接收完成(字节超时)
volatile unsigned char recest_time=0;   //接收时间,1次为0.5个字节,对于9600波特率的。

//********************定时器。0.3个字节定时
SIGNAL (SIG_OVERFLOW0)    //64分频,4计数
{
  5e:	1f 92       	push	r1
  60:	0f 92       	push	r0
  62:	0f b6       	in	r0, 0x3f	; 63
  64:	0f 92       	push	r0
  66:	11 24       	eor	r1, r1
  68:	8f 93       	push	r24
  recest_time++;
  6a:	80 91 62 00 	lds	r24, 0x0062
  6e:	8f 5f       	subi	r24, 0xFF	; 255
  70:	80 93 62 00 	sts	0x0062, r24
 if(recest_time<127)
  74:	80 91 62 00 	lds	r24, 0x0062
  78:	8f 37       	cpi	r24, 0x7F	; 127
  7a:	08 f4       	brcc	.+2      	; 0x7e <__vector_9+0x20>
  PORTD|=(1<<PD3);
  7c:	93 9a       	sbi	0x12, 3	; 18
  if(recest_time>124)
  7e:	80 91 62 00 	lds	r24, 0x0062
  82:	8d 37       	cpi	r24, 0x7D	; 125
  84:	08 f0       	brcs	.+2      	; 0x88 <__vector_9+0x2a>
  PORTD&=~(1<<PD3);
  86:	93 98       	cbi	0x12, 3	; 18
  if(recest_time>254)
  88:	80 91 62 00 	lds	r24, 0x0062
  8c:	8f 3f       	cpi	r24, 0xFF	; 255
  8e:	11 f4       	brne	.+4      	; 0x94 <__vector_9+0x36>
  recest_time=0;
  90:	10 92 62 00 	sts	0x0062, r1
}
  94:	8f 91       	pop	r24
  96:	0f 90       	pop	r0
  98:	0f be       	out	0x3f, r0	; 63
  9a:	0f 90       	pop	r0
  9c:	1f 90       	pop	r1
  9e:	18 95       	reti

000000a0 <USART_Init>:

//~~~~~~~~~~~~~~~~~设置串口的参数~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void USART_Init( unsigned int baud )
{
  a0:	10 bc       	out	0x20, r1	; 32
/* 设置波特率9600*/
UBRRH = 0;
UBRRL = 47;
  a2:	8f e2       	ldi	r24, 0x2F	; 47
  a4:	89 b9       	out	0x09, r24	; 9
/* 接收器与发送器使能*/
UCSRB = (1<<TXCIE)|(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
  a6:	88 ed       	ldi	r24, 0xD8	; 216
  a8:	8a b9       	out	0x0a, r24	; 10
/* 设置帧格式: 8 个数据位, 2 个停止位*/
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
  aa:	8e e8       	ldi	r24, 0x8E	; 142
  ac:	80 bd       	out	0x20, r24	; 32
}
  ae:	08 95       	ret

000000b0 <USART_Transmit>:
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


void USART_Transmit( unsigned char data )
{PORTD|=(1<<PD2);   //485输出使能
  b0:	92 9a       	sbi	0x12, 2	; 18
/* 等待发送缓冲器为空 */
while ( !( UCSRA & (1<<UDRE)) )
  b2:	5d 9b       	sbis	0x0b, 5	; 11
  b4:	fe cf       	rjmp	.-4      	; 0xb2 <USART_Transmit+0x2>
;
/* 将数据放入缓冲器,发送数据 */
UDR = data;
  b6:	8c b9       	out	0x0c, r24	; 12
}
  b8:	08 95       	ret

000000ba <USART_Receive>:



unsigned char USART_Receive( void )
{
  ba:	5f 9b       	sbis	0x0b, 7	; 11
  bc:	fe cf       	rjmp	.-4      	; 0xba <USART_Receive>
/* 等待接收数据*/
while ( !(UCSRA & (1<<RXC)) )
;
/* 从缓冲器中获取并返回数据*/
return UDR;
  be:	8c b1       	in	r24, 0x0c	; 12
}
  c0:	08 95       	ret

000000c2 <__vector_11>:



SIGNAL (SIG_UART_RECV)  //接收中断
 { 
  c2:	1f 92       	push	r1
  c4:	0f 92       	push	r0
  c6:	0f b6       	in	r0, 0x3f	; 63
  c8:	0f 92       	push	r0
  ca:	11 24       	eor	r1, r1
  cc:	8f 93       	push	r24
  ce:	ef 93       	push	r30
  d0:	ff 93       	push	r31
   if(recestlen<6)     //设定接收数据的长度
  d2:	80 91 60 00 	lds	r24, 0x0060
  d6:	86 30       	cpi	r24, 0x06	; 6
  d8:	a8 f4       	brcc	.+42     	; 0x104 <__vector_11+0x42>
   {
     bm[recestlen]=UDR;  //接收数据
  da:	e0 91 60 00 	lds	r30, 0x0060
  de:	f0 e0       	ldi	r31, 0x00	; 0
  e0:	8c b1       	in	r24, 0x0c	; 12
  e2:	ed 59       	subi	r30, 0x9D	; 157
  e4:	ff 4f       	sbci	r31, 0xFF	; 255
  e6:	80 83       	st	Z, r24
     recestlen++;        
  e8:	80 91 60 00 	lds	r24, 0x0060
  ec:	8f 5f       	subi	r24, 0xFF	; 255
  ee:	80 93 60 00 	sts	0x0060, r24
    if(recestlen>=6)
  f2:	80 91 60 00 	lds	r24, 0x0060
  f6:	86 30       	cpi	r24, 0x06	; 6
  f8:	28 f0       	brcs	.+10     	; 0x104 <__vector_11+0x42>
      {
	  recestlen=0;
  fa:	10 92 60 00 	sts	0x0060, r1
	  UCSRB &= ~( (1<<RXCIE) | (1<<RXEN) );   //关闭接收使能
  fe:	8a b1       	in	r24, 0x0a	; 10
 100:	8f 76       	andi	r24, 0x6F	; 111
 102:	8a b9       	out	0x0a, r24	; 10
	  }
   }
 }   
 104:	ff 91       	pop	r31
 106:	ef 91       	pop	r30
 108:	8f 91       	pop	r24
 10a:	0f 90       	pop	r0
 10c:	0f be       	out	0x3f, r0	; 63
 10e:	0f 90       	pop	r0
 110:	1f 90       	pop	r1
 112:	18 95       	reti

00000114 <__vector_13>:
//****************************************************************************
SIGNAL (SIG_UART_TRANS) //发送结束中断
 {PORTD&=~(1<<PD2); }    //485输入使能
 114:	1f 92       	push	r1
 116:	0f 92       	push	r0
 118:	0f b6       	in	r0, 0x3f	; 63
 11a:	0f 92       	push	r0
 11c:	11 24       	eor	r1, r1
 11e:	92 98       	cbi	0x12, 2	; 18
 120:	0f 90       	pop	r0
 122:	0f be       	out	0x3f, r0	; 63
 124:	0f 90       	pop	r0
 126:	1f 90       	pop	r1
 128:	18 95       	reti

0000012a <USART_send>:
//**************************************************************************** 
   //*p要发送的数据

⌨️ 快捷键说明

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