📄 main.lss
字号:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000001fa 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000062 00800060 000001fa 0000028e 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000012 008000c2 008000c2 000002f0 2**0
ALLOC
3 .noinit 00000000 008000d4 008000d4 000002f0 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 000002f0 2**0
CONTENTS
5 .debug_aranges 00000014 00000000 00000000 000002f0 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_pubnames 00000088 00000000 00000000 00000304 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_info 00000170 00000000 00000000 0000038c 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_abbrev 000000be 00000000 00000000 000004fc 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_line 000001b5 00000000 00000000 000005ba 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_str 000000a8 00000000 00000000 0000076f 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 67 00 jmp 0xce
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: ea ef ldi r30, 0xFA ; 250
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: a2 3c cpi r26, 0xC2 ; 194
72: b1 07 cpc r27, r17
74: d9 f7 brne .-10 ; 0x6c
00000076 <__do_clear_bss>:
76: 10 e0 ldi r17, 0x00 ; 0
78: a2 ec ldi r26, 0xC2 ; 194
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: a4 3d cpi r26, 0xD4 ; 212
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e
86: 0c 94 ed 00 jmp 0x1da
0000008a <__bad_interrupt>:
8a: 0c 94 00 00 jmp 0x0
0000008e <uart_init>:
// Character Size: 8-bit
// Mode: Asynchronous
// Parity: Disabled
// Stop Bit: 1-bit
UBRRL = 0x2f; //9600
8e: 8f e2 ldi r24, 0x2F ; 47
90: 89 b9 out 0x09, r24 ; 9
UBRRH = 0x00;
92: 10 bc out 0x20, r1 ; 32
UCSRA = 0x00; //
94: 1b b8 out 0x0b, r1 ; 11
UCSRC = 0x86; //异步工作模式,Parity: Disabled,
96: 86 e8 ldi r24, 0x86 ; 134
98: 80 bd out 0x20, r24 ; 32
UCSRB = 0x98; //接收结束中断,接收器使能,发送器使能
9a: 88 e9 ldi r24, 0x98 ; 152
9c: 8a b9 out 0x0a, r24 ; 10
9e: 08 95 ret
000000a0 <put_c>:
//}}WIZARD_MAP(UART)
}
void put_c(uchar c) //发送采用查询方式
{
while( !(UCSRA & (1<<UDRE)) );
a0: 5d 9b sbis 0x0b, 5 ; 11
a2: fe cf rjmp .-4 ; 0xa0
UDR=c;
a4: 8c b9 out 0x0c, r24 ; 12
a6: 08 95 ret
000000a8 <put_s>:
}
void put_s(uchar *ptr)
{
a8: cf 93 push r28
aa: df 93 push r29
ac: ec 01 movw r28, r24
while (*ptr)
{
put_c(*ptr++);
ae: 88 81 ld r24, Y
b0: 88 23 and r24, r24
b2: 21 f0 breq .+8 ; 0xbc
b4: 89 91 ld r24, Y+
b6: 0e 94 50 00 call 0xa0
ba: f9 cf rjmp .-14 ; 0xae
}
put_c(0x0D);
bc: 8d e0 ldi r24, 0x0D ; 13
be: 0e 94 50 00 call 0xa0
put_c(0x0A); //结尾发送回车换行
c2: 8a e0 ldi r24, 0x0A ; 10
c4: 0e 94 50 00 call 0xa0
c8: df 91 pop r29
ca: cf 91 pop r28
cc: 08 95 ret
000000ce <__vector_11>:
}
SIGNAL(SIG_USART_RECV) //串口接收中断服务程序
{
ce: 1f 92 push r1
d0: 0f 92 push r0
d2: 0f b6 in r0, 0x3f ; 63
d4: 0f 92 push r0
d6: 11 24 eor r1, r1
d8: 2f 93 push r18
da: 3f 93 push r19
dc: 4f 93 push r20
de: 5f 93 push r21
e0: 6f 93 push r22
e2: 7f 93 push r23
e4: 8f 93 push r24
e6: 9f 93 push r25
e8: af 93 push r26
ea: bf 93 push r27
ec: ef 93 push r30
ee: ff 93 push r31
PC_COMMAND=UDR;
f0: 8c b1 in r24, 0x0c ; 12
f2: 80 93 d3 00 sts 0x00D3, r24
switch(PC_COMMAND)
f6: 80 91 d3 00 lds r24, 0x00D3
fa: 99 27 eor r25, r25
fc: 81 33 cpi r24, 0x31 ; 49
fe: 91 05 cpc r25, r1
100: 69 f0 breq .+26 ; 0x11c
102: 82 33 cpi r24, 0x32 ; 50
104: 91 05 cpc r25, r1
106: 1c f4 brge .+6 ; 0x10e
108: c0 97 sbiw r24, 0x30 ; 48
10a: 21 f0 breq .+8 ; 0x114
10c: 0e c0 rjmp .+28 ; 0x12a
10e: c2 97 sbiw r24, 0x32 ; 50
110: 49 f0 breq .+18 ; 0x124
112: 0b c0 rjmp .+22 ; 0x12a
{
case '0': //0x30 ASCII '0'
//LED0_ON();
LCD_EN_PORT |= LCD_EN; //EN=1
114: d8 9a sbi 0x1b, 0 ; 27
put_s("用户输入0#指令");
116: 80 e6 ldi r24, 0x60 ; 96
118: 90 e0 ldi r25, 0x00 ; 0
11a: 09 c0 rjmp .+18 ; 0x12e
break;
case '1':
//LED1_ON();
LCD_EN_PORT &= ~LCD_EN; //EN=0
11c: d8 98 cbi 0x1b, 0 ; 27
put_s("用户输入1#指令");
11e: 8f e6 ldi r24, 0x6F ; 111
120: 90 e0 ldi r25, 0x00 ; 0
122: 05 c0 rjmp .+10 ; 0x12e
break;
case '2':
//LED0_OFF();
//LED1_OFF();
//FLAG=!FLAG;
put_s("用户输入2#指令");
124: 8e e7 ldi r24, 0x7E ; 126
126: 90 e0 ldi r25, 0x00 ; 0
128: 02 c0 rjmp .+4 ; 0x12e
break;
default:
put_s("用户输入的指令无效!");
12a: 8d e8 ldi r24, 0x8D ; 141
12c: 90 e0 ldi r25, 0x00 ; 0
12e: 0e 94 54 00 call 0xa8
break;
}
/*
注意,使用put_s函数发送数据需要一定的时间,如果输入数据的速度过高将会导致数据丢失
所以,一般建议中断服务程序的处理时间尽量的短,只做采集数据和设标志位,命令的处理交由主程序来完成
这里只是示范简单的命令处理
*/
RX_BUFFER[RX_index]=PC_COMMAND; //保存数据到数组里面
132: 80 91 d2 00 lds r24, 0x00D2
136: e8 2f mov r30, r24
138: ff 27 eor r31, r31
13a: ee 53 subi r30, 0x3E ; 62
13c: ff 4f sbci r31, 0xFF ; 255
13e: 80 91 d3 00 lds r24, 0x00D3
142: 80 83 st Z, r24
RX_index++;
144: 80 91 d2 00 lds r24, 0x00D2
148: 8f 5f subi r24, 0xFF ; 255
14a: 80 93 d2 00 sts 0x00D2, r24
if (RX_index>=16) RX_index=0; //防止数组溢出
14e: 80 91 d2 00 lds r24, 0x00D2
152: 80 31 cpi r24, 0x10 ; 16
154: 10 f0 brcs .+4 ; 0x15a
156: 10 92 d2 00 sts 0x00D2, r1
15a: ff 91 pop r31
15c: ef 91 pop r30
15e: bf 91 pop r27
160: af 91 pop r26
162: 9f 91 pop r25
164: 8f 91 pop r24
166: 7f 91 pop r23
168: 6f 91 pop r22
16a: 5f 91 pop r21
16c: 4f 91 pop r20
16e: 3f 91 pop r19
170: 2f 91 pop r18
172: 0f 90 pop r0
174: 0f be out 0x3f, r0 ; 63
176: 0f 90 pop r0
178: 1f 90 pop r1
17a: 18 95 reti
0000017c <pro_coammand>:
}
void pro_coammand(void) //多字节命令的处理程序
{
17c: cf 93 push r28
uchar i;
if (RX_index>=10)
17e: 80 91 d2 00 lds r24, 0x00D2
182: 8a 30 cpi r24, 0x0A ; 10
184: 40 f1 brcs .+80 ; 0x1d6
{
UCSRB&= ~(1<<RXCIE); //关断USART接收中断
186: 57 98 cbi 0x0a, 7 ; 10
put_c(0x0D);
188: 8d e0 ldi r24, 0x0D ; 13
18a: 0e 94 50 00 call 0xa0
put_c(0x0A); //发送回车换行
18e: 8a e0 ldi r24, 0x0A ; 10
190: 0e 94 50 00 call 0xa0
put_s("Hello! 你之前输入的命令列表是:");
194: 81 ea ldi r24, 0xA1 ; 161
196: 90 e0 ldi r25, 0x00 ; 0
198: 0e 94 54 00 call 0xa8
for (i=0;i<RX_index;i++) put_c(RX_BUFFER[i]);
19c: c0 e0 ldi r28, 0x00 ; 0
19e: 80 91 d2 00 lds r24, 0x00D2
1a2: c8 17 cp r28, r24
1a4: 48 f4 brcc .+18 ; 0x1b8
1a6: ec 2f mov r30, r28
1a8: ff 27 eor r31, r31
1aa: ee 53 subi r30, 0x3E ; 62
1ac: ff 4f sbci r31, 0xFF ; 255
1ae: 80 81 ld r24, Z
1b0: 0e 94 50 00 call 0xa0
1b4: cf 5f subi r28, 0xFF ; 255
1b6: f3 cf rjmp .-26 ; 0x19e
put_c(0x0D);
1b8: 8d e0 ldi r24, 0x0D ; 13
1ba: 0e 94 50 00 call 0xa0
put_c(0x0A);
1be: 8a e0 ldi r24, 0x0A ; 10
1c0: 0e 94 50 00 call 0xa0
put_c(0x0D);
1c4: 8d e0 ldi r24, 0x0D ; 13
1c6: 0e 94 50 00 call 0xa0
put_c(0x0A); //发送回车换行
1ca: 8a e0 ldi r24, 0x0A ; 10
1cc: 0e 94 50 00 call 0xa0
RX_index=0; //清零
1d0: 10 92 d2 00 sts 0x00D2, r1
UCSRB|= (1<<RXCIE); //打开USART接收中断
1d4: 57 9a sbi 0x0a, 7 ; 10
1d6: cf 91 pop r28
1d8: 08 95 ret
000001da <main>:
}
}
int main(void)
{
1da: cf e5 ldi r28, 0x5F ; 95
1dc: d4 e0 ldi r29, 0x04 ; 4
1de: de bf out 0x3e, r29 ; 62
1e0: cd bf out 0x3d, r28 ; 61
PORTA =0xFF;
1e2: 9f ef ldi r25, 0xFF ; 255
1e4: 9b bb out 0x1b, r25 ; 27
PORTB =0xFF;
1e6: 98 bb out 0x18, r25 ; 24
PORTC =0xFF;
1e8: 95 bb out 0x15, r25 ; 21
DDRD =(1<<PIN_TXD); //TXD为输出
1ea: 82 e0 ldi r24, 0x02 ; 2
1ec: 81 bb out 0x11, r24 ; 17
PORTD =0xFF;
1ee: 92 bb out 0x12, r25 ; 18
CONTROL_PORT |= LCD_EN; //out
1f0: d0 9a sbi 0x1a, 0 ; 26
uart_init();
1f2: 0e 94 47 00 call 0x8e
sei();
1f6: 78 94 sei
while(1)
1f8: ff cf rjmp .-2 ; 0x1f8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -