📄 demo_key_test.lss
字号:
Demo_key_test.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000134 00000000 00000000 00000074 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000020 00800060 00000134 000001a8 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .stab 00000378 00000000 00000000 000001c8 2**2
CONTENTS, READONLY, DEBUGGING
3 .stabstr 00000071 00000000 00000000 00000540 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_aranges 00000020 00000000 00000000 000005b1 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_pubnames 00000070 00000000 00000000 000005d1 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_info 00000244 00000000 00000000 00000641 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_abbrev 000000fd 00000000 00000000 00000885 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_line 000001bf 00000000 00000000 00000982 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_frame 00000050 00000000 00000000 00000b44 2**2
CONTENTS, READONLY, DEBUGGING
10 .debug_str 00000122 00000000 00000000 00000b94 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_loc 00000068 00000000 00000000 00000cb6 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 2a 00 jmp 0x54 ; 0x54 <__ctors_end>
4: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
8: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
10: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
14: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
18: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
1c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
20: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
24: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
28: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
2c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
30: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
34: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
38: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
3c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
40: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
44: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
48: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
4c: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
50: 0c 94 47 00 jmp 0x8e ; 0x8e <__bad_interrupt>
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: e4 e3 ldi r30, 0x34 ; 52
68: f1 e0 ldi r31, 0x01 ; 1
6a: 02 c0 rjmp .+4 ; 0x70 <.do_copy_data_start>
0000006c <.do_copy_data_loop>:
6c: 05 90 lpm r0, Z+
6e: 0d 92 st X+, r0
00000070 <.do_copy_data_start>:
70: a0 38 cpi r26, 0x80 ; 128
72: b1 07 cpc r27, r17
74: d9 f7 brne .-10 ; 0x6c <.do_copy_data_loop>
00000076 <__do_clear_bss>:
76: 10 e0 ldi r17, 0x00 ; 0
78: a0 e8 ldi r26, 0x80 ; 128
7a: b0 e0 ldi r27, 0x00 ; 0
7c: 01 c0 rjmp .+2 ; 0x80 <.do_clear_bss_start>
0000007e <.do_clear_bss_loop>:
7e: 1d 92 st X+, r1
00000080 <.do_clear_bss_start>:
80: a0 38 cpi r26, 0x80 ; 128
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop>
86: 0e 94 7d 00 call 0xfa ; 0xfa <main>
8a: 0c 94 99 00 jmp 0x132 ; 0x132 <_exit>
0000008e <__bad_interrupt>:
8e: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
00000092 <port_init>:
//**************端口初始化程序*************************//
void port_init()
{
92: 8f ef ldi r24, 0xFF ; 255
94: 8a bb out 0x1a, r24 ; 26
DDRA=0xff;
PORTA=0xff;
96: 8b bb out 0x1b, r24 ; 27
DDRC=0xff;
98: 84 bb out 0x14, r24 ; 20
PORTC=0xff;
9a: 85 bb out 0x15, r24 ; 21
DDRB&=~(1<<0);//出现AVR的位操作
9c: b8 98 cbi 0x17, 0 ; 23
PORTB=0xff;
9e: 88 bb out 0x18, r24 ; 24
a0: 08 95 ret
000000a2 <led_display_1>:
}
//****************显示程序1*************************//
//****************显示01234567*********************//
void led_display_1()
{
a2: cf 93 push r28
a4: df 93 push r29
a6: e0 e7 ldi r30, 0x70 ; 112
a8: f0 e0 ldi r31, 0x00 ; 0
aa: c0 e6 ldi r28, 0x60 ; 96
ac: d0 e0 ldi r29, 0x00 ; 0
ae: a0 ea ldi r26, 0xA0 ; 160
b0: bf e0 ldi r27, 0x0F ; 15
uchar j;
for(j=0;j<8;j++)
{
PORTA=disnumber_code[j];
b2: 81 91 ld r24, Z+
b4: 8b bb out 0x1b, r24 ; 27
PORTC=disbeat_run[j];
b6: 89 91 ld r24, Y+
b8: 85 bb out 0x15, r24 ; 21
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
ba: cd 01 movw r24, r26
bc: 01 97 sbiw r24, 0x01 ; 1
be: f1 f7 brne .-4 ; 0xbc <led_display_1+0x1a>
c0: 80 e0 ldi r24, 0x00 ; 0
c2: e8 37 cpi r30, 0x78 ; 120
c4: f8 07 cpc r31, r24
c6: a9 f7 brne .-22 ; 0xb2 <led_display_1+0x10>
c8: df 91 pop r29
ca: cf 91 pop r28
cc: 08 95 ret
000000ce <led_display_2>:
_delay_ms(2);
}
}
//***************显示程序2***************************//
//********************显示89ABCDEF*******************//
void led_display_2()
{
ce: cf 93 push r28
d0: df 93 push r29
d2: e8 e7 ldi r30, 0x78 ; 120
d4: f0 e0 ldi r31, 0x00 ; 0
d6: c8 e6 ldi r28, 0x68 ; 104
d8: d0 e0 ldi r29, 0x00 ; 0
da: a0 ea ldi r26, 0xA0 ; 160
dc: bf e0 ldi r27, 0x0F ; 15
uchar i;
for(i=8;i<16;i++)
{
PORTA=disnumber_code[i];
de: 81 91 ld r24, Z+
e0: 8b bb out 0x1b, r24 ; 27
PORTC=disbeat_run[i];
e2: 89 91 ld r24, Y+
e4: 85 bb out 0x15, r24 ; 21
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
e6: cd 01 movw r24, r26
e8: 01 97 sbiw r24, 0x01 ; 1
ea: f1 f7 brne .-4 ; 0xe8 <led_display_2+0x1a>
ec: 80 e0 ldi r24, 0x00 ; 0
ee: e0 38 cpi r30, 0x80 ; 128
f0: f8 07 cpc r31, r24
f2: a9 f7 brne .-22 ; 0xde <led_display_2+0x10>
f4: df 91 pop r29
f6: cf 91 pop r28
f8: 08 95 ret
000000fa <main>:
_delay_ms(2);
}
}
//****************主函数开始****************************//
void main()
{
fa: 1f 93 push r17
uchar flat=0;//设定一个标志位,为以后的状态选择做准备
//不同的状态对应不同的输出结果 如果flat是0,进入状态1输出“01234567”如果
//flat是1进入状态2输出“89ABCDEF”
//flat为2时,则从状态2跳到状态3,状态3时即把flat从新给0,回到状态1
port_init();
fc: 0e 94 49 00 call 0x92 ; 0x92 <port_init>
100: 10 e0 ldi r17, 0x00 ; 0
while(1)
{
if((PINB&0x01)==0) //消抖要检测两次,这是最基本的写法
102: b0 99 sbic 0x16, 0 ; 22
104: 09 c0 rjmp .+18 ; 0x118 <main+0x1e>
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
106: 80 e2 ldi r24, 0x20 ; 32
108: 9e e4 ldi r25, 0x4E ; 78
10a: 01 97 sbiw r24, 0x01 ; 1
10c: f1 f7 brne .-4 ; 0x10a <main+0x10>
{
_delay_ms(10); //延时10毫秒是为了消抖
if((PINB&0x01)==0)
10e: b0 99 sbic 0x16, 0 ; 22
110: 03 c0 rjmp .+6 ; 0x118 <main+0x1e>
{
flat++;
while((PINB&0x01)==0); //思考出现这条语句的作用是什么,有和没有有区别吗
112: b0 9b sbis 0x16, 0 ; 22
114: fe cf rjmp .-4 ; 0x112 <main+0x18>
116: 1f 5f subi r17, 0xFF ; 255
//这条语句是为了保证按下按键多久,flat都只加1;如果没有,就会连续加下去
//这样就不符合实际的要求
}
}
//三种状态,有限状态机的思想
if(flat==0) //状态1
118: 11 23 and r17, r17
11a: 19 f4 brne .+6 ; 0x122 <main+0x28>
{
led_display_1();
11c: 0e 94 51 00 call 0xa2 ; 0xa2 <led_display_1>
120: f0 cf rjmp .-32 ; 0x102 <main+0x8>
}
if(flat==1) //状态2
122: 11 30 cpi r17, 0x01 ; 1
124: 19 f4 brne .+6 ; 0x12c <main+0x32>
{
led_display_2();
126: 0e 94 67 00 call 0xce ; 0xce <led_display_2>
12a: eb cf rjmp .-42 ; 0x102 <main+0x8>
}
if(flat==2) //状态3
12c: 12 30 cpi r17, 0x02 ; 2
12e: 49 f7 brne .-46 ; 0x102 <main+0x8>
130: e7 cf rjmp .-50 ; 0x100 <main+0x6>
00000132 <_exit>:
132: ff cf rjmp .-2 ; 0x132 <_exit>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -