📄 main.lss
字号:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000001ec 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 0000002e 00800060 000001ec 00000280 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000002 0080008e 0080008e 000002ae 2**0
ALLOC
3 .noinit 00000000 00800090 00800090 000002ae 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 000002ae 2**0
CONTENTS
5 .stab 0000036c 00000000 00000000 000002b0 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 00000084 00000000 00000000 0000061c 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_aranges 00000014 00000000 00000000 000006a0 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_pubnames 0000009f 00000000 00000000 000006b4 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_info 000002cd 00000000 00000000 00000753 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_abbrev 0000015e 00000000 00000000 00000a20 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_line 0000024a 00000000 00000000 00000b7e 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_str 00000140 00000000 00000000 00000dc8 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 2a 00 jmp 0x54 <__ctors_end>
4: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
8: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
10: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
14: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
18: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
1c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
20: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
24: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
28: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
2c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
30: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
34: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
38: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
3c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
40: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
44: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
48: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
4c: 0c 94 45 00 jmp 0x8a <__bad_interrupt>
50: 0c 94 45 00 jmp 0x8a <__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: ec ee ldi r30, 0xEC ; 236
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: ae 38 cpi r26, 0x8E ; 142
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: ae e8 ldi r26, 0x8E ; 142
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 39 cpi r26, 0x90 ; 144
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop>
86: 0c 94 9e 00 jmp 0x13c <main>
0000008a <__bad_interrupt>:
8a: 0c 94 00 00 jmp 0x0 <__vectors>
0000008e <delay>:
//uchar String_Buf[100];
void delay(uchar _delay_n)
{
8e: cf 93 push r28
90: df 93 push r29
92: 38 2f mov r19, r24
uchar i;
for(i=0;i<_delay_n;i++)
94: 20 e0 ldi r18, 0x00 ; 0
96: 28 17 cp r18, r24
98: 50 f4 brcc .+20 ; 0xae <delay+0x20>
9a: a0 e2 ldi r26, 0x20 ; 32
9c: be e4 ldi r27, 0x4E ; 78
9e: c0 e0 ldi r28, 0x00 ; 0
a0: d0 e0 ldi r29, 0x00 ; 0
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
a2: cd 01 movw r24, r26
a4: 01 97 sbiw r24, 0x01 ; 1
a6: f1 f7 brne .-4 ; 0xa4 <delay+0x16>
void delay(uchar _delay_n)
{
uchar i;
for(i=0;i<_delay_n;i++)
a8: 2f 5f subi r18, 0xFF ; 255
aa: 23 17 cp r18, r19
ac: d0 f3 brcs .-12 ; 0xa2 <delay+0x14>
ae: df 91 pop r29
b0: cf 91 pop r28
b2: 08 95 ret
000000b4 <Uart_Init>:
//初始化设置**************************************************************//
void Uart_Init(void)
{
//接收使能、发送使能、接收中断允许、发送中断允许
UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE)|(1<<TXCIE);
b4: 88 ed ldi r24, 0xD8 ; 216
b6: 8a b9 out 0x0a, r24 ; 10
UBRRL= (fosc/16/(baud+1)) % 256;
b8: 88 e6 ldi r24, 0x68 ; 104
ba: 89 b9 out 0x09, r24 ; 9
UBRRH= (fosc/16/(baud+1)) / 256;
bc: 10 bc out 0x20, r1 ; 32
UCSRC= (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0); //8位数据 +1位STOP位
be: 86 e8 ldi r24, 0x86 ; 134
c0: 80 bd out 0x20, r24 ; 32
c2: 08 95 ret
000000c4 <Uart_PutChar>:
// sei(); //总中断允许
}
//发送字符函数************************************************************//
void Uart_PutChar(uchar data)
{
while ( !( UCSRA & (1<<UDRE)) ) //等待发送缓冲器为空
c4: 5d 9b sbis 0x0b, 5 ; 11
c6: fe cf rjmp .-4 ; 0xc4 <Uart_PutChar>
;
UDR = data; //将数据放入缓冲器,发送数据
c8: 8c b9 out 0x0c, r24 ; 12
ca: 08 95 ret
000000cc <Uart_PutString>:
}
//发送字符串函数**********************************************************//
void Uart_PutString(uchar* p)
{
cc: cf 93 push r28
ce: df 93 push r29
d0: ec 01 movw r28, r24
uchar* temp;
temp=p;
while(!(*temp=='\0'))
{
Uart_PutChar(*temp);
temp++;
d2: 88 81 ld r24, Y
d4: 88 23 and r24, r24
d6: 21 f0 breq .+8 ; 0xe0 <Uart_PutString+0x14>
d8: 89 91 ld r24, Y+
da: 0e 94 62 00 call 0xc4 <Uart_PutChar>
de: f9 cf rjmp .-14 ; 0xd2 <Uart_PutString+0x6>
}
Uart_PutChar(0x0D);
e0: 8d e0 ldi r24, 0x0D ; 13
e2: 0e 94 62 00 call 0xc4 <Uart_PutChar>
e6: df 91 pop r29
e8: cf 91 pop r28
ea: 08 95 ret
000000ec <Uart_Recv>:
}
//接收字符函数************************************************************//
uchar Uart_Recv(void)
{
if(UCSRA & (1<<RXC))
ec: 5f 9b sbis 0x0b, 7 ; 11
ee: 03 c0 rjmp .+6 ; 0xf6 <Uart_Recv+0xa>
return UDR;
f0: 8c b1 in r24, 0x0c ; 12
f2: 99 27 eor r25, r25
f4: 08 95 ret
else return 0;
f6: 80 e0 ldi r24, 0x00 ; 0
f8: 90 e0 ldi r25, 0x00 ; 0
}
fa: 08 95 ret
000000fc <keyboard_Initial>:
void keyboard_Initial(void)
{
DDR_KEYBoard &=0xC3;
fc: 84 b3 in r24, 0x14 ; 20
fe: 83 7c andi r24, 0xC3 ; 195
100: 84 bb out 0x14, r24 ; 20
PORT_KEYBoard |=0x3C;
102: 85 b3 in r24, 0x15 ; 21
104: 8c 63 ori r24, 0x3C ; 60
106: 85 bb out 0x15, r24 ; 21
108: 08 95 ret
0000010a <GetKey>:
}
uchar GetKey(void)
{
10a: cf 93 push r28
uchar key=0;
10c: c0 e0 ldi r28, 0x00 ; 0
uchar key_press_status;
PORT_KEYBoard |=0x3C;//对键盘IO口初始化
10e: 85 b3 in r24, 0x15 ; 21
110: 8c 63 ori r24, 0x3C ; 60
112: 85 bb out 0x15, r24 ; 21
delay(5);
114: 85 e0 ldi r24, 0x05 ; 5
116: 0e 94 47 00 call 0x8e <delay>
key_press_status =PIN_KEYBoard;
11a: 83 b3 in r24, 0x13 ; 19
key_press_status &=0x3C;//将键值提出来
11c: 8c 73 andi r24, 0x3C ; 60
if((~key_press_status) & 0x20)
11e: 99 27 eor r25, r25
120: 80 95 com r24
122: 90 95 com r25
124: 85 fd sbrc r24, 5
{
key=PLAY_KEYBOARD;
126: c1 e0 ldi r28, 0x01 ; 1
}
if((~key_press_status) & 0x10)
128: 84 fd sbrc r24, 4
{
key=REC_KEYBOARD;
12a: c2 e0 ldi r28, 0x02 ; 2
}
if((~key_press_status) & 0x08)
12c: 83 fd sbrc r24, 3
{
key=SET_KEYBOARD;
12e: c3 e0 ldi r28, 0x03 ; 3
}
if((~key_press_status) & 0x04)
130: 82 fd sbrc r24, 2
{
key=STOP_KEYBOARD;
132: c4 e0 ldi r28, 0x04 ; 4
}
return key;
}
134: 8c 2f mov r24, r28
136: 99 27 eor r25, r25
138: cf 91 pop r28
13a: 08 95 ret
0000013c <main>:
#include "UART.c"
#include"keyboard.c"
int main(void)
{
13c: c2 e3 ldi r28, 0x32 ; 50
13e: d4 e0 ldi r29, 0x04 ; 4
140: de bf out 0x3e, r29 ; 62
142: cd bf out 0x3d, r28 ; 61
uchar key=0;
uchar commond_AT[3]="AT";
144: 83 e0 ldi r24, 0x03 ; 3
146: a0 e6 ldi r26, 0x60 ; 96
148: b0 e0 ldi r27, 0x00 ; 0
14a: fe 01 movw r30, r28
14c: 31 96 adiw r30, 0x01 ; 1
14e: 0d 90 ld r0, X+
150: 01 92 st Z+, r0
152: 8a 95 dec r24
154: e1 f7 brne .-8 ; 0x14e <main+0x12>
uchar AT_CMGF[]="AT+CMGF=1";
156: 94 e0 ldi r25, 0x04 ; 4
158: c9 2e mov r12, r25
15a: d1 2c mov r13, r1
15c: cc 0e add r12, r28
15e: dd 1e adc r13, r29
160: 8a e0 ldi r24, 0x0A ; 10
162: e3 e6 ldi r30, 0x63 ; 99
164: f0 e0 ldi r31, 0x00 ; 0
166: d6 01 movw r26, r12
168: 01 90 ld r0, Z+
16a: 0d 92 st X+, r0
16c: 8a 95 dec r24
16e: e1 f7 brne .-8 ; 0x168 <main+0x2c>
uchar AT_CMGS[24]={'A','T','+','C','M','G','S','=','"','1','3','8','8','6','8','3','2','2','6','9','"'};
170: 8e e0 ldi r24, 0x0E ; 14
172: e8 2e mov r14, r24
174: f1 2c mov r15, r1
176: ec 0e add r14, r28
178: fd 1e adc r15, r29
17a: 88 e1 ldi r24, 0x18 ; 24
17c: ed e6 ldi r30, 0x6D ; 109
17e: f0 e0 ldi r31, 0x00 ; 0
180: d7 01 movw r26, r14
182: 01 90 ld r0, Z+
184: 0d 92 st X+, r0
186: 8a 95 dec r24
188: e1 f7 brne .-8 ; 0x182 <main+0x46>
// "AT+CMGS="
uchar SMS[8]="temp:";
18a: 8e 01 movw r16, r28
18c: 0a 5d subi r16, 0xDA ; 218
18e: 1f 4f sbci r17, 0xFF ; 255
190: 86 e0 ldi r24, 0x06 ; 6
192: e5 e8 ldi r30, 0x85 ; 133
194: f0 e0 ldi r31, 0x00 ; 0
196: d8 01 movw r26, r16
198: 01 90 ld r0, Z+
19a: 0d 92 st X+, r0
19c: 8a 95 dec r24
19e: e1 f7 brne .-8 ; 0x198 <main+0x5c>
1a0: 1d a6 std Y+45, r1 ; 0x2d
1a2: 1c a6 std Y+44, r1 ; 0x2c
SMS[5]=0x1A;
1a4: 8a e1 ldi r24, 0x1A ; 26
1a6: 8b a7 std Y+43, r24 ; 0x2b
Uart_Init();
1a8: 0e 94 5a 00 call 0xb4 <Uart_Init>
keyboard_Initial();
1ac: 0e 94 7e 00 call 0xfc <keyboard_Initial>
while(1)
{
key=GetKey();
1b0: 0e 94 85 00 call 0x10a <GetKey>
if(key==PLAY_KEYBOARD)
1b4: 81 30 cpi r24, 0x01 ; 1
1b6: e1 f7 brne .-8 ; 0x1b0 <main+0x74>
{
Uart_PutString(commond_AT);
1b8: ce 01 movw r24, r28
1ba: 01 96 adiw r24, 0x01 ; 1
1bc: 0e 94 66 00 call 0xcc <Uart_PutString>
delay(20);
1c0: 84 e1 ldi r24, 0x14 ; 20
1c2: 0e 94 47 00 call 0x8e <delay>
Uart_PutString(AT_CMGF);
1c6: c6 01 movw r24, r12
1c8: 0e 94 66 00 call 0xcc <Uart_PutString>
delay(20);
1cc: 84 e1 ldi r24, 0x14 ; 20
1ce: 0e 94 47 00 call 0x8e <delay>
Uart_PutString(AT_CMGS);
1d2: c7 01 movw r24, r14
1d4: 0e 94 66 00 call 0xcc <Uart_PutString>
delay(20);
1d8: 84 e1 ldi r24, 0x14 ; 20
1da: 0e 94 47 00 call 0x8e <delay>
Uart_PutString(SMS);
1de: c8 01 movw r24, r16
1e0: 0e 94 66 00 call 0xcc <Uart_PutString>
delay(20);
1e4: 84 e1 ldi r24, 0x14 ; 20
1e6: 0e 94 47 00 call 0x8e <delay>
1ea: e2 cf rjmp .-60 ; 0x1b0 <main+0x74>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -