📄 main.lss
字号:
main.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000522 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000004 00800060 00000522 000005b6 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000008 00800064 00800064 000005ba 2**0
ALLOC
3 .noinit 00000000 0080006c 0080006c 000005ba 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 000005ba 2**0
CONTENTS
5 .stab 00000e10 00000000 00000000 000005bc 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 00000b70 00000000 00000000 000013cc 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 30 00 jmp 0x60
4: 0c 94 4b 00 jmp 0x96
8: 0c 94 4b 00 jmp 0x96
c: 0c 94 4b 00 jmp 0x96
10: 0c 94 4b 00 jmp 0x96
14: 0c 94 4b 00 jmp 0x96
18: 0c 94 4b 00 jmp 0x96
1c: 0c 94 4b 00 jmp 0x96
20: 0c 94 43 02 jmp 0x486
24: 0c 94 4b 00 jmp 0x96
28: 0c 94 4b 00 jmp 0x96
2c: 0c 94 4b 00 jmp 0x96
30: 0c 94 4b 00 jmp 0x96
34: 0c 94 4b 00 jmp 0x96
38: 0c 94 4b 00 jmp 0x96
3c: 0c 94 4b 00 jmp 0x96
40: 0c 94 4b 00 jmp 0x96
44: 0c 94 4b 00 jmp 0x96
48: 0c 94 4b 00 jmp 0x96
4c: 0c 94 4b 00 jmp 0x96
50: 0c 94 4b 00 jmp 0x96
00000054 <S>:
54: af 06 6d 4f c6 cb eb 0e ef cf 00 00 ..mO........
00000060 <__init>:
60: 11 24 eor r1, r1
62: 1f be out 0x3f, r1 ; 63
64: cf e5 ldi r28, 0x5F ; 95
66: d4 e0 ldi r29, 0x04 ; 4
68: de bf out 0x3e, r29 ; 62
6a: cd bf out 0x3d, r28 ; 61
0000006c <__do_copy_data>:
6c: 10 e0 ldi r17, 0x00 ; 0
6e: a0 e6 ldi r26, 0x60 ; 96
70: b0 e0 ldi r27, 0x00 ; 0
72: e2 e2 ldi r30, 0x22 ; 34
74: f5 e0 ldi r31, 0x05 ; 5
76: 02 c0 rjmp .+4 ; 0x7c
00000078 <.do_copy_data_loop>:
78: 05 90 lpm r0, Z+
7a: 0d 92 st X+, r0
0000007c <.do_copy_data_start>:
7c: a4 36 cpi r26, 0x64 ; 100
7e: b1 07 cpc r27, r17
80: d9 f7 brne .-10 ; 0x78
00000082 <__do_clear_bss>:
82: 10 e0 ldi r17, 0x00 ; 0
84: a4 e6 ldi r26, 0x64 ; 100
86: b0 e0 ldi r27, 0x00 ; 0
88: 01 c0 rjmp .+2 ; 0x8c
0000008a <.do_clear_bss_loop>:
8a: 1d 92 st X+, r1
0000008c <.do_clear_bss_start>:
8c: ac 36 cpi r26, 0x6C ; 108
8e: b1 07 cpc r27, r17
90: e1 f7 brne .-8 ; 0x8a
92: 0c 94 7a 02 jmp 0x4f4
00000096 <__bad_interrupt>:
96: 0c 94 00 00 jmp 0x0
0000009a <port_init>:
volatile BYTE a,b,c;
void port_init(void)//口方向设置
{
DDRA = 0x00;
9a: 1a ba out 0x1a, r1 ; 26
PORTA = 0x00;
9c: 1b ba out 0x1b, r1 ; 27
DDRB = 0xff;
9e: 8f ef ldi r24, 0xFF ; 255
a0: 87 bb out 0x17, r24 ; 23
DDRC = 0XFC;
a2: 8c ef ldi r24, 0xFC ; 252
a4: 84 bb out 0x14, r24 ; 20
DDRD = 0xF0;
a6: 80 ef ldi r24, 0xF0 ; 240
a8: 81 bb out 0x11, r24 ; 17
aa: 08 95 ret
000000ac <delay_us>:
}
void delay_us(int time)//微秒级延时程序
{
do
{
time--;
ac: 01 97 sbiw r24, 0x01 ; 1
}
ae: 82 30 cpi r24, 0x02 ; 2
b0: 91 05 cpc r25, r1
b2: e4 f7 brge .-8 ; 0xac
b4: 08 95 ret
000000b6 <delay_ms>:
while (time>1);
}
void delay_ms(unsigned int time)//毫秒级延时程序
{
b6: cf 93 push r28
b8: df 93 push r29
ba: ec 01 movw r28, r24
while(time!=0)
{
delay_us(1000);
time--;
bc: 89 2b or r24, r25
be: 31 f0 breq .+12 ; 0xcc
c0: 88 ee ldi r24, 0xE8 ; 232
c2: 93 e0 ldi r25, 0x03 ; 3
c4: 0e 94 56 00 call 0xac
c8: 21 97 sbiw r28, 0x01 ; 1
ca: d1 f7 brne .-12 ; 0xc0
cc: df 91 pop r29
ce: cf 91 pop r28
d0: 08 95 ret
000000d2 <Delay>:
}
}
/**/
void Delay(void)
{
d2: cf 93 push r28
d4: df 93 push r29
d6: cd b7 in r28, 0x3d ; 61
d8: de b7 in r29, 0x3e ; 62
da: 21 97 sbiw r28, 0x01 ; 1
dc: 0f b6 in r0, 0x3f ; 63
de: f8 94 cli
e0: de bf out 0x3e, r29 ; 62
e2: 0f be out 0x3f, r0 ; 63
e4: cd bf out 0x3d, r28 ; 61
volatile unsigned char i;
for(i=0;i<10;i++); //用于调整CLK 脉冲宽度
e6: 19 82 std Y+1, r1 ; 0x01
e8: 89 81 ldd r24, Y+1 ; 0x01
ea: 8a 30 cpi r24, 0x0A ; 10
ec: 30 f4 brcc .+12 ; 0xfa
ee: 89 81 ldd r24, Y+1 ; 0x01
f0: 8f 5f subi r24, 0xFF ; 255
f2: 89 83 std Y+1, r24 ; 0x01
f4: 89 81 ldd r24, Y+1 ; 0x01
f6: 8a 30 cpi r24, 0x0A ; 10
f8: d0 f3 brcs .-12 ; 0xee
fa: 21 96 adiw r28, 0x01 ; 1
fc: 0f b6 in r0, 0x3f ; 63
fe: f8 94 cli
100: de bf out 0x3e, r29 ; 62
102: 0f be out 0x3f, r0 ; 63
104: cd bf out 0x3d, r28 ; 61
106: df 91 pop r29
108: cf 91 pop r28
10a: 08 95 ret
0000010c <SendBit>:
}
void SendBit(unsigned char dat,unsigned char bitcnt)
{
10c: 1f 93 push r17
10e: cf 93 push r28
110: 18 2f mov r17, r24
unsigned char i;
cli();
112: f8 94 cli
for(i=0;i<bitcnt;i++)
114: 66 23 and r22, r22
116: 79 f0 breq .+30 ; 0x136
118: c6 2f mov r28, r22
{
if(( dat & 0X80 ) == 0)
11a: 17 fd sbrc r17, 7
11c: 02 c0 rjmp .+4 ; 0x122
PORTB &=(~(1<<MOSI));
11e: c5 98 cbi 0x18, 5 ; 24
120: 01 c0 rjmp .+2 ; 0x124
else
PORTB |=(1<<MOSI); /*发送数据由高位到低位传送*/
122: c5 9a sbi 0x18, 5 ; 24
Delay();
124: 0e 94 69 00 call 0xd2
//delay_us(10);
PORTB |=(1<<SCK); /*置时钟线为高通知被控器开始接收数位*/
128: c7 9a sbi 0x18, 7 ; 24
Delay();
12a: 0e 94 69 00 call 0xd2
//delay_us(10);
PORTB &=(~(1<<SCK)); /*钳住总线准备下一个数据位*/
12e: c7 98 cbi 0x18, 7 ; 24
dat=dat<<1; /*发送数据左移一位*/
130: 11 0f add r17, r17
132: c1 50 subi r28, 0x01 ; 1
134: 91 f7 brne .-28 ; 0x11a
}
sei();
136: 78 94 sei
138: cf 91 pop r28
13a: 1f 91 pop r17
13c: 08 95 ret
0000013e <Start_spi>:
}
void Start_spi(void)
{
PORTB |=(1<<SS);
13e: c4 9a sbi 0x18, 4 ; 24
PORTB |=(1<<SCK);
140: c7 9a sbi 0x18, 7 ; 24
PORTB |=(1<<MOSI);
142: c5 9a sbi 0x18, 5 ; 24
Delay();
144: 0e 94 69 00 call 0xd2
//delay_us(10);
PORTB &=(~(1<<SS));PORTB &=(~(1<<SS));
148: c4 98 cbi 0x18, 4 ; 24
14a: c4 98 cbi 0x18, 4 ; 24
PORTB &=(~(1<<SCK));PORTB &=(~(1<<SCK));
14c: 8f e7 ldi r24, 0x7F ; 127
14e: 98 b3 in r25, 0x18 ; 24
150: 98 23 and r25, r24
152: 98 bb out 0x18, r25 ; 24
154: 98 b3 in r25, 0x18 ; 24
156: 98 23 and r25, r24
158: 98 bb out 0x18, r25 ; 24
15a: 08 95 ret
0000015c <SendByte>:
}
void SendByte(unsigned char dat)
{
SendBit(dat,8); /*发送字节*/
15c: 68 e0 ldi r22, 0x08 ; 8
15e: 0e 94 86 00 call 0x10c
162: 08 95 ret
00000164 <SENDCOMA>:
}
void SENDCOMA(unsigned char com)
{
164: 1f 93 push r17
166: 18 2f mov r17, r24
Start_spi();
168: 0e 94 9f 00 call 0x13e
SendBit(0X80,4); //*发送设置命令ID=100 0*
16c: 64 e0 ldi r22, 0x04 ; 4
16e: 80 e8 ldi r24, 0x80 ; 128
170: 0e 94 86 00 call 0x10c
SendByte(com); //*发送命令字*
174: 81 2f mov r24, r17
176: 0e 94 ae 00 call 0x15c
17a: 1f 91 pop r17
17c: 08 95 ret
0000017e <SENDCOMB>:
}
void SENDCOMB(unsigned char adr)
{
17e: 1f 93 push r17
180: 18 2f mov r17, r24
Start_spi();
182: 0e 94 9f 00 call 0x13e
SendBit(0XA0,3); /*发送写显示RAM 命令ID=101 */
186: 63 e0 ldi r22, 0x03 ; 3
188: 80 ea ldi r24, 0xA0 ; 160
18a: 0e 94 86 00 call 0x10c
SendBit(adr,6); /*指定写入地址*/
18e: 66 e0 ldi r22, 0x06 ; 6
190: 81 2f mov r24, r17
192: 0e 94 86 00 call 0x10c
196: 1f 91 pop r17
198: 08 95 ret
0000019a <disp_init>:
}
void disp_init(void)
{
19a: cf 93 push r28
unsigned char i;
SENDCOMA(0X0a); /*禁止WDT溢出标志输出*/
19c: 8a e0 ldi r24, 0x0A ; 10
19e: 0e 94 b2 00 call 0x164
SENDCOMA(0X52); //设置偏压,背极数 定义1/3 偏压4背极
1a2: 82 e5 ldi r24, 0x52 ; 82
1a4: 0e 94 b2 00 call 0x164
SENDCOMA(0X30); //*使用内部256KRC 振荡器*
1a8: 80 e3 ldi r24, 0x30 ; 48
1aa: 0e 94 b2 00 call 0x164
SENDCOMA(0X02); //*启动振荡器*
1ae: 82 e0 ldi r24, 0x02 ; 2
1b0: 0e 94 b2 00 call 0x164
SENDCOMA(0X06); //LCDON
1b4: 86 e0 ldi r24, 0x06 ; 6
1b6: 0e 94 b2 00 call 0x164
SENDCOMA(0X08);//timer dis
1ba: 88 e0 ldi r24, 0x08 ; 8
1bc: 0e 94 b2 00 call 0x164
SENDCOMB(0x00); //*把数据指针指回0 接着写入数据*
1c0: 80 e0 ldi r24, 0x00 ; 0
1c2: 0e 94 bf 00 call 0x17e
1c6: ce e0 ldi r28, 0x0E ; 14
for(i=0;i<15;i++) /*写入16 字节数据*/
{
SendByte(0x0); /*写入数据*/
1c8: 80 e0 ldi r24, 0x00 ; 0
1ca: 0e 94 ae 00 call 0x15c
1ce: c1 50 subi r28, 0x01 ; 1
1d0: c7 ff sbrs r28, 7
1d2: fa cf rjmp .-12 ; 0x1c8
1d4: cf 91 pop r28
1d6: 08 95 ret
000001d8 <disp_off>:
}
}
void disp_off(void)
{
SENDCOMA(0X04);//lcdoff
1d8: 84 e0 ldi r24, 0x04 ; 4
1da: 0e 94 b2 00 call 0x164
SENDCOMA(0X00);//sys dis
1de: 80 e0 ldi r24, 0x00 ; 0
1e0: 0e 94 b2 00 call 0x164
1e4: 08 95 ret
000001e6 <I2C_init>:
//SENDCOMA(0X0c);//timer en
}
//初始化TWI功能
/*
void twi_Init(void)
{
TWBR=73;
}*/
void I2C_init(void)
{
TWBR=2;
1e6: 82 e0 ldi r24, 0x02 ; 2
1e8: 80 b9 out 0x00, r24 ; 0
TWSR=00;
1ea: 11 b8 out 0x01, r1 ; 1
1ec: 08 95 ret
000001ee <i2c_Write>:
}/*
void delay_us(int time)//微秒级延时程序
{
do
{
time--;
}
while (time>1);
}
void delay_ms(unsigned int time)//毫秒级延时程序
{
while(time!=0)
{
delay_us(1000);
time--;
}
}*/
unsigned char i2c_Write(unsigned char Wdata,unsigned char RomAddress)
{
1ee: 28 2f mov r18, r24
Start();//I2C启动
1f0: 84 ea ldi r24, 0xA4 ; 164
1f2: 86 bf out 0x36, r24 ; 54
Wait();
1f4: 06 b6 in r0, 0x36 ; 54
1f6: 07 fe sbrs r0, 7
1f8: fd cf rjmp .-6 ; 0x1f4
if(TestAck()!=START) return 1;//ACK
1fa: 81 b1 in r24, 0x01 ; 1
1fc: 99 27 eor r25, r25
1fe: 88 7f andi r24, 0xF8 ; 248
200: 90 70 andi r25, 0x00 ; 0
202: 08 97 sbiw r24, 0x08 ; 8
204: 29 f5 brne .+74 ; 0x250
Write8Bit(wr_device_add);//写I2C从器件地址和写方式
206: 80 ed ldi r24, 0xD0 ; 208
208: 83 b9 out 0x03, r24 ; 3
20a: 84 e8 ldi r24, 0x84 ; 132
20c: 86 bf out 0x36, r24 ; 54
Wait();
20e: 06 b6 in r0, 0x36 ; 54
210: 07 fe sbrs r0, 7
212: fd cf rjmp .-6 ; 0x20e
if(TestAck()!=MT_SLA_ACK) return 1;//ACK
214: 81 b1 in r24, 0x01 ; 1
216: 99 27 eor r25, r25
218: 88 7f andi r24, 0xF8 ; 248
21a: 90 70 andi r25, 0x00 ; 0
21c: 48 97 sbiw r24, 0x18 ; 24
21e: c1 f4 brne .+48 ; 0x250
Write8Bit(RomAddress);//写24C02的ROM地址
220: 63 b9 out 0x03, r22 ; 3
222: 84 e8 ldi r24, 0x84 ; 132
224: 86 bf out 0x36, r24 ; 54
Wait();
226: 06 b6 in r0, 0x36 ; 54
228: 07 fe sbrs r0, 7
22a: fd cf rjmp .-6 ; 0x226
if(TestAck()!=MT_DATA_ACK) return 1;//ACK
22c: 81 b1 in r24, 0x01 ; 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -