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

📄 delay.lss

📁 AVR-GCC的三个级别的延时程序
💻 LSS
字号:

delay.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000000f2  00000000  00000000  00000054  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .stab         00000360  00000000  00000000  00000148  2**2
                  CONTENTS, READONLY, DEBUGGING
  2 .stabstr      00000071  00000000  00000000  000004a8  2**0
                  CONTENTS, READONLY, DEBUGGING
  3 .debug_aranges 00000020  00000000  00000000  00000519  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_pubnames 00000083  00000000  00000000  00000539  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_info   00000208  00000000  00000000  000005bc  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_abbrev 00000113  00000000  00000000  000007c4  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_line   0000026a  00000000  00000000  000008d7  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_frame  000000a0  00000000  00000000  00000b44  2**2
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_str    000000fa  00000000  00000000  00000be4  2**0
                  CONTENTS, READONLY, DEBUGGING
 10 .debug_loc    00000028  00000000  00000000  00000cde  2**0
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	12 c0       	rjmp	.+36     	; 0x26 <__ctors_end>
   2:	2b c0       	rjmp	.+86     	; 0x5a <__bad_interrupt>
   4:	2a c0       	rjmp	.+84     	; 0x5a <__bad_interrupt>
   6:	29 c0       	rjmp	.+82     	; 0x5a <__bad_interrupt>
   8:	28 c0       	rjmp	.+80     	; 0x5a <__bad_interrupt>
   a:	27 c0       	rjmp	.+78     	; 0x5a <__bad_interrupt>
   c:	26 c0       	rjmp	.+76     	; 0x5a <__bad_interrupt>
   e:	25 c0       	rjmp	.+74     	; 0x5a <__bad_interrupt>
  10:	24 c0       	rjmp	.+72     	; 0x5a <__bad_interrupt>
  12:	23 c0       	rjmp	.+70     	; 0x5a <__bad_interrupt>
  14:	22 c0       	rjmp	.+68     	; 0x5a <__bad_interrupt>
  16:	21 c0       	rjmp	.+66     	; 0x5a <__bad_interrupt>
  18:	20 c0       	rjmp	.+64     	; 0x5a <__bad_interrupt>
  1a:	1f c0       	rjmp	.+62     	; 0x5a <__bad_interrupt>
  1c:	1e c0       	rjmp	.+60     	; 0x5a <__bad_interrupt>
  1e:	1d c0       	rjmp	.+58     	; 0x5a <__bad_interrupt>
  20:	1c c0       	rjmp	.+56     	; 0x5a <__bad_interrupt>
  22:	1b c0       	rjmp	.+54     	; 0x5a <__bad_interrupt>
  24:	1a c0       	rjmp	.+52     	; 0x5a <__bad_interrupt>

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

0000002e <__do_copy_data>:
  2e:	10 e0       	ldi	r17, 0x00	; 0
  30:	a0 e6       	ldi	r26, 0x60	; 96
  32:	b0 e0       	ldi	r27, 0x00	; 0
  34:	e2 ef       	ldi	r30, 0xF2	; 242
  36:	f0 e0       	ldi	r31, 0x00	; 0
  38:	03 c0       	rjmp	.+6      	; 0x40 <.do_copy_data_start>

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

00000040 <.do_copy_data_start>:
  40:	a0 36       	cpi	r26, 0x60	; 96
  42:	b1 07       	cpc	r27, r17
  44:	d1 f7       	brne	.-12     	; 0x3a <.do_copy_data_loop>

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

0000004e <.do_clear_bss_loop>:
  4e:	1d 92       	st	X+, r1

00000050 <.do_clear_bss_start>:
  50:	a0 36       	cpi	r26, 0x60	; 96
  52:	b1 07       	cpc	r27, r17
  54:	e1 f7       	brne	.-8      	; 0x4e <.do_clear_bss_loop>
  56:	42 d0       	rcall	.+132    	; 0xdc <main>
  58:	4b c0       	rjmp	.+150    	; 0xf0 <_exit>

0000005a <__bad_interrupt>:
  5a:	d2 cf       	rjmp	.-92     	; 0x0 <__vectors>

0000005c <delay1ms>:
//****************当使用4M时延时翻倍,因而减半参数即可*******************//


void delay1ms(uchar y)
{
  5c:	6f 93       	push	r22
asm  volatile("push r22"::);
asm  volatile("push r23"::);
  5e:	7f 93       	push	r23

00000060 <d1>:
asm  volatile("d1: ldi r23,205"::);
  60:	7d ec       	ldi	r23, 0xCD	; 205

00000062 <d2>:
asm  volatile("d2: ldi r22,12"::);
  62:	6c e0       	ldi	r22, 0x0C	; 12

00000064 <d3>:
asm  volatile("d3: dec r22"::);
  64:	6a 95       	dec	r22
asm  volatile("brne d3"::);
  66:	f1 f7       	brne	.-4      	; 0x64 <d3>
asm  volatile("dec r23"::);
  68:	7a 95       	dec	r23
asm  volatile("brne d2"::);
  6a:	d9 f7       	brne	.-10     	; 0x62 <d2>
asm  volatile("dec r24"::);
  6c:	8a 95       	dec	r24
asm  volatile("brne d1"::);
  6e:	c1 f7       	brne	.-16     	; 0x60 <d1>
asm  volatile("pop r23"::);
  70:	7f 91       	pop	r23
asm  volatile("pop r22"::);
  72:	6f 91       	pop	r22
  74:	08 95       	ret

00000076 <delay1us>:

}

//****************此函数是在8M条件下得出的准1us延时**********************//
//****************当使用4M时延时翻倍,因而减半参数即可*******************//

void delay1us(unsigned char x) 
{ 
  76:	8a 95       	dec	r24
	...
        asm  volatile("dus: dec r24" ::); 
        asm volatile("nop" ::); 
		asm volatile("nop" ::); 
        asm volatile("nop" ::);
        asm volatile("nop" ::); 
		asm volatile("nop" ::); 
  80:	00 00       	nop
        asm volatile("brne dus" ::); 
  82:	c9 f7       	brne	.-14     	; 0x76 <delay1us>
  84:	08 95       	ret

00000086 <delay1s>:
} 


//****************此函数是在8M条件下得出的准1s延时**********************//
//****************当使用4M时延时翻倍,因而减半参数即可*******************//
void delay1s(uchar z)
{
  86:	6f 93       	push	r22
asm  volatile("push r22"::);
asm  volatile("push r23"::);
  88:	7f 93       	push	r23
asm  volatile("push r25"::);
  8a:	9f 93       	push	r25

0000008c <ds0>:
asm  volatile("ds0: ldi r25,250"::);
  8c:	9a ef       	ldi	r25, 0xFA	; 250

0000008e <ds1>:
asm  volatile("ds1: ldi r23,248"::);
  8e:	78 ef       	ldi	r23, 0xF8	; 248

00000090 <ds2>:
asm  volatile("ds2: ldi r22,42"::);
  90:	6a e2       	ldi	r22, 0x2A	; 42

00000092 <ds3>:
asm  volatile("ds3: dec r22"::);
  92:	6a 95       	dec	r22
asm  volatile("brne ds3"::);
  94:	f1 f7       	brne	.-4      	; 0x92 <ds3>
asm  volatile("dec r23"::);
  96:	7a 95       	dec	r23
asm  volatile("brne ds2"::);
  98:	d9 f7       	brne	.-10     	; 0x90 <ds2>
asm  volatile("dec r25"::);
  9a:	9a 95       	dec	r25
asm  volatile("brne ds1"::);
  9c:	c1 f7       	brne	.-16     	; 0x8e <ds1>
asm  volatile("dec r24"::);
  9e:	8a 95       	dec	r24
asm  volatile("brne ds0"::);
  a0:	a9 f7       	brne	.-22     	; 0x8c <ds0>
asm  volatile("pop r25"::);
  a2:	9f 91       	pop	r25
asm  volatile("pop r23"::);
  a4:	7f 91       	pop	r23
asm  volatile("pop r22"::);  	   
  a6:	6f 91       	pop	r22
  a8:	08 95       	ret

000000aa <delay_1ms>:
	   
	    
}


//网上精确延时1MS
void delay_1ms(void)
{
  aa:	08 95       	ret

000000ac <shortdelay>:
uint i;
for(i=0;i<(unsigned int)(xtal*143-2);i++);
}

//网上精确延时MS级别

void delay_ms(uint num)
{
uint i;
for(i=0;i<num;i++) delay_1ms();
}

//网上精确延时us级别
void shortdelay(unsigned char tt)
{
  ac:	01 50       	subi	r16, 0x01	; 1
        asm("_L2: subi R16,1");  
        asm(" nop"); 
  ae:	00 00       	nop
        asm(" brne _L2");
  b0:	e9 f7       	brne	.-6      	; 0xac <shortdelay>
        asm(" nop");
  b2:	00 00       	nop
        asm(" ret");
  b4:	08 95       	ret
  b6:	08 95       	ret

000000b8 <delayms>:
}





void delayms(uint t)

{uint i;
  b8:	48 2f       	mov	r20, r24
  ba:	59 2f       	mov	r21, r25
  bc:	20 e0       	ldi	r18, 0x00	; 0
  be:	30 e0       	ldi	r19, 0x00	; 0
  c0:	e0 ed       	ldi	r30, 0xD0	; 208
  c2:	f7 e0       	ldi	r31, 0x07	; 7
  c4:	06 c0       	rjmp	.+12     	; 0xd2 <delayms+0x1a>
 */
void
_delay_loop_2(uint16_t __count)
{
	__asm__ volatile (
  c6:	8e 2f       	mov	r24, r30
  c8:	9f 2f       	mov	r25, r31
  ca:	01 97       	sbiw	r24, 0x01	; 1
  cc:	f1 f7       	brne	.-4      	; 0xca <delayms+0x12>

for(i=0;i<t;i++)
  ce:	2f 5f       	subi	r18, 0xFF	; 255
  d0:	3f 4f       	sbci	r19, 0xFF	; 255
  d2:	24 17       	cp	r18, r20
  d4:	35 07       	cpc	r19, r21
  d6:	b9 f7       	brne	.-18     	; 0xc6 <delayms+0xe>
  d8:	08 95       	ret

000000da <delayus>:
_delay_loop_2(8 * 250);  //此处8表示8MHZ,可以根据频率更改;  t=999时十分接近1s;

}

void delayus(uint t)
{t=t*2;
  da:	08 95       	ret

000000dc <main>:
 while(--t>0);           //接近于1us  ,t=100,为99us,误差已经很小了
 }


int main(void)
{
  dc:	8f ef       	ldi	r24, 0xFF	; 255
  de:	87 bb       	out	0x17, r24	; 23
 DDRB=0XFF;
 PORTB=0X00;
  e0:	18 ba       	out	0x18, r1	; 24
 while(1)
 {
  //delayms(999);
  shortdelay(200);
  e2:	88 ec       	ldi	r24, 0xC8	; 200
  e4:	e3 df       	rcall	.-58     	; 0xac <shortdelay>
   
  PORTB=PORTB+1;
  e6:	88 b3       	in	r24, 0x18	; 24
  e8:	8f 5f       	subi	r24, 0xFF	; 255
  ea:	88 bb       	out	0x18, r24	; 24
  ec:	fa cf       	rjmp	.-12     	; 0xe2 <__stack+0x3>

000000ee <delay_ms>:
  ee:	08 95       	ret

000000f0 <_exit>:
  f0:	ff cf       	rjmp	.-2      	; 0xf0 <_exit>

⌨️ 快捷键说明

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