📄 main.lss
字号:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000450 00000000 00000000 00000074 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 0000000a 00800060 00000450 000004c4 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .stab 00000378 00000000 00000000 000004d0 2**2
CONTENTS, READONLY, DEBUGGING
3 .stabstr 00000071 00000000 00000000 00000848 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_aranges 00000020 00000000 00000000 000008b9 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_pubnames 000000f9 00000000 00000000 000008d9 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_info 00000514 00000000 00000000 000009d2 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_abbrev 0000014f 00000000 00000000 00000ee6 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_line 0000051a 00000000 00000000 00001035 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_frame 00000130 00000000 00000000 00001550 2**2
CONTENTS, READONLY, DEBUGGING
10 .debug_str 00000198 00000000 00000000 00001680 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_loc 0000037c 00000000 00000000 00001818 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: d8 e0 ldi r29, 0x08 ; 8
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: e0 e5 ldi r30, 0x50 ; 80
68: f4 e0 ldi r31, 0x04 ; 4
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: aa 36 cpi r26, 0x6A ; 106
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: aa e6 ldi r26, 0x6A ; 106
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: aa 36 cpi r26, 0x6A ; 106
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop>
86: 0e 94 dd 01 call 0x3ba ; 0x3ba <main>
8a: 0c 94 27 02 jmp 0x44e ; 0x44e <_exit>
0000008e <__bad_interrupt>:
8e: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
00000092 <delay_ms>:
_delay_loop_2(FREQ>>2);
}
void delay_ms(unsigned int ms) /*delay_ms*/
{
92: 9c 01 movw r18, r24
94: e8 ee ldi r30, 0xE8 ; 232
96: f3 e0 ldi r31, 0x03 ; 3
98: 05 c0 rjmp .+10 ; 0xa4 <delay_ms+0x12>
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
9a: cf 01 movw r24, r30
9c: 01 97 sbiw r24, 0x01 ; 1
9e: f1 f7 brne .-4 ; 0x9c <delay_ms+0xa>
}
void delay_ms(unsigned int ms) /*delay_ms*/
{
for(;ms>0;ms--)
a0: 21 50 subi r18, 0x01 ; 1
a2: 30 40 sbci r19, 0x00 ; 0
a4: 21 15 cp r18, r1
a6: 31 05 cpc r19, r1
a8: c1 f7 brne .-16 ; 0x9a <delay_ms+0x8>
aa: 08 95 ret
000000ac <delay>:
_delay_loop_2(FREQ*250);
}
void delay(unsigned int t) /*t最大为65535*/
{
ac: 08 95 ret
000000ae <LCD1602ReadBusy>:
/************************
* 检测忙信号
************************/
void LCD1602ReadBusy(void)
{
ae: a7 98 cbi 0x14, 7 ; 20
cbi(LCD_DDR,BF); //输入
sbi(LCD_PORT,BF);
b0: af 9a sbi 0x15, 7 ; 21
cbi(LCD_PORT,RS);
b2: a9 98 cbi 0x15, 1 ; 21
sbi(LCD_PORT,RW);
b4: aa 9a sbi 0x15, 2 ; 21
sbi(LCD_PORT,E);
b6: ab 9a sbi 0x15, 3 ; 21
while(chkbit(LCD_PIN,BF)); //查询
b8: 9f 99 sbic 0x13, 7 ; 19
ba: fe cf rjmp .-4 ; 0xb8 <LCD1602ReadBusy+0xa>
cbi(LCD_PORT,E);
bc: ab 98 cbi 0x15, 3 ; 21
cbi(LCD_PORT,RS);
be: a9 98 cbi 0x15, 1 ; 21
cbi(LCD_PORT,RW);
c0: aa 98 cbi 0x15, 2 ; 21
sbi(LCD_DDR,BF); //输出
c2: a7 9a sbi 0x14, 7 ; 20
*/
void
_delay_loop_1(uint8_t __count)
{
__asm__ volatile (
c4: 81 e0 ldi r24, 0x01 ; 1
c6: 8a 95 dec r24
c8: f1 f7 brne .-4 ; 0xc6 <LCD1602ReadBusy+0x18>
ca: 08 95 ret
000000cc <WriteComand>:
* lcd1602_写指令
* data: 要写到LCD寄存器的指令值
************************/
void WriteComand(unsigned char Comand)
{
cc: 1f 93 push r17
ce: 18 2f mov r17, r24
LCD1602ReadBusy();//查询状态
d0: 0e 94 57 00 call 0xae ; 0xae <LCD1602ReadBusy>
cbi(LCD_PORT,RS); //RS=0
d4: a9 98 cbi 0x15, 1 ; 21
cbi(LCD_PORT,RW); //RW=0
d6: aa 98 cbi 0x15, 2 ; 21
LCD_DDR|=0xFF; //设置为输出
d8: 84 b3 in r24, 0x14 ; 20
da: 2f ef ldi r18, 0xFF ; 255
dc: 24 bb out 0x14, r18 ; 20
sbi(LCD_PORT,E); //E=1
de: ab 9a sbi 0x15, 3 ; 21
LCD_PORT&=0x0F; //高四位清零,即数据线清零
e0: 85 b3 in r24, 0x15 ; 21
e2: 8f 70 andi r24, 0x0F ; 15
e4: 85 bb out 0x15, r24 ; 21
LCD_PORT|=Comand&0xF0; //输出高四位
e6: 85 b3 in r24, 0x15 ; 21
e8: 91 2f mov r25, r17
ea: 90 7f andi r25, 0xF0 ; 240
ec: 89 2b or r24, r25
ee: 85 bb out 0x15, r24 ; 21
cbi(LCD_PORT,E); //E=0
f0: ab 98 cbi 0x15, 3 ; 21
LCD_DDR|=0xFF; //设置为输出
f2: 84 b3 in r24, 0x14 ; 20
f4: 24 bb out 0x14, r18 ; 20
sbi(LCD_PORT,E); //E=1
f6: ab 9a sbi 0x15, 3 ; 21
LCD_PORT&=0x0F; //高四位清零,即数据线清零
f8: 85 b3 in r24, 0x15 ; 21
fa: 8f 70 andi r24, 0x0F ; 15
fc: 85 bb out 0x15, r24 ; 21
LCD_PORT|=(Comand<<4)&0xF0; //输出低四位
fe: 85 b3 in r24, 0x15 ; 21
100: 12 95 swap r17
102: 10 7f andi r17, 0xF0 ; 240
104: 81 2b or r24, r17
106: 85 bb out 0x15, r24 ; 21
cbi(LCD_PORT,E); //E=0;
108: ab 98 cbi 0x15, 3 ; 21
10a: 1f 91 pop r17
10c: 08 95 ret
0000010e <WriteData>:
}
/************************
* lcd1602_写数据
* data: 要写到LCD寄存器的数据值
************************/
void WriteData(unsigned char data)
{
10e: 1f 93 push r17
110: 18 2f mov r17, r24
LCD1602ReadBusy();//查询状态
112: 0e 94 57 00 call 0xae ; 0xae <LCD1602ReadBusy>
sbi(LCD_PORT,RS); //RS=1
116: a9 9a sbi 0x15, 1 ; 21
cbi(LCD_PORT,RW); //RW=0
118: aa 98 cbi 0x15, 2 ; 21
LCD_DDR|=0xFF; //设置为输出
11a: 84 b3 in r24, 0x14 ; 20
11c: 2f ef ldi r18, 0xFF ; 255
11e: 24 bb out 0x14, r18 ; 20
sbi(LCD_PORT,E); //E=1
120: ab 9a sbi 0x15, 3 ; 21
LCD_PORT&=0x0F; //高四位清零,即数据线清零
122: 85 b3 in r24, 0x15 ; 21
124: 8f 70 andi r24, 0x0F ; 15
126: 85 bb out 0x15, r24 ; 21
LCD_PORT|=data&0xF0; //输出高四位
128: 85 b3 in r24, 0x15 ; 21
12a: 91 2f mov r25, r17
12c: 90 7f andi r25, 0xF0 ; 240
12e: 89 2b or r24, r25
130: 85 bb out 0x15, r24 ; 21
cbi(LCD_PORT,E); //E=0
132: ab 98 cbi 0x15, 3 ; 21
LCD_DDR|=0xFF; //设置为输出
134: 84 b3 in r24, 0x14 ; 20
136: 24 bb out 0x14, r18 ; 20
sbi(LCD_PORT,E); //E=1
138: ab 9a sbi 0x15, 3 ; 21
LCD_PORT&=0x0F; //高四位清零,即数据线清零
13a: 85 b3 in r24, 0x15 ; 21
13c: 8f 70 andi r24, 0x0F ; 15
13e: 85 bb out 0x15, r24 ; 21
LCD_PORT|=(data<<4)&0xF0; //输出低四位
140: 85 b3 in r24, 0x15 ; 21
142: 12 95 swap r17
144: 10 7f andi r17, 0xF0 ; 240
146: 81 2b or r24, r17
148: 85 bb out 0x15, r24 ; 21
cbi(LCD_PORT,E); //E=0
14a: ab 98 cbi 0x15, 3 ; 21
14c: 1f 91 pop r17
14e: 08 95 ret
00000150 <Locate_xy>:
}
/************************
* 光标定位
* x,y: 位置
************************/
void Locate_xy(unsigned char x,unsigned char y)
{
150: 66 23 and r22, r22
152: 11 f4 brne .+4 ; 0x158 <Locate_xy+0x8>
unsigned char address = (y == 0) ? (0x80 + x) : (0xc0 + x);
154: 80 58 subi r24, 0x80 ; 128
156: 01 c0 rjmp .+2 ; 0x15a <Locate_xy+0xa>
158: 80 54 subi r24, 0x40 ; 64
WriteComand(address);
15a: 0e 94 66 00 call 0xcc ; 0xcc <WriteComand>
15e: 08 95 ret
00000160 <DispChar>:
}
/************************
* 显示一个字符
* data: 要显示的字符,为ASCII码
************************/
void DispChar(unsigned char data)
{
160: 0e 94 87 00 call 0x10e ; 0x10e <WriteData>
164: 08 95 ret
00000166 <XYChar>:
WriteData(data);
}
/************************
* 在(x,y)位置显示一个字符
* x,y: 位置
* data: 要显示的字符,为ASCII码
************************/
void XYChar(unsigned char x,unsigned char y,unsigned char data)
{
166: 1f 93 push r17
168: 14 2f mov r17, r20
Locate_xy(x,y);
16a: 0e 94 a8 00 call 0x150 ; 0x150 <Locate_xy>
WriteData(data);
16e: 81 2f mov r24, r17
170: 0e 94 87 00 call 0x10e ; 0x10e <WriteData>
174: 1f 91 pop r17
176: 08 95 ret
00000178 <DispString>:
}
/************************
* 显示一个字符串
* String: 要显示的字符串
************************/
void DispString(unsigned char *String)
{
178: cf 93 push r28
17a: df 93 push r29
17c: ec 01 movw r28, r24
17e: 02 c0 rjmp .+4 ; 0x184 <DispString+0xc>
unsigned int i=0;
while(String[i]!='\0')WriteData(String[i++]);
180: 0e 94 87 00 call 0x10e ; 0x10e <WriteData>
184: 89 91 ld r24, Y+
186: 88 23 and r24, r24
188: d9 f7 brne .-10 ; 0x180 <DispString+0x8>
18a: df 91 pop r29
18c: cf 91 pop r28
18e: 08 95 ret
00000190 <XYString>:
}
/************************
* 在(x,y)位置显示一个字符串
* x,y: 位置
* String: 要显示的字符串
************************/
void XYString(unsigned char x,unsigned char y,unsigned char *String)
{
190: 0f 93 push r16
192: 1f 93 push r17
194: cf 93 push r28
196: df 93 push r29
198: 8a 01 movw r16, r20
unsigned int i=0;
Locate_xy(x,y);
19a: 0e 94 a8 00 call 0x150 ; 0x150 <Locate_xy>
19e: e8 01 movw r28, r16
1a0: 02 c0 rjmp .+4 ; 0x1a6 <XYString+0x16>
//DispString(*String);
while(String[i]!='\0')WriteData(String[i++]);
1a2: 0e 94 87 00 call 0x10e ; 0x10e <WriteData>
1a6: 89 91 ld r24, Y+
1a8: 88 23 and r24, r24
1aa: d9 f7 brne .-10 ; 0x1a2 <XYString+0x12>
1ac: df 91 pop r29
1ae: cf 91 pop r28
1b0: 1f 91 pop r17
1b2: 0f 91 pop r16
1b4: 08 95 ret
000001b6 <DispNum>:
}
/************************
* 显示一个0-9的数字
* num: 要显示的数字 0~9
************************/
void DispNum(unsigned char num)
{
1b6: 80 5d subi r24, 0xD0 ; 208
1b8: 0e 94 87 00 call 0x10e ; 0x10e <WriteData>
1bc: 08 95 ret
000001be <XYNum>:
WriteData(num+0x30);
}
/************************
* 在(x,y)位置显示一个0-9的数字
* x,y: 位置
* num: 要显示的数字 0~9
************************/
void XYNum(unsigned char x,unsigned char y,unsigned char num)
{
1be: 1f 93 push r17
1c0: 14 2f mov r17, r20
Locate_xy(x,y);
1c2: 0e 94 a8 00 call 0x150 ; 0x150 <Locate_xy>
WriteData(num+0x30);
1c6: 81 2f mov r24, r17
1c8: 80 5d subi r24, 0xD0 ; 208
1ca: 0e 94 87 00 call 0x10e ; 0x10e <WriteData>
1ce: 1f 91 pop r17
1d0: 08 95 ret
000001d2 <DispHex>:
}
/************************
* 显示十六进制
* hex: 要显示的数,为十进制数 0~255
************************/
void DispHex(unsigned char hex)
{
1d2: 0f 93 push r16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -