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

📄 main.lss

📁 AVR单片机软件模拟串口实现全双工的例子。
💻 LSS
📖 第 1 页 / 共 2 页
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000003b8  00000000  00000000  00000094  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         0000000e  00800060  000003b8  0000044c  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          0000002e  0080006e  0080006e  0000045a  2**0
                  ALLOC
  3 .stab         0000036c  00000000  00000000  0000045c  2**2
                  CONTENTS, READONLY, DEBUGGING
  4 .stabstr      00000084  00000000  00000000  000007c8  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_aranges 00000060  00000000  00000000  0000084c  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_pubnames 0000018e  00000000  00000000  000008ac  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_info   00000681  00000000  00000000  00000a3a  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_abbrev 00000316  00000000  00000000  000010bb  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_line   000005cc  00000000  00000000  000013d1  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_frame  00000140  00000000  00000000  0000199d  2**0
                  CONTENTS, READONLY, DEBUGGING
 11 .debug_str    000002e8  00000000  00000000  00001add  2**0
                  CONTENTS, READONLY, DEBUGGING
 12 .debug_loc    000000e5  00000000  00000000  00001dc5  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	55 c0       	rjmp	.+170    	; 0xac <__ctors_end>
   2:	6e c0       	rjmp	.+220    	; 0xe0 <__bad_interrupt>
   4:	6d c0       	rjmp	.+218    	; 0xe0 <__bad_interrupt>
   6:	6c c0       	rjmp	.+216    	; 0xe0 <__bad_interrupt>
   8:	6b c0       	rjmp	.+214    	; 0xe0 <__bad_interrupt>
   a:	6a c0       	rjmp	.+212    	; 0xe0 <__bad_interrupt>
   c:	69 c0       	rjmp	.+210    	; 0xe0 <__bad_interrupt>
   e:	68 c0       	rjmp	.+208    	; 0xe0 <__bad_interrupt>
  10:	67 c0       	rjmp	.+206    	; 0xe0 <__bad_interrupt>
  12:	ae c0       	rjmp	.+348    	; 0x170 <__vector_9>
  14:	65 c0       	rjmp	.+202    	; 0xe0 <__bad_interrupt>
  16:	64 c0       	rjmp	.+200    	; 0xe0 <__bad_interrupt>
  18:	63 c0       	rjmp	.+198    	; 0xe0 <__bad_interrupt>
  1a:	62 c0       	rjmp	.+196    	; 0xe0 <__bad_interrupt>
  1c:	61 c0       	rjmp	.+194    	; 0xe0 <__bad_interrupt>
  1e:	60 c0       	rjmp	.+192    	; 0xe0 <__bad_interrupt>
  20:	5f c0       	rjmp	.+190    	; 0xe0 <__bad_interrupt>
  22:	5e c0       	rjmp	.+188    	; 0xe0 <__bad_interrupt>
  24:	5d c0       	rjmp	.+186    	; 0xe0 <__bad_interrupt>

00000026 <__c.1394>:
  26:	67 65 6e 65 72 69 63 20 73 6f 66 74 75 61 72 74     generic softuart
  36:	20 64 72 69 76 65 72 20 63 6f 64 65 20 62 79 20      driver code by 
  46:	43 6f 6c 69 6e 20 47 69 74 74 69 6e 73 0d 0a 00     Colin Gittins...

00000056 <__c.1392>:
  56:	0d 0a 53 6f 66 74 75 61 72 74 20 44 65 6d 6f 2d     ..Softuart Demo-
  66:	41 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 00           Application...

00000074 <pstring.1390>:
  74:	61 64 61 70 74 65 64 20 66 6f 72 20 41 74 6d 65     adapted for Atme
  84:	6c 20 41 56 52 20 61 6e 64 20 74 68 69 73 20 64     l AVR and this d
  94:	65 6d 6f 20 62 79 20 4d 61 72 74 69 6e 20 54 68     emo by Martin Th
  a4:	6f 6d 61 73 0d 0a 00 00                             omas....

000000ac <__ctors_end>:
  ac:	11 24       	eor	r1, r1
  ae:	1f be       	out	0x3f, r1	; 63
  b0:	cf e5       	ldi	r28, 0x5F	; 95
  b2:	d4 e0       	ldi	r29, 0x04	; 4
  b4:	de bf       	out	0x3e, r29	; 62
  b6:	cd bf       	out	0x3d, r28	; 61

000000b8 <__do_copy_data>:
  b8:	10 e0       	ldi	r17, 0x00	; 0
  ba:	a0 e6       	ldi	r26, 0x60	; 96
  bc:	b0 e0       	ldi	r27, 0x00	; 0
  be:	e8 eb       	ldi	r30, 0xB8	; 184
  c0:	f3 e0       	ldi	r31, 0x03	; 3
  c2:	02 c0       	rjmp	.+4      	; 0xc8 <.do_copy_data_start>

000000c4 <.do_copy_data_loop>:
  c4:	05 90       	lpm	r0, Z+
  c6:	0d 92       	st	X+, r0

000000c8 <.do_copy_data_start>:
  c8:	ae 36       	cpi	r26, 0x6E	; 110
  ca:	b1 07       	cpc	r27, r17
  cc:	d9 f7       	brne	.-10     	; 0xc4 <.do_copy_data_loop>

000000ce <__do_clear_bss>:
  ce:	10 e0       	ldi	r17, 0x00	; 0
  d0:	ae e6       	ldi	r26, 0x6E	; 110
  d2:	b0 e0       	ldi	r27, 0x00	; 0
  d4:	01 c0       	rjmp	.+2      	; 0xd8 <.do_clear_bss_start>

000000d6 <.do_clear_bss_loop>:
  d6:	1d 92       	st	X+, r1

000000d8 <.do_clear_bss_start>:
  d8:	ac 39       	cpi	r26, 0x9C	; 156
  da:	b1 07       	cpc	r27, r17
  dc:	e1 f7       	brne	.-8      	; 0xd6 <.do_clear_bss_loop>
  de:	0d c0       	rjmp	.+26     	; 0xfa <main>

000000e0 <__bad_interrupt>:
  e0:	8f cf       	rjmp	.-226    	; 0x0 <__vectors>

000000e2 <delay_ms>:

unsigned char data_buf[8]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
//------------------------------------------------------------------------------
void delay_ms(unsigned int n)
{
  e2:	08 c0       	rjmp	.+16     	; 0xf4 <delay_ms+0x12>
	unsigned int zaehler;
	
	while (n) 
	{   
	    wdt_reset(); //喂狗	
  e4:	a8 95       	wdr
  e6:	22 ec       	ldi	r18, 0xC2	; 194
  e8:	35 e0       	ldi	r19, 0x05	; 5
		zaehler = F_CPU / 5000;
		while (zaehler) 
		{
			asm volatile ("nop");
  ea:	00 00       	nop
			zaehler--;
  ec:	21 50       	subi	r18, 0x01	; 1
  ee:	30 40       	sbci	r19, 0x00	; 0
  f0:	e1 f7       	brne	.-8      	; 0xea <delay_ms+0x8>
		}
		n--;
  f2:	01 97       	sbiw	r24, 0x01	; 1
  f4:	00 97       	sbiw	r24, 0x00	; 0
  f6:	b1 f7       	brne	.-20     	; 0xe4 <delay_ms+0x2>
  f8:	08 95       	ret

000000fa <main>:
	}
}
//------------------------------------------------------------------------------
int main(void)
{
  fa:	0f 93       	push	r16
  fc:	1f 93       	push	r17
  fe:	cf 93       	push	r28
 100:	df 93       	push	r29
	char c,i;
	static const char pstring[] PROGMEM = 
		"adapted for Atmel AVR and this demo by Martin Thomas\r\n";
	unsigned short cnt = 0;
#if (F_CPU > 4000000UL)
#define CNTHALLO (unsigned int)(0xFFFF)
#else 
#define CNTHALLO (unsigned int)(0xFFFF/3)
#endif
    gpio_init();
 102:	48 d1       	rcall	.+656    	; 0x394 <gpio_init>
	softuart_init();
 104:	d1 d0       	rcall	.+418    	; 0x2a8 <softuart_init>
	wdt_enable(WDTO_1S); //看门狗使能1S(范围:15MS 30MS 60MS 120MS 250MS 500MS 1S 2S)
 106:	88 e1       	ldi	r24, 0x18	; 24
 108:	90 e0       	ldi	r25, 0x00	; 0
 10a:	2e e0       	ldi	r18, 0x0E	; 14
 10c:	0f b6       	in	r0, 0x3f	; 63
 10e:	f8 94       	cli
 110:	a8 95       	wdr
 112:	81 bd       	out	0x21, r24	; 33
 114:	0f be       	out	0x3f, r0	; 63
 116:	21 bd       	out	0x21, r18	; 33
	softuart_turn_rx_on(); /* redundant - on by default */
 118:	da d0       	rcall	.+436    	; 0x2ce <softuart_turn_rx_on>
	
	sei();
 11a:	78 94       	sei
	
	softuart_puts_P( "\r\nSoftuart Demo-Application\r\n" );    // "implicit" PSTR
 11c:	86 e5       	ldi	r24, 0x56	; 86
 11e:	90 e0       	ldi	r25, 0x00	; 0
 120:	2c d1       	rcall	.+600    	; 0x37a <softuart_puts_p>
	softuart_puts_p( PSTR("generic softuart driver code by Colin Gittins\r\n") ); // explicit PSTR
 122:	86 e2       	ldi	r24, 0x26	; 38
 124:	90 e0       	ldi	r25, 0x00	; 0
 126:	29 d1       	rcall	.+594    	; 0x37a <softuart_puts_p>
	softuart_puts_p( pstring ); // pstring defined with PROGMEM
 128:	84 e7       	ldi	r24, 0x74	; 116
 12a:	90 e0       	ldi	r25, 0x00	; 0
 12c:	26 d1       	rcall	.+588    	; 0x37a <softuart_puts_p>
	softuart_puts( "--\r\n" );  // string "from RAM"
 12e:	80 e6       	ldi	r24, 0x60	; 96
 130:	90 e0       	ldi	r25, 0x00	; 0
 132:	17 d1       	rcall	.+558    	; 0x362 <softuart_puts>
 134:	00 e0       	ldi	r16, 0x00	; 0
 136:	10 e0       	ldi	r17, 0x00	; 0

#ifdef WITH_STDIO_DEMO
	stdio_demo_func();
#endif
	
  while(1) 
	{
	
		if( softuart_kbhit()) 
 138:	e7 d0       	rcall	.+462    	; 0x308 <softuart_kbhit>
 13a:	88 23       	and	r24, r24
 13c:	49 f0       	breq	.+18     	; 0x150 <main+0x56>
 13e:	c5 e6       	ldi	r28, 0x65	; 101
 140:	d0 e0       	ldi	r29, 0x00	; 0
		 {
		  for(i=0;i<8;i++)
		   {
		    data_buf[i]=softuart_getchar();	
 142:	cc d0       	rcall	.+408    	; 0x2dc <softuart_getchar>
 144:	89 93       	st	Y+, r24
            wdt_reset(); //喂狗	  
 146:	a8 95       	wdr
 148:	80 e0       	ldi	r24, 0x00	; 0
 14a:	cd 36       	cpi	r28, 0x6D	; 109
 14c:	d8 07       	cpc	r29, r24
 14e:	c9 f7       	brne	.-14     	; 0x142 <main+0x48>
		   }
		  //c = softuart_getchar();
		  //softuart_putchar( '[' );
		  //softuart_putchar( c );
		  //softuart_putchar( ']' );
		 }

		cnt++;
 150:	0f 5f       	subi	r16, 0xFF	; 255
 152:	1f 4f       	sbci	r17, 0xFF	; 255
		if (cnt == CNTHALLO) 
 154:	8f ef       	ldi	r24, 0xFF	; 255
 156:	0f 3f       	cpi	r16, 0xFF	; 255
 158:	18 07       	cpc	r17, r24
 15a:	71 f7       	brne	.-36     	; 0x138 <main+0x3e>
		 {
		  cnt = 0;
		  wdt_reset(); //喂狗	
 15c:	a8 95       	wdr
		  //softuart_puts_P( " Hello " );
		  softuart_puts(data_buf);
 15e:	85 e6       	ldi	r24, 0x65	; 101
 160:	90 e0       	ldi	r25, 0x00	; 0
 162:	ff d0       	rcall	.+510    	; 0x362 <softuart_puts>
		  gpio_toggle_led(LED1);
 164:	82 e0       	ldi	r24, 0x02	; 2
 166:	24 d1       	rcall	.+584    	; 0x3b0 <gpio_toggle_led>
		  delay_ms(500);
 168:	84 ef       	ldi	r24, 0xF4	; 244
 16a:	91 e0       	ldi	r25, 0x01	; 1
 16c:	ba df       	rcall	.-140    	; 0xe2 <delay_ms>
 16e:	e2 cf       	rjmp	.-60     	; 0x134 <main+0x3a>

00000170 <__vector_9>:
#define get_rx_pin_status()    ( SOFTUART_RXPIN  & ( 1<<SOFTUART_RXBIT ) )

//T/C0中断
SIGNAL(SIG_OVERFLOW0)
{
 170:	1f 92       	push	r1
 172:	0f 92       	push	r0
 174:	0f b6       	in	r0, 0x3f	; 63
 176:	0f 92       	push	r0
 178:	11 24       	eor	r1, r1
 17a:	8f 93       	push	r24
 17c:	9f 93       	push	r25
 17e:	ef 93       	push	r30
 180:	ff 93       	push	r31
	static unsigned char flag_rx_waiting_for_stop_bit = SU_FALSE;
	static unsigned char rx_mask;
	
	static char timer_rx_ctr;
	static char bits_left_in_rx;
	static unsigned char internal_rx_buffer;
	
	char start_bit, flag_in;
	char tmp;
	SOFTUART_T_CNT_REG = 256-SOFTUART_TIMERTOP;
 182:	81 ec       	ldi	r24, 0xC1	; 193
 184:	82 bf       	out	0x32, r24	; 50
	// Transmitter Section
	if ( flag_tx_ready ) {
 186:	80 91 97 00 	lds	r24, 0x0097
 18a:	88 23       	and	r24, r24
 18c:	29 f1       	breq	.+74     	; 0x1d8 <__vector_9+0x68>
		tmp = timer_tx_ctr;
 18e:	80 91 98 00 	lds	r24, 0x0098
		if ( --tmp <= 0 ) { // if ( --timer_tx_ctr <= 0 )
 192:	81 50       	subi	r24, 0x01	; 1
 194:	f9 f4       	brne	.+62     	; 0x1d4 <__vector_9+0x64>
			if ( internal_tx_buffer & 0x01 ) {
 196:	80 91 9a 00 	lds	r24, 0x009A
 19a:	90 91 9b 00 	lds	r25, 0x009B
 19e:	80 ff       	sbrs	r24, 0
 1a0:	02 c0       	rjmp	.+4      	; 0x1a6 <__vector_9+0x36>
				set_tx_pin_high();
 1a2:	97 9a       	sbi	0x12, 7	; 18
 1a4:	01 c0       	rjmp	.+2      	; 0x1a8 <__vector_9+0x38>
			}
			else {
				set_tx_pin_low();
 1a6:	97 98       	cbi	0x12, 7	; 18
			}
			internal_tx_buffer >>= 1;
 1a8:	80 91 9a 00 	lds	r24, 0x009A
 1ac:	90 91 9b 00 	lds	r25, 0x009B
 1b0:	96 95       	lsr	r25
 1b2:	87 95       	ror	r24
 1b4:	90 93 9b 00 	sts	0x009B, r25
 1b8:	80 93 9a 00 	sts	0x009A, r24
			tmp = 3; // timer_tx_ctr = 3;
			if ( --bits_left_in_tx <= 0 ) {
 1bc:	80 91 99 00 	lds	r24, 0x0099
 1c0:	81 50       	subi	r24, 0x01	; 1
 1c2:	80 93 99 00 	sts	0x0099, r24
 1c6:	80 91 99 00 	lds	r24, 0x0099
 1ca:	88 23       	and	r24, r24
 1cc:	11 f4       	brne	.+4      	; 0x1d2 <__vector_9+0x62>
				flag_tx_ready = SU_FALSE;
 1ce:	10 92 97 00 	sts	0x0097, r1
 1d2:	83 e0       	ldi	r24, 0x03	; 3
			}
		}
		timer_tx_ctr = tmp;
 1d4:	80 93 98 00 	sts	0x0098, r24
	}

	// Receiver Section
	if ( flag_rx_off == SU_FALSE ) {
 1d8:	80 91 95 00 	lds	r24, 0x0095
 1dc:	88 23       	and	r24, r24
 1de:	09 f0       	breq	.+2      	; 0x1e2 <__vector_9+0x72>
 1e0:	5a c0       	rjmp	.+180    	; 0x296 <__vector_9+0x126>
		if ( flag_rx_waiting_for_stop_bit ) {
 1e2:	80 91 74 00 	lds	r24, 0x0074
 1e6:	88 23       	and	r24, r24
 1e8:	01 f1       	breq	.+64     	; 0x22a <__vector_9+0xba>
			if ( --timer_rx_ctr <= 0 ) {
 1ea:	80 91 72 00 	lds	r24, 0x0072
 1ee:	81 50       	subi	r24, 0x01	; 1
 1f0:	80 93 72 00 	sts	0x0072, r24
 1f4:	88 23       	and	r24, r24
 1f6:	09 f0       	breq	.+2      	; 0x1fa <__vector_9+0x8a>
 1f8:	4e c0       	rjmp	.+156    	; 0x296 <__vector_9+0x126>
				flag_rx_waiting_for_stop_bit = SU_FALSE;
 1fa:	10 92 74 00 	sts	0x0074, r1
				flag_rx_ready = SU_FALSE;
 1fe:	10 92 96 00 	sts	0x0096, r1
				inbuf[qin] = internal_rx_buffer;
 202:	e0 91 6e 00 	lds	r30, 0x006E
 206:	ff 27       	eor	r31, r31
 208:	80 91 70 00 	lds	r24, 0x0070
 20c:	eb 58       	subi	r30, 0x8B	; 139
 20e:	ff 4f       	sbci	r31, 0xFF	; 255
 210:	80 83       	st	Z, r24
				if ( ++qin >= SOFTUART_IN_BUF_SIZE ) {
 212:	80 91 6e 00 	lds	r24, 0x006E
 216:	8f 5f       	subi	r24, 0xFF	; 255
 218:	80 93 6e 00 	sts	0x006E, r24
 21c:	80 91 6e 00 	lds	r24, 0x006E
 220:	80 32       	cpi	r24, 0x20	; 32

⌨️ 快捷键说明

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