📄 delay.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 + -