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

📄 main.lss

📁 AVR单片机程序实现跑马灯效果
💻 LSS
字号:

main.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000001bc  00000000  00000000  00000094  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00800060  000001bc  00000250  2**0
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000000  00800060  000001bc  00000250  2**0
                  ALLOC
  3 .noinit       00000000  00800060  00800060  00000250  2**0
                  CONTENTS
  4 .eeprom       00000000  00810000  00810000  00000250  2**0
                  CONTENTS
  5 .stab         000004bc  00000000  00000000  00000250  2**2
                  CONTENTS, READONLY, DEBUGGING
  6 .stabstr      0000060b  00000000  00000000  0000070c  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 2a 00 	jmp	0x54
   4:	0c 94 45 00 	jmp	0x8a
   8:	0c 94 45 00 	jmp	0x8a
   c:	0c 94 45 00 	jmp	0x8a
  10:	0c 94 45 00 	jmp	0x8a
  14:	0c 94 45 00 	jmp	0x8a
  18:	0c 94 45 00 	jmp	0x8a
  1c:	0c 94 45 00 	jmp	0x8a
  20:	0c 94 45 00 	jmp	0x8a
  24:	0c 94 45 00 	jmp	0x8a
  28:	0c 94 45 00 	jmp	0x8a
  2c:	0c 94 45 00 	jmp	0x8a
  30:	0c 94 45 00 	jmp	0x8a
  34:	0c 94 45 00 	jmp	0x8a
  38:	0c 94 45 00 	jmp	0x8a
  3c:	0c 94 45 00 	jmp	0x8a
  40:	0c 94 45 00 	jmp	0x8a
  44:	0c 94 45 00 	jmp	0x8a
  48:	0c 94 45 00 	jmp	0x8a
  4c:	0c 94 45 00 	jmp	0x8a
  50:	0c 94 45 00 	jmp	0x8a

00000054 <__ctors_end>:
  54:	11 24       	eor	r1, r1
  56:	1f be       	out	0x3f, r1	; 63
  58:	cf e5       	ldi	r28, 0x5F	; 95
  5a:	d4 e0       	ldi	r29, 0x04	; 4
  5c:	de bf       	out	0x3e, r29	; 62
  5e:	cd bf       	out	0x3d, r28	; 61

00000060 <__do_copy_data>:
  60:	10 e0       	ldi	r17, 0x00	; 0
  62:	a0 e6       	ldi	r26, 0x60	; 96
  64:	b0 e0       	ldi	r27, 0x00	; 0
  66:	ec eb       	ldi	r30, 0xBC	; 188
  68:	f1 e0       	ldi	r31, 0x01	; 1
  6a:	02 c0       	rjmp	.+4      	; 0x70

0000006c <.do_copy_data_loop>:
  6c:	05 90       	lpm	r0, Z+
  6e:	0d 92       	st	X+, r0

00000070 <.do_copy_data_start>:
  70:	a0 36       	cpi	r26, 0x60	; 96
  72:	b1 07       	cpc	r27, r17
  74:	d9 f7       	brne	.-10     	; 0x6c

00000076 <__do_clear_bss>:
  76:	10 e0       	ldi	r17, 0x00	; 0
  78:	a0 e6       	ldi	r26, 0x60	; 96
  7a:	b0 e0       	ldi	r27, 0x00	; 0
  7c:	01 c0       	rjmp	.+2      	; 0x80

0000007e <.do_clear_bss_loop>:
  7e:	1d 92       	st	X+, r1

00000080 <.do_clear_bss_start>:
  80:	a0 36       	cpi	r26, 0x60	; 96
  82:	b1 07       	cpc	r27, r17
  84:	e1 f7       	brne	.-8      	; 0x7e
  86:	0c 94 d2 00 	jmp	0x1a4

0000008a <__bad_interrupt>:
  8a:	0c 94 00 00 	jmp	0x0

0000008e <delay_ms>:

void delay_ms(uint ms)    //延迟
{
    uint i;
    for(i=0;i<ms;i++)
  8e:	00 97       	sbiw	r24, 0x00	; 0
  90:	41 f0       	breq	.+16     	; 0xa2
  92:	9c 01       	movw	r18, r24
    milliseconds can be achieved.
 */
static __inline__ void
_delay_loop_2(uint16_t __count)
{
  94:	8a ef       	ldi	r24, 0xFA	; 250
  96:	90 e0       	ldi	r25, 0x00	; 0
	__asm__ volatile (
  98:	01 97       	sbiw	r24, 0x01	; 1
  9a:	f1 f7       	brne	.-4      	; 0x98
  9c:	21 50       	subi	r18, 0x01	; 1
  9e:	30 40       	sbci	r19, 0x00	; 0
  a0:	c9 f7       	brne	.-14     	; 0x94
  a2:	08 95       	ret

000000a4 <RightDisplay>:
        _delay_loop_2(250);
}


void RightDisplay( void )
{
  a4:	cf 93       	push	r28
    uchar RightCount ;

    for( RightCount = 7; RightCount <8; RightCount--)    //PD口从右向左步进跳动,闪烁
  a6:	c7 e0       	ldi	r28, 0x07	; 7
    {
        delay_ms(500);
  a8:	84 ef       	ldi	r24, 0xF4	; 244
  aa:	91 e0       	ldi	r25, 0x01	; 1
  ac:	0e 94 47 00 	call	0x8e
        PORTD = _BV(RightCount);
  b0:	81 e0       	ldi	r24, 0x01	; 1
  b2:	90 e0       	ldi	r25, 0x00	; 0
  b4:	0c 2e       	mov	r0, r28
  b6:	02 c0       	rjmp	.+4      	; 0xbc
  b8:	88 0f       	add	r24, r24
  ba:	99 1f       	adc	r25, r25
  bc:	0a 94       	dec	r0
  be:	e2 f7       	brpl	.-8      	; 0xb8
  c0:	82 bb       	out	0x12, r24	; 18
  c2:	c1 50       	subi	r28, 0x01	; 1
  c4:	c8 30       	cpi	r28, 0x08	; 8
  c6:	80 f3       	brcs	.-32     	; 0xa8
  c8:	c0 e0       	ldi	r28, 0x00	; 0
    }	delay_ms(500);
  ca:	84 ef       	ldi	r24, 0xF4	; 244
  cc:	91 e0       	ldi	r25, 0x01	; 1
  ce:	0e 94 47 00 	call	0x8e
	PORTD= 0x80;                                            //PD口的PD0脚点亮
  d2:	80 e8       	ldi	r24, 0x80	; 128
  d4:	82 bb       	out	0x12, r24	; 18
    PORTD= 0x00; 											//PD口的灯全部熄灭
  d6:	c2 bb       	out	0x12, r28	; 18

    for( RightCount = 7; RightCount <8; RightCount--)     //PB口从右向左步进跳动,闪烁
  d8:	c7 e0       	ldi	r28, 0x07	; 7
    {
        delay_ms(500);
  da:	84 ef       	ldi	r24, 0xF4	; 244
  dc:	91 e0       	ldi	r25, 0x01	; 1
  de:	0e 94 47 00 	call	0x8e
        PORTB = _BV(RightCount);
  e2:	81 e0       	ldi	r24, 0x01	; 1
  e4:	90 e0       	ldi	r25, 0x00	; 0
  e6:	0c 2e       	mov	r0, r28
  e8:	02 c0       	rjmp	.+4      	; 0xee
  ea:	88 0f       	add	r24, r24
  ec:	99 1f       	adc	r25, r25
  ee:	0a 94       	dec	r0
  f0:	e2 f7       	brpl	.-8      	; 0xea
  f2:	88 bb       	out	0x18, r24	; 24
  f4:	c1 50       	subi	r28, 0x01	; 1
  f6:	c8 30       	cpi	r28, 0x08	; 8
  f8:	80 f3       	brcs	.-32     	; 0xda
  fa:	c0 e0       	ldi	r28, 0x00	; 0
    }
        //delay_ms(5000);                                  //PB口的灯全部熄灭
		PORTB = 0x00;                                                              
  fc:	c8 bb       	out	0x18, r28	; 24
  fe:	cf 91       	pop	r28
 100:	08 95       	ret

00000102 <DbSideDisplay>:
}

void DbSideDisplay( void )
{
 102:	0f 93       	push	r16
 104:	1f 93       	push	r17
 106:	cf 93       	push	r28
 108:	df 93       	push	r29
    uchar DbSideLeft;
    uchar DbSideRight;

    for( DbSideLeft = 0, DbSideRight = 7; DbSideLeft < 8; DbSideLeft ++,DbSideRight --)  //PB口从左,PD口从右同时向中间快速跳动,闪烁
 10a:	17 e0       	ldi	r17, 0x07	; 7
 10c:	c0 e0       	ldi	r28, 0x00	; 0
 10e:	d0 e0       	ldi	r29, 0x00	; 0
 110:	01 2f       	mov	r16, r17
    {
        delay_ms(500);
 112:	84 ef       	ldi	r24, 0xF4	; 244
 114:	91 e0       	ldi	r25, 0x01	; 1
 116:	0e 94 47 00 	call	0x8e
        //PORTB |=(1<<DbSideLeft); 此语句和下一句PORTB |=_BV(DbSideLeft)是等同的效果   
        //PORTD |=(1<<DbSideRight);
		PORTB |=_BV(DbSideLeft);
 11a:	21 e0       	ldi	r18, 0x01	; 1
 11c:	30 e0       	ldi	r19, 0x00	; 0
 11e:	a9 01       	movw	r20, r18
 120:	0c 2e       	mov	r0, r28
 122:	02 c0       	rjmp	.+4      	; 0x128
 124:	44 0f       	add	r20, r20
 126:	55 1f       	adc	r21, r21
 128:	0a 94       	dec	r0
 12a:	e2 f7       	brpl	.-8      	; 0x124
 12c:	88 b3       	in	r24, 0x18	; 24
 12e:	84 2b       	or	r24, r20
 130:	88 bb       	out	0x18, r24	; 24
		PORTD |=_BV(DbSideRight);
 132:	01 2e       	mov	r0, r17
 134:	02 c0       	rjmp	.+4      	; 0x13a
 136:	22 0f       	add	r18, r18
 138:	33 1f       	adc	r19, r19
 13a:	0a 94       	dec	r0
 13c:	e2 f7       	brpl	.-8      	; 0x136
 13e:	82 b3       	in	r24, 0x12	; 18
 140:	82 2b       	or	r24, r18
 142:	82 bb       	out	0x12, r24	; 18
 144:	01 50       	subi	r16, 0x01	; 1
 146:	21 96       	adiw	r28, 0x01	; 1
 148:	11 50       	subi	r17, 0x01	; 1
 14a:	07 ff       	sbrs	r16, 7
 14c:	e2 cf       	rjmp	.-60     	; 0x112
        
    }

    PORTB = 0x00;
 14e:	18 ba       	out	0x18, r1	; 24
    PORTD = 0x00;
 150:	12 ba       	out	0x12, r1	; 18

    for( DbSideLeft = 0, DbSideRight = 7; DbSideLeft < 8; DbSideLeft ++,DbSideRight --)  //PB口从右,PD口从左同时从中间向两边快速跳动,分开
 152:	17 e0       	ldi	r17, 0x07	; 7
 154:	c0 e0       	ldi	r28, 0x00	; 0
 156:	d0 e0       	ldi	r29, 0x00	; 0
 158:	01 2f       	mov	r16, r17
    {
        delay_ms(500);
 15a:	84 ef       	ldi	r24, 0xF4	; 244
 15c:	91 e0       	ldi	r25, 0x01	; 1
 15e:	0e 94 47 00 	call	0x8e
		PORTB |=_BV(DbSideRight);
 162:	21 e0       	ldi	r18, 0x01	; 1
 164:	30 e0       	ldi	r19, 0x00	; 0
 166:	a9 01       	movw	r20, r18
 168:	01 2e       	mov	r0, r17
 16a:	02 c0       	rjmp	.+4      	; 0x170
 16c:	44 0f       	add	r20, r20
 16e:	55 1f       	adc	r21, r21
 170:	0a 94       	dec	r0
 172:	e2 f7       	brpl	.-8      	; 0x16c
 174:	88 b3       	in	r24, 0x18	; 24
 176:	84 2b       	or	r24, r20
 178:	88 bb       	out	0x18, r24	; 24
		PORTD |=_BV(DbSideLeft);
 17a:	0c 2e       	mov	r0, r28
 17c:	02 c0       	rjmp	.+4      	; 0x182
 17e:	22 0f       	add	r18, r18
 180:	33 1f       	adc	r19, r19
 182:	0a 94       	dec	r0
 184:	e2 f7       	brpl	.-8      	; 0x17e
 186:	82 b3       	in	r24, 0x12	; 18
 188:	82 2b       	or	r24, r18
 18a:	82 bb       	out	0x12, r24	; 18
 18c:	01 50       	subi	r16, 0x01	; 1
 18e:	21 96       	adiw	r28, 0x01	; 1
 190:	11 50       	subi	r17, 0x01	; 1
 192:	07 ff       	sbrs	r16, 7
 194:	e2 cf       	rjmp	.-60     	; 0x15a

        //PORTD |=(1<<DbSideLeft);
        //PORTB |=(1<<DbSideRight);
    }
 
    PORTB = 0x00;  
 196:	18 ba       	out	0x18, r1	; 24
    PORTD = 0x00;
 198:	12 ba       	out	0x12, r1	; 18
 19a:	df 91       	pop	r29
 19c:	cf 91       	pop	r28
 19e:	1f 91       	pop	r17
 1a0:	0f 91       	pop	r16
 1a2:	08 95       	ret

000001a4 <main>:

}


int main( void)
{
 1a4:	cf e5       	ldi	r28, 0x5F	; 95
 1a6:	d4 e0       	ldi	r29, 0x04	; 4
 1a8:	de bf       	out	0x3e, r29	; 62
 1aa:	cd bf       	out	0x3d, r28	; 61

    DDRB = 0xff;
 1ac:	8f ef       	ldi	r24, 0xFF	; 255
 1ae:	87 bb       	out	0x17, r24	; 23
    DDRD = 0xff;
 1b0:	81 bb       	out	0x11, r24	; 17
    while(1)
    {
		RightDisplay();
 1b2:	0e 94 52 00 	call	0xa4
        DbSideDisplay();
 1b6:	0e 94 81 00 	call	0x102
 1ba:	fb cf       	rjmp	.-10     	; 0x1b2

⌨️ 快捷键说明

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