📄 main.lss
字号:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000008c4 00000000 00000000 00000094 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 0000001a 00800060 000008c4 00000958 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000003 0080007a 0080007a 00000972 2**0
ALLOC
3 .stab 00000378 00000000 00000000 00000974 2**2
CONTENTS, READONLY, DEBUGGING
4 .stabstr 00000071 00000000 00000000 00000cec 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_aranges 00000020 00000000 00000000 00000d5d 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_pubnames 00000193 00000000 00000000 00000d7d 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_info 00000b20 00000000 00000000 00000f10 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_abbrev 000002cc 00000000 00000000 00001a30 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_line 0000098d 00000000 00000000 00001cfc 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_frame 000001c0 00000000 00000000 0000268c 2**2
CONTENTS, READONLY, DEBUGGING
11 .debug_str 0000023f 00000000 00000000 0000284c 2**0
CONTENTS, READONLY, DEBUGGING
12 .debug_loc 00000618 00000000 00000000 00002a8b 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 49 00 jmp 0x92 ; 0x92 <__ctors_end>
4: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
8: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
c: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
10: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
14: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
18: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
1c: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
20: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
24: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
28: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
2c: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
30: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
34: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
38: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
3c: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
40: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
44: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
48: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
4c: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
50: 0c 94 66 00 jmp 0xcc ; 0xcc <__bad_interrupt>
54: cc 02 muls r28, r28
56: d2 02 muls r29, r18
58: d0 02 muls r29, r16
5a: db 02 muls r29, r27
5c: db 02 muls r29, r27
5e: db 02 muls r29, r27
60: db 02 muls r29, r27
62: db 02 muls r29, r27
64: d0 02 muls r29, r16
66: d2 02 muls r29, r18
68: cc 02 muls r28, r28
6a: ce 02 muls r28, r30
6c: d0 02 muls r29, r16
6e: db 02 muls r29, r27
70: db 02 muls r29, r27
72: db 02 muls r29, r27
74: db 02 muls r29, r27
76: db 02 muls r29, r27
78: d4 02 muls r29, r20
7a: d2 02 muls r29, r18
7c: d2 02 muls r29, r18
7e: d2 02 muls r29, r18
80: d4 02 muls r29, r20
82: db 02 muls r29, r27
84: db 02 muls r29, r27
86: db 02 muls r29, r27
88: db 02 muls r29, r27
8a: d6 02 muls r29, r22
8c: d8 02 muls r29, r24
8e: d8 02 muls r29, r24
90: d8 02 muls r29, r24
00000092 <__ctors_end>:
92: 11 24 eor r1, r1
94: 1f be out 0x3f, r1 ; 63
96: cf e5 ldi r28, 0x5F ; 95
98: d4 e0 ldi r29, 0x04 ; 4
9a: de bf out 0x3e, r29 ; 62
9c: cd bf out 0x3d, r28 ; 61
0000009e <__do_copy_data>:
9e: 10 e0 ldi r17, 0x00 ; 0
a0: a0 e6 ldi r26, 0x60 ; 96
a2: b0 e0 ldi r27, 0x00 ; 0
a4: e4 ec ldi r30, 0xC4 ; 196
a6: f8 e0 ldi r31, 0x08 ; 8
a8: 02 c0 rjmp .+4 ; 0xae <.do_copy_data_start>
000000aa <.do_copy_data_loop>:
aa: 05 90 lpm r0, Z+
ac: 0d 92 st X+, r0
000000ae <.do_copy_data_start>:
ae: aa 37 cpi r26, 0x7A ; 122
b0: b1 07 cpc r27, r17
b2: d9 f7 brne .-10 ; 0xaa <.do_copy_data_loop>
000000b4 <__do_clear_bss>:
b4: 10 e0 ldi r17, 0x00 ; 0
b6: aa e7 ldi r26, 0x7A ; 122
b8: b0 e0 ldi r27, 0x00 ; 0
ba: 01 c0 rjmp .+2 ; 0xbe <.do_clear_bss_start>
000000bc <.do_clear_bss_loop>:
bc: 1d 92 st X+, r1
000000be <.do_clear_bss_start>:
be: ad 37 cpi r26, 0x7D ; 125
c0: b1 07 cpc r27, r17
c2: e1 f7 brne .-8 ; 0xbc <.do_clear_bss_loop>
c4: 0e 94 12 04 call 0x824 ; 0x824 <main>
c8: 0c 94 61 04 jmp 0x8c2 ; 0x8c2 <_exit>
000000cc <__bad_interrupt>:
cc: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
000000d0 <sendbyte>:
//向LCD发送一个字节******************************************************************************
void sendbyte(unsigned char senddata)
{
d0: 48 2f mov r20, r24
int i=0,j=0;
Set_WData(); //数据输出,DDRA=0XFF; 设置端口A为写(输出)
d2: 8f ef ldi r24, 0xFF ; 255
d4: 8a bb out 0x1a, r24 ; 26
cS_1(); //模组片选端有效
d6: db 9a sbi 0x1b, 3 ; 27
CLK_0(); //时钟设低电平,以便产生上升沿
d8: d9 98 cbi 0x1b, 1 ; 27
da: 20 e0 ldi r18, 0x00 ; 0
dc: 30 e0 ldi r19, 0x00 ; 0
de: e1 e0 ldi r30, 0x01 ; 1
e0: f0 e0 ldi r31, 0x00 ; 0
for(i=0;i<8;i++) //八位
{
if(senddata&0x80) //从高到低将数据传送到LCD,如果该位是1则SID置1,否则SID置0
e2: 47 ff sbrs r20, 7
e4: 02 c0 rjmp .+4 ; 0xea <sendbyte+0x1a>
SID_1();
e6: da 9a sbi 0x1b, 2 ; 27
e8: 01 c0 rjmp .+2 ; 0xec <sendbyte+0x1c>
else
SID_0();
ea: da 98 cbi 0x1b, 2 ; 27
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
ec: cf 01 movw r24, r30
ee: 01 97 sbiw r24, 0x01 ; 1
f0: f1 f7 brne .-4 ; 0xee <sendbyte+0x1e>
_delay_ms(0.0001); //延时
CLK_1(); //上升沿读取SID数据写到LCD
f2: d9 9a sbi 0x1b, 1 ; 27
senddata<<=1; //数据左移一位
CLK_0(); //时钟设低电平
f4: d9 98 cbi 0x1b, 1 ; 27
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
f6: cf 01 movw r24, r30
f8: 01 97 sbiw r24, 0x01 ; 1
fa: f1 f7 brne .-4 ; 0xf8 <sendbyte+0x28>
fc: 2f 5f subi r18, 0xFF ; 255
fe: 3f 4f sbci r19, 0xFF ; 255
100: 28 30 cpi r18, 0x08 ; 8
102: 31 05 cpc r19, r1
104: 11 f0 breq .+4 ; 0x10a <sendbyte+0x3a>
106: 44 0f add r20, r20
108: ec cf rjmp .-40 ; 0xe2 <sendbyte+0x12>
_delay_ms(0.0001);
}
cS_0(); //片选无效
10a: db 98 cbi 0x1b, 3 ; 27
10c: 08 95 ret
0000010e <readByte>:
}
//从LCD读一个字节**********************************************************************************
//参数 readtype 指明所要读的数据是"指令数据"还是"显示数据"
unsigned char readByte(unsigned char readtype)
{
10e: 9f ef ldi r25, 0xFF ; 255
110: 9a bb out 0x1a, r25 ; 26
int i=0;
Set_WData(); //数据输出
sendbyte(readtype); //告诉LCD读什么样的数据
112: 0e 94 68 00 call 0xd0 ; 0xd0 <sendbyte>
cS_1(); //模组片选端有效
116: db 9a sbi 0x1b, 3 ; 27
CLK_0(); //低电平,以便产生上升沿
118: d9 98 cbi 0x1b, 1 ; 27
//DDRA&=0xFB; // set SID(PA2) input,others ouput
Set_RData();
11a: 8b ef ldi r24, 0xFB ; 251
11c: 8a bb out 0x1a, r24 ; 26
11e: 20 e0 ldi r18, 0x00 ; 0
120: 30 e0 ldi r19, 0x00 ; 0
122: 60 e0 ldi r22, 0x00 ; 0
124: e0 ed ldi r30, 0xD0 ; 208
126: f7 e0 ldi r31, 0x07 ; 7
unsigned char temph=0,templ=0,temp=0;
for(i=0;i<7;i++) //读高四位
{
CLK_1(); //上升沿,读一位
128: d9 9a sbi 0x1b, 1 ; 27
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
12a: cf 01 movw r24, r30
12c: 01 97 sbiw r24, 0x01 ; 1
12e: f1 f7 brne .-4 ; 0x12c <readByte+0x1e>
_delay_ms(1);
if(PINA&0x04)
130: ca 99 sbic 0x19, 2 ; 25
temph=temph|1;
132: 61 60 ori r22, 0x01 ; 1
temph<<=1; //存到temph中
134: 66 0f add r22, r22
CLK_0();
136: d9 98 cbi 0x1b, 1 ; 27
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
138: cf 01 movw r24, r30
13a: 01 97 sbiw r24, 0x01 ; 1
13c: f1 f7 brne .-4 ; 0x13a <readByte+0x2c>
13e: 2f 5f subi r18, 0xFF ; 255
140: 3f 4f sbci r19, 0xFF ; 255
142: 27 30 cpi r18, 0x07 ; 7
144: 31 05 cpc r19, r1
146: 81 f7 brne .-32 ; 0x128 <readByte+0x1a>
_delay_ms(1);
}
CLK_1(); //上升沿,读一位
148: d9 9a sbi 0x1b, 1 ; 27
CLK_0();
14a: d9 98 cbi 0x1b, 1 ; 27
14c: 40 e0 ldi r20, 0x00 ; 0
14e: 50 e0 ldi r21, 0x00 ; 0
150: 20 e0 ldi r18, 0x00 ; 0
152: e0 ed ldi r30, 0xD0 ; 208
154: f7 e0 ldi r31, 0x07 ; 7
for(i=0;i<7;i++) //读低四位
{
CLK_1();
156: d9 9a sbi 0x1b, 1 ; 27
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
158: cf 01 movw r24, r30
15a: 01 97 sbiw r24, 0x01 ; 1
15c: f1 f7 brne .-4 ; 0x15a <readByte+0x4c>
_delay_ms(1);
if(PINA&0x04)
15e: ca 99 sbic 0x19, 2 ; 25
templ=templ|1;
160: 21 60 ori r18, 0x01 ; 1
templ<<=1; //存到templ中
162: 22 0f add r18, r18
CLK_0();
164: d9 98 cbi 0x1b, 1 ; 27
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
166: cf 01 movw r24, r30
168: 01 97 sbiw r24, 0x01 ; 1
16a: f1 f7 brne .-4 ; 0x168 <readByte+0x5a>
16c: 4f 5f subi r20, 0xFF ; 255
16e: 5f 4f sbci r21, 0xFF ; 255
170: 47 30 cpi r20, 0x07 ; 7
172: 51 05 cpc r21, r1
174: 81 f7 brne .-32 ; 0x156 <readByte+0x48>
_delay_ms(1);
}
CLK_1(); //上升沿,读一位
176: d9 9a sbi 0x1b, 1 ; 27
temp=(temph&0xf0)|((templ&0xf0)>>4); //存到temp中
Set_WData(); // GPDIR 的CS,SID,SCLK为输出
178: 8f ef ldi r24, 0xFF ; 255
17a: 8a bb out 0x1a, r24 ; 26
cS_0(); //模组片选无效
17c: db 98 cbi 0x1b, 3 ; 27
17e: 60 7f andi r22, 0xF0 ; 240
180: 22 95 swap r18
182: 2f 70 andi r18, 0x0F ; 15
184: 26 2b or r18, r22
return(temp);
}
186: 82 2f mov r24, r18
188: 99 27 eor r25, r25
18a: 08 95 ret
0000018c <busywait>:
//判断忙否,直到不忙才往下运行***********************************************************************
void busywait(void)
{
18c: 8c ef ldi r24, 0xFC ; 252
18e: 0e 94 87 00 call 0x10e ; 0x10e <readByte>
unsigned char bf;
do
{
bf=readByte(_rcomm_); //读指令
}
while(bf&0x80);
192: 87 fd sbrc r24, 7
194: fb cf rjmp .-10 ; 0x18c <busywait>
196: 08 95 ret
00000198 <wr_comm_lcd>:
}
//写入一个字节的命令******************************************************************************
//参数 command 指明所要写入LCD的命令
void wr_comm_lcd(unsigned char command)
{
198: 1f 93 push r17
19a: 18 2f mov r17, r24
//busywait(); //忙否
sendbyte(_wcomm_); //告诉LCD要写指令了
19c: 88 ef ldi r24, 0xF8 ; 248
19e: 0e 94 68 00 call 0xd0 ; 0xd0 <sendbyte>
sendbyte(command&0xf0); //写指令的高四位
1a2: 81 2f mov r24, r17
1a4: 80 7f andi r24, 0xF0 ; 240
1a6: 0e 94 68 00 call 0xd0 ; 0xd0 <sendbyte>
sendbyte((command&0x0f)<<4); //写指令的低四位
1aa: 81 2f mov r24, r17
1ac: 82 95 swap r24
1ae: 80 7f andi r24, 0xF0 ; 240
1b0: 0e 94 68 00 call 0xd0 ; 0xd0 <sendbyte>
1b4: 1f 91 pop r17
1b6: 08 95 ret
000001b8 <wr_data_lcd>:
}
//写入一个字节的数据*****************************************************************************
//参数 wdata 指明所要发送的显示数据
void wr_data_lcd(unsigned char wdata)
{
1b8: 1f 93 push r17
1ba: 18 2f mov r17, r24
//busywait(); //忙否
sendbyte(_wdata_); //告诉LCD要写数据了
1bc: 8a ef ldi r24, 0xFA ; 250
1be: 0e 94 68 00 call 0xd0 ; 0xd0 <sendbyte>
sendbyte(wdata&0xF0); //写数据的高四位
1c2: 81 2f mov r24, r17
1c4: 80 7f andi r24, 0xF0 ; 240
1c6: 0e 94 68 00 call 0xd0 ; 0xd0 <sendbyte>
sendbyte((wdata&0x0F)<<4); //写数据的低四位
1ca: 81 2f mov r24, r17
1cc: 82 95 swap r24
1ce: 80 7f andi r24, 0xF0 ; 240
1d0: 0e 94 68 00 call 0xd0 ; 0xd0 <sendbyte>
1d4: 1f 91 pop r17
1d6: 08 95 ret
000001d8 <init_lcd>:
}
//液晶屏幕初始化************************************************************************************
void init_lcd(void)
{
1d8: 0f 93 push r16
1da: 1f 93 push r17
RET_0(); //复位 低电平有效
1dc: d8 98 cbi 0x1b, 0 ; 27
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
1de: 00 ed ldi r16, 0xD0 ; 208
1e0: 17 e0 ldi r17, 0x07 ; 7
1e2: c8 01 movw r24, r16
1e4: 01 97 sbiw r24, 0x01 ; 1
1e6: f1 f7 brne .-4 ; 0x1e4 <init_lcd+0xc>
_delay_ms(1); //延时
RET_1();
1e8: d8 9a sbi 0x1b, 0 ; 27
Set_WData(); //写(输出)
1ea: 8f ef ldi r24, 0xFF ; 255
1ec: 8a bb out 0x1a, r24 ; 26
wr_comm_lcd(0x30); //功能设置,基本指令集动作
1ee: 80 e3 ldi r24, 0x30 ; 48
1f0: 0e 94 cc 00 call 0x198 ; 0x198 <wr_comm_lcd>
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
1f4: c8 01 movw r24, r16
1f6: 01 97 sbiw r24, 0x01 ; 1
1f8: f1 f7 brne .-4 ; 0x1f6 <init_lcd+0x1e>
_delay_ms(1); //延时
wr_comm_lcd(0x0c); //显示状态ON,游标OFF,反白OFF
1fa: 8c e0 ldi r24, 0x0C ; 12
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -