📄 main.lss
字号:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000020e 00000000 00000000 00000074 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000024 00800060 0000020e 00000282 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .stab 00000378 00000000 00000000 000002a8 2**2
CONTENTS, READONLY, DEBUGGING
3 .stabstr 00000071 00000000 00000000 00000620 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_aranges 00000040 00000000 00000000 00000691 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_pubnames 000000b7 00000000 00000000 000006d1 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_info 000003b9 00000000 00000000 00000788 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_abbrev 0000018a 00000000 00000000 00000b41 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_line 00000365 00000000 00000000 00000ccb 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_frame 000000a0 00000000 00000000 00001030 2**2
CONTENTS, READONLY, DEBUGGING
10 .debug_str 0000014b 00000000 00000000 000010d0 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_loc 0000016b 00000000 00000000 0000121b 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: ee e0 ldi r30, 0x0E ; 14
68: f2 e0 ldi r31, 0x02 ; 2
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: a4 38 cpi r26, 0x84 ; 132
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: a4 e8 ldi r26, 0x84 ; 132
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: a4 38 cpi r26, 0x84 ; 132
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop>
86: 0e 94 ec 00 call 0x1d8 ; 0x1d8 <main>
8a: 0c 94 06 01 jmp 0x20c ; 0x20c <_exit>
0000008e <__bad_interrupt>:
8e: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
00000092 <ReadStatusLCM>:
//读状态
void ReadStatusLCM(void)
{
92: bf 98 cbi 0x17, 7 ; 23
LCM_BUSY_DDR&=~BUSY;//设置BUSY口为输入
LCM_CTRL_PORT&=~(1<<LCM_RS);//RS=0
94: 91 98 cbi 0x12, 1 ; 18
LCM_CTRL_PORT|=(1<<LCM_RW);//RW=1
96: 92 9a sbi 0x12, 2 ; 18
LCM_CTRL_PORT|=(1<<LCM_EN);//E=1
98: 93 9a sbi 0x12, 3 ; 18
while(LCM_BUSY_PIN&BUSY);//等待LCD_DB7为0
9a: b7 99 sbic 0x16, 7 ; 22
9c: fe cf rjmp .-4 ; 0x9a <ReadStatusLCM+0x8>
LCM_CTRL_PORT&=~(1<<LCM_EN);//重设E=0
9e: 93 98 cbi 0x12, 3 ; 18
LCM_BUSY_DDR|=BUSY;//设置BUSY口为输出
a0: bf 9a sbi 0x17, 7 ; 23
a2: 08 95 ret
000000a4 <WriteCommandLCM>:
a4: 1f 93 push r17
a6: 18 2f mov r17, r24
a8: 66 23 and r22, r22
aa: 11 f0 breq .+4 ; 0xb0 <WriteCommandLCM+0xc>
ac: 0e 94 49 00 call 0x92 ; 0x92 <ReadStatusLCM>
b0: 91 98 cbi 0x12, 1 ; 18
b2: 92 98 cbi 0x12, 2 ; 18
b4: 93 98 cbi 0x12, 3 ; 18
b6: 93 9a sbi 0x12, 3 ; 18
b8: 18 bb out 0x18, r17 ; 24
ba: 93 98 cbi 0x12, 3 ; 18
bc: 1f 91 pop r17
be: 08 95 ret
000000c0 <WriteDataLCM>:
c0: 1f 93 push r17
c2: 18 2f mov r17, r24
c4: 0e 94 49 00 call 0x92 ; 0x92 <ReadStatusLCM>
c8: 91 9a sbi 0x12, 1 ; 18
ca: 92 98 cbi 0x12, 2 ; 18
cc: 93 98 cbi 0x12, 3 ; 18
ce: 93 9a sbi 0x12, 3 ; 18
d0: 18 bb out 0x18, r17 ; 24
d2: 93 98 cbi 0x12, 3 ; 18
d4: 1f 91 pop r17
d6: 08 95 ret
000000d8 <WriteUserImgLCM>:
d8: 0f 93 push r16
da: 1f 93 push r17
dc: cf 93 push r28
de: df 93 push r29
e0: c0 e0 ldi r28, 0x00 ; 0
e2: d0 e0 ldi r29, 0x00 ; 0
e4: 00 e6 ldi r16, 0x60 ; 96
e6: 10 e0 ldi r17, 0x00 ; 0
e8: 61 e0 ldi r22, 0x01 ; 1
ea: 9e 01 movw r18, r28
ec: 20 64 ori r18, 0x40 ; 64
ee: 82 2f mov r24, r18
f0: 0e 94 52 00 call 0xa4 ; 0xa4 <WriteCommandLCM>
f4: f8 01 movw r30, r16
f6: 81 91 ld r24, Z+
f8: 8f 01 movw r16, r30
fa: 0e 94 60 00 call 0xc0 ; 0xc0 <WriteDataLCM>
fe: 21 96 adiw r28, 0x01 ; 1
100: c8 30 cpi r28, 0x08 ; 8
102: d1 05 cpc r29, r1
104: 89 f7 brne .-30 ; 0xe8 <WriteUserImgLCM+0x10>
106: df 91 pop r29
108: cf 91 pop r28
10a: 1f 91 pop r17
10c: 0f 91 pop r16
10e: 08 95 ret
00000110 <DisplayOneChar>:
}
void LCMInit(void) //LCM初始化
{
_delay_ms(15);
WriteCommandLCM(0x38,0); //三次显示模式设置,不检测忙信号
_delay_ms(5);
WriteCommandLCM(0x38,0);
_delay_ms(5);
WriteCommandLCM(0x38,0);
_delay_ms(5);
WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
WriteCommandLCM(0x08,1); //关闭显示
WriteCommandLCM(0x01,1); //显示清屏
WriteCommandLCM(0x06,1); // 显示光标移动设置
//WriteCommandLCM(0x0F,1); // 显示开及光标设置(有光标)
WriteCommandLCM(0x0C,1); // 显示开及光标设置(无光标)
WriteUserImgLCM();
}
//按指定位置显示一个字符
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
{
110: 1f 93 push r17
112: 14 2f mov r17, r20
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
114: 8f 70 andi r24, 0x0F ; 15
if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
116: 60 fd sbrc r22, 0
118: 80 64 ori r24, 0x40 ; 64
X |= 0x80; //算出指令码
WriteCommandLCM(X, 1); //发命令字
11a: 61 e0 ldi r22, 0x01 ; 1
11c: 80 68 ori r24, 0x80 ; 128
11e: 0e 94 52 00 call 0xa4 ; 0xa4 <WriteCommandLCM>
WriteDataLCM(DData); //发数据
122: 81 2f mov r24, r17
124: 0e 94 60 00 call 0xc0 ; 0xc0 <WriteDataLCM>
128: 1f 91 pop r17
12a: 08 95 ret
0000012c <DisplayListChar>:
}
//按指定位置显示一串字符
void DisplayListChar(unsigned char X, unsigned char Y, unsigned char *DData)
{
12c: ff 92 push r15
12e: 0f 93 push r16
130: 1f 93 push r17
132: cf 93 push r28
134: df 93 push r29
136: 06 2f mov r16, r22
138: ea 01 movw r28, r20
unsigned char ListLength;
ListLength = 0;
Y &= 0x1;
13a: 01 70 andi r16, 0x01 ; 1
X &= 0xF; //限制X不能大于15,Y不能大于1
13c: 18 2f mov r17, r24
13e: 1f 70 andi r17, 0x0F ; 15
140: ff 24 eor r15, r15
142: 08 c0 rjmp .+16 ; 0x154 <DisplayListChar+0x28>
while (DData[ListLength]>0x19) //若到达字串尾则退出
{
if (X <= 0xF) //X坐标应小于0xF
144: 10 31 cpi r17, 0x10 ; 16
146: 30 f4 brcc .+12 ; 0x154 <DisplayListChar+0x28>
{
DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
148: 60 2f mov r22, r16
14a: 81 2f mov r24, r17
14c: 0e 94 88 00 call 0x110 ; 0x110 <DisplayOneChar>
ListLength++;
150: f3 94 inc r15
X++;
152: 1f 5f subi r17, 0xFF ; 255
154: fe 01 movw r30, r28
156: ef 0d add r30, r15
158: f1 1d adc r31, r1
15a: 40 81 ld r20, Z
15c: 4a 31 cpi r20, 0x1A ; 26
15e: 90 f7 brcc .-28 ; 0x144 <DisplayListChar+0x18>
160: df 91 pop r29
162: cf 91 pop r28
164: 1f 91 pop r17
166: 0f 91 pop r16
168: ff 90 pop r15
16a: 08 95 ret
0000016c <LCMInit>:
16c: 0f 93 push r16
16e: 1f 93 push r17
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
170: 80 e3 ldi r24, 0x30 ; 48
172: 95 e7 ldi r25, 0x75 ; 117
174: 01 97 sbiw r24, 0x01 ; 1
176: f1 f7 brne .-4 ; 0x174 <LCMInit+0x8>
178: 60 e0 ldi r22, 0x00 ; 0
17a: 88 e3 ldi r24, 0x38 ; 56
17c: 0e 94 52 00 call 0xa4 ; 0xa4 <WriteCommandLCM>
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
180: 00 e1 ldi r16, 0x10 ; 16
182: 17 e2 ldi r17, 0x27 ; 39
184: c8 01 movw r24, r16
186: 01 97 sbiw r24, 0x01 ; 1
188: f1 f7 brne .-4 ; 0x186 <LCMInit+0x1a>
18a: 60 e0 ldi r22, 0x00 ; 0
18c: 88 e3 ldi r24, 0x38 ; 56
18e: 0e 94 52 00 call 0xa4 ; 0xa4 <WriteCommandLCM>
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
192: c8 01 movw r24, r16
194: 01 97 sbiw r24, 0x01 ; 1
196: f1 f7 brne .-4 ; 0x194 <LCMInit+0x28>
198: 60 e0 ldi r22, 0x00 ; 0
19a: 88 e3 ldi r24, 0x38 ; 56
19c: 0e 94 52 00 call 0xa4 ; 0xa4 <WriteCommandLCM>
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
1a0: c8 01 movw r24, r16
1a2: 01 97 sbiw r24, 0x01 ; 1
1a4: f1 f7 brne .-4 ; 0x1a2 <LCMInit+0x36>
1a6: 61 e0 ldi r22, 0x01 ; 1
1a8: 88 e3 ldi r24, 0x38 ; 56
1aa: 0e 94 52 00 call 0xa4 ; 0xa4 <WriteCommandLCM>
1ae: 61 e0 ldi r22, 0x01 ; 1
1b0: 88 e0 ldi r24, 0x08 ; 8
1b2: 0e 94 52 00 call 0xa4 ; 0xa4 <WriteCommandLCM>
1b6: 61 e0 ldi r22, 0x01 ; 1
1b8: 81 e0 ldi r24, 0x01 ; 1
1ba: 0e 94 52 00 call 0xa4 ; 0xa4 <WriteCommandLCM>
1be: 61 e0 ldi r22, 0x01 ; 1
1c0: 86 e0 ldi r24, 0x06 ; 6
1c2: 0e 94 52 00 call 0xa4 ; 0xa4 <WriteCommandLCM>
1c6: 61 e0 ldi r22, 0x01 ; 1
1c8: 8c e0 ldi r24, 0x0C ; 12
1ca: 0e 94 52 00 call 0xa4 ; 0xa4 <WriteCommandLCM>
1ce: 0e 94 6c 00 call 0xd8 ; 0xd8 <WriteUserImgLCM>
1d2: 1f 91 pop r17
1d4: 0f 91 pop r16
1d6: 08 95 ret
000001d8 <main>:
int main(void)
{
1d8: 8f ef ldi r24, 0xFF ; 255
1da: 88 bb out 0x18, r24 ; 24
LCM_DATA_PORT=0xff;
LCM_DATA_DDR=0xff;
1dc: 87 bb out 0x17, r24 ; 23
LCM_CTRL_PORT|=(1<<LCM_RS)|(1<<LCM_RW)|(1<<LCM_EN);
1de: 82 b3 in r24, 0x12 ; 18
1e0: 8e 60 ori r24, 0x0E ; 14
1e2: 82 bb out 0x12, r24 ; 18
LCM_CTRL_DDR|=(1<<LCM_RS)|(1<<LCM_RW)|(1<<LCM_EN);
1e4: 81 b3 in r24, 0x11 ; 17
1e6: 8e 60 ori r24, 0x0E ; 14
1e8: 81 bb out 0x11, r24 ; 17
LCM_LED_PORT&=~(1<<LCM_LED);//LCM_LCD ON
1ea: 90 98 cbi 0x12, 0 ; 18
LCM_LED_DDR|=(1<<LCM_LED);
1ec: 88 9a sbi 0x11, 0 ; 17
LCMInit();
1ee: 0e 94 b6 00 call 0x16c ; 0x16c <LCMInit>
DisplayListChar(0,0,"Welcome...");
1f2: 48 e6 ldi r20, 0x68 ; 104
1f4: 50 e0 ldi r21, 0x00 ; 0
1f6: 60 e0 ldi r22, 0x00 ; 0
1f8: 80 e0 ldi r24, 0x00 ; 0
1fa: 0e 94 96 00 call 0x12c ; 0x12c <DisplayListChar>
DisplayListChar(0,1,"LCD1602 Test OK!");
1fe: 43 e7 ldi r20, 0x73 ; 115
200: 50 e0 ldi r21, 0x00 ; 0
202: 61 e0 ldi r22, 0x01 ; 1
204: 80 e0 ldi r24, 0x00 ; 0
206: 0e 94 96 00 call 0x12c ; 0x12c <DisplayListChar>
20a: ff cf rjmp .-2 ; 0x20a <main+0x32>
0000020c <_exit>:
20c: ff cf rjmp .-2 ; 0x20c <_exit>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -