📄 main.lss
字号:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000001c8 00000000 00000000 00000074 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .bss 00000003 00800060 000001c8 0000023c 2**0
ALLOC
2 .debug_aranges 00000020 00000000 00000000 0000023c 2**0
CONTENTS, READONLY, DEBUGGING
3 .debug_pubnames 000000c2 00000000 00000000 0000025c 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_info 000003be 00000000 00000000 0000031e 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_abbrev 00000161 00000000 00000000 000006dc 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_line 000003b0 00000000 00000000 0000083d 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_frame 000000c0 00000000 00000000 00000bf0 2**2
CONTENTS, READONLY, DEBUGGING
8 .debug_str 0000017f 00000000 00000000 00000cb0 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_loc 000000e5 00000000 00000000 00000e2f 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: e8 ec ldi r30, 0xC8 ; 200
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: a0 36 cpi r26, 0x60 ; 96
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: a0 e6 ldi r26, 0x60 ; 96
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: a3 36 cpi r26, 0x63 ; 99
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop>
86: 0e 94 c5 00 call 0x18a ; 0x18a <main>
8a: 0c 94 e2 00 jmp 0x1c4 ; 0x1c4 <_exit>
0000008e <__bad_interrupt>:
8e: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
00000092 <spi_init>:
void spi_init(void);
void spi_send(uint8_t cdata);
void spi_init(void)
{
92: 8f eb ldi r24, 0xBF ; 191
94: 87 bb out 0x17, r24 ; 23
/* 设置MOSI 和SCK 为输出,其他为输入 */
DDRB = 0xbf;
/* 使能SPI 主机模式,设置时钟速率为fck/16 */
SPCR = 0x11;
96: 81 e1 ldi r24, 0x11 ; 17
98: 8d b9 out 0x0d, r24 ; 13
}
9a: 08 95 ret
0000009c <spi_send>:
void spi_send(uint8_t cdata)
{
9c: 8f b9 out 0x0f, r24 ; 15
/* 启动数据传输 */
SPDR = cdata;
/* 等待传输结束 */
while(!(SPSR & (1<<SPIF)));
9e: 77 9b sbis 0x0e, 7 ; 14
a0: fe cf rjmp .-4 ; 0x9e <spi_send+0x2>
}
a2: 08 95 ret
000000a4 <lcd_write>:
if((lcd_addr>=0x80)&&(lcd_addr<=0x9f)) lcd_wri(lcd_addr);
lcd_wrd(dis_data);
}
void lcd_write(uint8_t lcd_data1,uint8_t lcd_data2,uint8_t lcd_data3)
{
a4: c0 9a sbi 0x18, 0 ; 24
PORTB|=(1<<lcd_cs); //LCD选通
SPCR|=(1<<SPE); //SPI使能
a6: 6e 9a sbi 0x0d, 6 ; 13
SPDR=lcd_data1; //SPI传送第一字节
a8: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR&(1<<SPIF)));//等待传送完成
aa: 77 9b sbis 0x0e, 7 ; 14
ac: fe cf rjmp .-4 ; 0xaa <lcd_write+0x6>
SPDR=lcd_data2; //SPI传送第一字节
ae: 6f b9 out 0x0f, r22 ; 15
while(!(SPSR&(1<<SPIF)));
b0: 77 9b sbis 0x0e, 7 ; 14
b2: fe cf rjmp .-4 ; 0xb0 <lcd_write+0xc>
SPDR=lcd_data3; //SPI传送第一字节
b4: 4f b9 out 0x0f, r20 ; 15
while(!(SPSR&(1<<SPIF)));
b6: 77 9b sbis 0x0e, 7 ; 14
b8: fe cf rjmp .-4 ; 0xb6 <lcd_write+0x12>
SPCR&=(~(1<<SPE)); //SPI关闭
ba: 6e 98 cbi 0x0d, 6 ; 13
PORTB&=(~(1<<lcd_cs)); //LCD关闭
bc: c0 98 cbi 0x18, 0 ; 24
}
be: 08 95 ret
000000c0 <lcd_wrd>:
lcd_tmp3=data_i<<4; //第三字节为D3 D2 D1 D0 0 0 0 0
lcd_write(lcd_tmp1,lcd_tmp2,lcd_tmp3);
}
void lcd_wrd(uint8_t data_d)
{
c0: 9a ef ldi r25, 0xFA ; 250
c2: 90 93 60 00 sts 0x0060, r25
lcd_tmp1=0xfa; //串行通讯第一字节为1 1 1 1 1 1 Rw Rs 0
//写数据RS=1 RW=0
lcd_tmp2=data_d&0xf0; //第二字节为D7 D6 D5 D4 0 0 0 0
c6: 68 2f mov r22, r24
c8: 60 7f andi r22, 0xF0 ; 240
ca: 60 93 62 00 sts 0x0062, r22
lcd_tmp3=data_d<<4; //第三字节为D3 D2 D1 D0 0 0 0 0
ce: 82 95 swap r24
d0: 80 7f andi r24, 0xF0 ; 240
d2: 80 93 61 00 sts 0x0061, r24
lcd_write(lcd_tmp1,lcd_tmp2,lcd_tmp3);
d6: 48 2f mov r20, r24
d8: 8a ef ldi r24, 0xFA ; 250
da: 0e 94 52 00 call 0xa4 ; 0xa4 <lcd_write>
}
de: 08 95 ret
000000e0 <lcd_wri>:
_delay_ms(10);
lcd_wri(0x06);//DDRAM的地址计数器(AC)加1
}
void lcd_wri(uint8_t data_i)
{
e0: 98 ef ldi r25, 0xF8 ; 248
e2: 90 93 60 00 sts 0x0060, r25
lcd_tmp1=0xf8; //串行通讯第一字节为1 1 1 1 1 1 Rw Rs 0
//写指令RS=RW=0
lcd_tmp2=data_i&0xf0;//第二字节为D7 D6 D5 D4 0 0 0 0
e6: 68 2f mov r22, r24
e8: 60 7f andi r22, 0xF0 ; 240
ea: 60 93 62 00 sts 0x0062, r22
lcd_tmp3=data_i<<4; //第三字节为D3 D2 D1 D0 0 0 0 0
ee: 82 95 swap r24
f0: 80 7f andi r24, 0xF0 ; 240
f2: 80 93 61 00 sts 0x0061, r24
lcd_write(lcd_tmp1,lcd_tmp2,lcd_tmp3);
f6: 48 2f mov r20, r24
f8: 88 ef ldi r24, 0xF8 ; 248
fa: 0e 94 52 00 call 0xa4 ; 0xa4 <lcd_write>
}
fe: 08 95 ret
00000100 <lcd_dis>:
{
lcd_wri(1);
}
void lcd_dis(uint8_t lcd_addr,uint8_t dis_data)
{
100: 1f 93 push r17
102: 98 2f mov r25, r24
104: 16 2f mov r17, r22
if((lcd_addr>=0x80)&&(lcd_addr<=0x9f)) lcd_wri(lcd_addr);
106: 80 58 subi r24, 0x80 ; 128
108: 80 32 cpi r24, 0x20 ; 32
10a: 18 f4 brcc .+6 ; 0x112 <lcd_dis+0x12>
10c: 89 2f mov r24, r25
10e: 0e 94 70 00 call 0xe0 ; 0xe0 <lcd_wri>
lcd_wrd(dis_data);
112: 81 2f mov r24, r17
114: 0e 94 60 00 call 0xc0 ; 0xc0 <lcd_wrd>
}
118: 1f 91 pop r17
11a: 08 95 ret
0000011c <lcd_clear>:
lcd_write(lcd_tmp1,lcd_tmp2,lcd_tmp3);
}
void lcd_clear(void)
{
11c: 81 e0 ldi r24, 0x01 ; 1
11e: 0e 94 70 00 call 0xe0 ; 0xe0 <lcd_wri>
lcd_wri(1);
}
122: 08 95 ret
00000124 <lcd_init>:
void lcd_clear(void);//清屏
uint8_t lcd_tmp1,lcd_tmp2,lcd_tmp3;
void lcd_init(void)
{
124: 0f 93 push r16
126: 1f 93 push r17
milliseconds can be achieved.
*/
void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
128: 80 e6 ldi r24, 0x60 ; 96
12a: 9a ee ldi r25, 0xEA ; 234
12c: 01 97 sbiw r24, 0x01 ; 1
12e: f1 f7 brne .-4 ; 0x12c <lcd_init+0x8>
_delay_ms(40);//延时40ms
lcd_wri(0x30);//功能设置---8BIT控制界面,基本指令集
130: 80 e3 ldi r24, 0x30 ; 48
132: 0e 94 70 00 call 0xe0 ; 0xe0 <lcd_wri>
136: 0c ed ldi r16, 0xDC ; 220
138: 15 e0 ldi r17, 0x05 ; 5
13a: c8 01 movw r24, r16
13c: 01 97 sbiw r24, 0x01 ; 1
13e: f1 f7 brne .-4 ; 0x13c <lcd_init+0x18>
_delay_ms(1);
lcd_wri(0x0c);//显示打开,光标关,反白显示关
140: 8c e0 ldi r24, 0x0C ; 12
142: 0e 94 70 00 call 0xe0 ; 0xe0 <lcd_wri>
146: c8 01 movw r24, r16
148: 01 97 sbiw r24, 0x01 ; 1
14a: f1 f7 brne .-4 ; 0x148 <lcd_init+0x24>
_delay_ms(1);
lcd_wri(0x01);//清除屏幕显示,将DDRAM的地址计数器归零
14c: 81 e0 ldi r24, 0x01 ; 1
14e: 0e 94 70 00 call 0xe0 ; 0xe0 <lcd_wri>
152: 88 e9 ldi r24, 0x98 ; 152
154: 9a e3 ldi r25, 0x3A ; 58
156: 01 97 sbiw r24, 0x01 ; 1
158: f1 f7 brne .-4 ; 0x156 <lcd_init+0x32>
_delay_ms(10);
lcd_wri(0x06);//DDRAM的地址计数器(AC)加1
15a: 86 e0 ldi r24, 0x06 ; 6
15c: 0e 94 70 00 call 0xe0 ; 0xe0 <lcd_wri>
}
160: 1f 91 pop r17
162: 0f 91 pop r16
164: 08 95 ret
00000166 <da_init>:
void da_write(uint16_t da_val);
void da_init(void);
void da_init()
{
166: c1 9a sbi 0x18, 1 ; 24
PORTB|=(1<<da_cs);
}
168: 08 95 ret
0000016a <da_write>:
void da_write(uint16_t da_val)
{
16a: 88 0f add r24, r24
16c: 99 1f adc r25, r25
16e: 88 0f add r24, r24
170: 99 1f adc r25, r25
uint16_t da_tmp;
uint8_t da_tmp1;
da_tmp=da_val<<2;
da_tmp&=0x0fff; //TLC5615十六位通讯格式
172: 9f 70 andi r25, 0x0F ; 15
//为4位0+10位数据+2位0
da_tmp1=(uint8_t)((da_tmp&0xff00)>>8);//提取前八位
SPCR|=(1<<SPE); //SPI使能
174: 6e 9a sbi 0x0d, 6 ; 13
PORTB&=(~(1<<da_cs)); //DA使能
176: c1 98 cbi 0x18, 1 ; 24
SPDR=da_tmp1; //SPI传送第一字节
178: 9f b9 out 0x0f, r25 ; 15
da_tmp1=(uint8_t)(da_tmp&0x00ff); //提取后八位
while(!(SPSR&(1<<SPIF))); //等待传送完成
17a: 77 9b sbis 0x0e, 7 ; 14
17c: fe cf rjmp .-4 ; 0x17a <da_write+0x10>
SPDR=da_tmp1; //SPI传送第二字节
17e: 8f b9 out 0x0f, r24 ; 15
while(!(SPSR&(1<<SPIF)));
180: 77 9b sbis 0x0e, 7 ; 14
182: fe cf rjmp .-4 ; 0x180 <da_write+0x16>
PORTB|=(1<<da_cs); //DA关闭
184: c1 9a sbi 0x18, 1 ; 24
SPCR&=(~(1<<SPE)); //SPI关闭
186: 6e 98 cbi 0x0d, 6 ; 13
}
188: 08 95 ret
0000018a <main>:
#include <stdint.h>
#include "lcd.c"
#include "5615.c"
int main(void)
{
18a: cf 93 push r28
18c: df 93 push r29
DDRA=0xff;
18e: 8f ef ldi r24, 0xFF ; 255
190: 8a bb out 0x1a, r24 ; 26
DDRB=0xff;
192: 87 bb out 0x17, r24 ; 23
DDRC=0xff;
194: 84 bb out 0x14, r24 ; 20
DDRD=0xff;
196: 81 bb out 0x11, r24 ; 17
PORTA=0;
198: 1b ba out 0x1b, r1 ; 27
PORTB=0;
19a: 18 ba out 0x18, r1 ; 24
PORTC=0;
19c: 15 ba out 0x15, r1 ; 21
PORTD=0;
19e: 12 ba out 0x12, r1 ; 18
void spi_send(uint8_t cdata);
void spi_init(void)
{
/* 设置MOSI 和SCK 为输出,其他为输入 */
DDRB = 0xbf;
1a0: 8f eb ldi r24, 0xBF ; 191
1a2: 87 bb out 0x17, r24 ; 23
/* 使能SPI 主机模式,设置时钟速率为fck/16 */
SPCR = 0x11;
1a4: 81 e1 ldi r24, 0x11 ; 17
1a6: 8d b9 out 0x0d, r24 ; 13
spi_init();
lcd_init();
1a8: 0e 94 92 00 call 0x124 ; 0x124 <lcd_init>
void da_write(uint16_t da_val);
void da_init(void);
void da_init()
{
PORTB|=(1<<da_cs);
1ac: c1 9a sbi 0x18, 1 ; 24
1ae: c0 e0 ldi r28, 0x00 ; 0
1b0: d0 e0 ldi r29, 0x00 ; 0
da_init();
while(1)
{ uint16_t i;
for(i=0;i<0x0400;i+=1)
{
da_write(i);
1b2: ce 01 movw r24, r28
1b4: 0e 94 b5 00 call 0x16a ; 0x16a <da_write>
spi_init();
lcd_init();
da_init();
while(1)
{ uint16_t i;
for(i=0;i<0x0400;i+=1)
1b8: 21 96 adiw r28, 0x01 ; 1
1ba: 84 e0 ldi r24, 0x04 ; 4
1bc: c0 30 cpi r28, 0x00 ; 0
1be: d8 07 cpc r29, r24
1c0: b0 f7 brcc .-20 ; 0x1ae <main+0x24>
1c2: f7 cf rjmp .-18 ; 0x1b2 <main+0x28>
000001c4 <_exit>:
1c4: f8 94 cli
000001c6 <__stop_program>:
1c6: ff cf rjmp .-2 ; 0x1c6 <__stop_program>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -