📄 rudongbeng.lss
字号:
Rudongbeng.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000a6e 00000000 00000000 00000074 2**1
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .bss 00000039 00800060 00800060 00000ae2 2**0
ALLOC
2 .stab 00000378 00000000 00000000 00000ae4 2**2
CONTENTS, READONLY, DEBUGGING
3 .stabstr 00000071 00000000 00000000 00000e5c 2**0
CONTENTS, READONLY, DEBUGGING
4 .debug_aranges 00000020 00000000 00000000 00000ecd 2**0
CONTENTS, READONLY, DEBUGGING
5 .debug_pubnames 00000385 00000000 00000000 00000eed 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_info 0000049e 00000000 00000000 00001272 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_abbrev 0000010b 00000000 00000000 00001710 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_line 000009db 00000000 00000000 0000181b 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_frame 000000a0 00000000 00000000 000021f8 2**2
CONTENTS, READONLY, DEBUGGING
10 .debug_str 00000392 00000000 00000000 00002298 2**0
CONTENTS, READONLY, DEBUGGING
11 .debug_loc 00000050 00000000 00000000 0000262a 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 7b 04 jmp 0x8f6 ; 0x8f6 <__vector_9>
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 e6 ldi r30, 0x6E ; 110
68: fa e0 ldi r31, 0x0A ; 10
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: a9 39 cpi r26, 0x99 ; 153
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e <.do_clear_bss_loop>
86: 0e 94 cb 04 call 0x996 ; 0x996 <main>
8a: 0c 94 36 05 jmp 0xa6c ; 0xa6c <_exit>
0000008e <__bad_interrupt>:
8e: 0c 94 00 00 jmp 0 ; 0x0 <__vectors>
00000092 <writeEEPROM>:
//从临时寄存器*eepromPtr里面读出数据,
//根据设定行地址,把连续的12bytes动作表写入到EEPROM中
//==========================================================
void writeEEPROM(vuchar *eepromWPtr,uchar lineNumber)
{
92: fc 01 movw r30, r24
uchar j;
uint byteNumber;
uint eepromAddress=0;
eepromAddress=12*lineNumber;
94: 8c e0 ldi r24, 0x0C ; 12
96: 68 9f mul r22, r24
98: 90 01 movw r18, r0
9a: 11 24 eor r1, r1
while(EECR&0x02); //确认已经没有写动作
9c: e1 99 sbic 0x1c, 1 ; 28
9e: fe cf rjmp .-4 ; 0x9c <writeEEPROM+0xa>
j = SREG;//save the status
a0: 9f b7 in r25, 0x3f ; 63
clear_interrupt();
a2: f8 94 cli
a4: 40 e0 ldi r20, 0x00 ; 0
a6: 50 e0 ldi r21, 0x00 ; 0
for(byteNumber=0;byteNumber<12;byteNumber++)
{
while(EECR&0x02); //确认已经没有写动作
a8: e1 99 sbic 0x1c, 1 ; 28
aa: fe cf rjmp .-4 ; 0xa8 <writeEEPROM+0x16>
EEAR =eepromAddress++;
ac: 3f bb out 0x1f, r19 ; 31
ae: 2e bb out 0x1e, r18 ; 30
EEDR =*(eepromWPtr+byteNumber);
b0: 81 91 ld r24, Z+
b2: 8d bb out 0x1d, r24 ; 29
EECR |= 0x04;
b4: e2 9a sbi 0x1c, 2 ; 28
EECR |= 0x02;
b6: e1 9a sbi 0x1c, 1 ; 28
b8: 4f 5f subi r20, 0xFF ; 255
ba: 5f 4f sbci r21, 0xFF ; 255
bc: 4c 30 cpi r20, 0x0C ; 12
be: 51 05 cpc r21, r1
c0: 18 f4 brcc .+6 ; 0xc8 <writeEEPROM+0x36>
c2: 2f 5f subi r18, 0xFF ; 255
c4: 3f 4f sbci r19, 0xFF ; 255
c6: f0 cf rjmp .-32 ; 0xa8 <writeEEPROM+0x16>
}
while(EECR&0x02);//确认已经没有写动作
c8: e1 99 sbic 0x1c, 1 ; 28
ca: fe cf rjmp .-4 ; 0xc8 <writeEEPROM+0x36>
SREG = j; //restore the status
cc: 9f bf out 0x3f, r25 ; 63
ce: 08 95 ret
000000d0 <readEEPROM>:
}
//================================================================
//根据设定行地址,把连续的12bytes的动作表从EEPROM中读出来,
//然后写入到指定的临时寄存器*eepromPtr里面
//================================================================
void readEEPROM(vuchar *eepromPtr,uchar lineNumber)
{
d0: fc 01 movw r30, r24
uchar j;
uchar byteNumber;
uint eepromAddress;
eepromAddress=12*lineNumber;
d2: 8c e0 ldi r24, 0x0C ; 12
d4: 68 9f mul r22, r24
d6: c0 01 movw r24, r0
d8: 11 24 eor r1, r1
while(EECR&0x02); //确认已经没有写动作
da: e1 99 sbic 0x1c, 1 ; 28
dc: fe cf rjmp .-4 ; 0xda <readEEPROM+0xa>
de: 9c 01 movw r18, r24
j = SREG;//save the register
e0: 4f b7 in r20, 0x3f ; 63
clear_interrupt();
e2: f8 94 cli
e4: 90 e0 ldi r25, 0x00 ; 0
for(byteNumber=0;byteNumber<12;byteNumber++)
{
EEAR =eepromAddress++;
e6: 3f bb out 0x1f, r19 ; 31
e8: 2e bb out 0x1e, r18 ; 30
ea: 2f 5f subi r18, 0xFF ; 255
ec: 3f 4f sbci r19, 0xFF ; 255
EECR |=0x01;
ee: e0 9a sbi 0x1c, 0 ; 28
while(EECR&0x01);//确认已经完成读动作
f0: e0 99 sbic 0x1c, 0 ; 28
f2: fe cf rjmp .-4 ; 0xf0 <readEEPROM+0x20>
*(eepromPtr++)= EEDR;
f4: 8d b3 in r24, 0x1d ; 29
f6: 80 83 st Z, r24
while(EECR&0x02);//确认已经没有写动作
f8: e1 99 sbic 0x1c, 1 ; 28
fa: fe cf rjmp .-4 ; 0xf8 <readEEPROM+0x28>
fc: 9f 5f subi r25, 0xFF ; 255
fe: 9c 30 cpi r25, 0x0C ; 12
100: 11 f0 breq .+4 ; 0x106 <readEEPROM+0x36>
102: 31 96 adiw r30, 0x01 ; 1
104: f0 cf rjmp .-32 ; 0xe6 <readEEPROM+0x16>
}
SREG = j;//restore the status
106: 4f bf out 0x3f, r20 ; 63
108: 08 95 ret
0000010a <init_devices>:
}
//call this routine to initialise all peripherals
void init_devices(void)
{
10a: f8 94 cli
//stop errant interrupts until set up
clear_interrupt(); //disable all interrupts
//port_init();
PORTA=0xFF;
10c: 8f ef ldi r24, 0xFF ; 255
10e: 8b bb out 0x1b, r24 ; 27
DDRA =0x00;
110: 1a ba out 0x1a, r1 ; 26
PORTB = 0xFF;
112: 88 bb out 0x18, r24 ; 24
DDRB = 0x00;
114: 17 ba out 0x17, r1 ; 23
PORTC = 0xFF;
116: 85 bb out 0x15, r24 ; 21
DDRC = 0xFF;
118: 84 bb out 0x14, r24 ; 20
PORTD = 0xFF;
11a: 82 bb out 0x12, r24 ; 18
DDRD = 0xFF;
11c: 81 bb out 0x11, r24 ; 17
//timer0_init();
//TIMER0 initialize - prescale:8
// desired value: 50uSec
// actual value: 50.000uSec (0.0%)
TCCR0 = 0x00; //stop
11e: 13 be out 0x33, r1 ; 51
TCNT0 = 0x8b; //set count
120: 8b e8 ldi r24, 0x8B ; 139
122: 82 bf out 0x32, r24 ; 50
TCCR0 = 0x05; //start timer
124: 85 e0 ldi r24, 0x05 ; 5
126: 83 bf out 0x33, r24 ; 51
MCUCR = 0x08;
128: 88 e0 ldi r24, 0x08 ; 8
12a: 85 bf out 0x35, r24 ; 53
GICR = 0x00;
12c: 1b be out 0x3b, r1 ; 59
//TIMSK = 0x45; //timer interrupt sources
TIMSK = 0x01; //timer interrupt sources
12e: 81 e0 ldi r24, 0x01 ; 1
130: 89 bf out 0x39, r24 ; 57
132: 08 95 ret
00000134 <keyScanProgram>:
//set_interrupt(); //re-enable interrupts
//all peripherals are now initialised
}
/*********************************************************
//按键扫描程序
//假定运行时间单位是10ms
*********************************************************/
void keyScanProgram(void)
{
134: cb 99 sbic 0x19, 3 ; 25
136: 0d c0 rjmp .+26 ; 0x152 <keyScanProgram+0x1e>
//TINY ADD按钮按下
if(KEY_TINY_ADD_SET)
{
keyTinyAddStatus=KEY_PRESS;
if(keyTinyAddCounter<200)keyTinyAddCounter++;
138: 81 e0 ldi r24, 0x01 ; 1
13a: 80 93 68 00 sts 0x0068, r24
}
13e: 80 91 69 00 lds r24, 0x0069
142: 88 3c cpi r24, 0xC8 ; 200
144: c0 f4 brcc .+48 ; 0x176 <keyScanProgram+0x42>
146: 80 91 69 00 lds r24, 0x0069
14a: 8f 5f subi r24, 0xFF ; 255
14c: 80 93 69 00 sts 0x0069, r24
150: 12 c0 rjmp .+36 ; 0x176 <keyScanProgram+0x42>
//TINY ADD按键松开
else
{
//按键是曾经是按过的
if(keyTinyAddStatus==KEY_PRESS)
{
152: 80 91 68 00 lds r24, 0x0068
156: 81 30 cpi r24, 0x01 ; 1
158: 71 f4 brne .+28 ; 0x176 <keyScanProgram+0x42>
//按键有效触发
if(keyTinyAddCounter>KEY_PRESS_OK)
{
15a: 80 91 69 00 lds r24, 0x0069
15e: 84 30 cpi r24, 0x04 ; 4
160: 30 f0 brcs .+12 ; 0x16e <keyScanProgram+0x3a>
keyTinyAddCounter=0;
keyTinyAddStatus=KEY_OPEN;
162: 10 92 69 00 sts 0x0069, r1
}
166: 82 e0 ldi r24, 0x02 ; 2
168: 80 93 68 00 sts 0x0068, r24
16c: 04 c0 rjmp .+8 ; 0x176 <keyScanProgram+0x42>
//无法有效触发
else
{
keyTinyAddCounter=0;
keyTinyAddStatus=KEY_WAITING;
16e: 10 92 69 00 sts 0x0069, r1
}
172: 10 92 68 00 sts 0x0068, r1
}
}
/////////////////////////////////////////
//TINY SUB按钮按下
if(KEY_TINY_SUB_SET)
{
176: cc 99 sbic 0x19, 4 ; 25
178: 0d c0 rjmp .+26 ; 0x194 <keyScanProgram+0x60>
keyTinySubStatus=KEY_PRESS;
if(keyTinySubCounter<200)keyTinySubCounter++;
}
17a: 81 e0 ldi r24, 0x01 ; 1
17c: 80 93 6a 00 sts 0x006A, r24
//TINY SUB按键松开
180: 80 91 6b 00 lds r24, 0x006B
184: 88 3c cpi r24, 0xC8 ; 200
186: c0 f4 brcc .+48 ; 0x1b8 <keyScanProgram+0x84>
188: 80 91 6b 00 lds r24, 0x006B
18c: 8f 5f subi r24, 0xFF ; 255
18e: 80 93 6b 00 sts 0x006B, r24
192: 12 c0 rjmp .+36 ; 0x1b8 <keyScanProgram+0x84>
else
{
//按键是曾经是按过的
if(keyTinySubStatus==KEY_PRESS)
{
//按键有效触发
194: 80 91 6a 00 lds r24, 0x006A
198: 81 30 cpi r24, 0x01 ; 1
19a: 71 f4 brne .+28 ; 0x1b8 <keyScanProgram+0x84>
if(keyTinySubCounter>KEY_PRESS_OK)
{
keyTinySubCounter=0;
19c: 80 91 6b 00 lds r24, 0x006B
1a0: 84 30 cpi r24, 0x04 ; 4
1a2: 30 f0 brcs .+12 ; 0x1b0 <keyScanProgram+0x7c>
keyTinySubStatus=KEY_OPEN;
}
1a4: 10 92 6b 00 sts 0x006B, r1
//无法有效触发
1a8: 82 e0 ldi r24, 0x02 ; 2
1aa: 80 93 6a 00 sts 0x006A, r24
1ae: 04 c0 rjmp .+8 ; 0x1b8 <keyScanProgram+0x84>
else
{
keyTinySubCounter=0;
keyTinySubStatus=KEY_WAITING;
}
1b0: 10 92 6b 00 sts 0x006B, r1
}
1b4: 10 92 6a 00 sts 0x006A, r1
}
/////////////////////////////////////////
//LARGE ADD按钮按下
if(KEY_LARGE_ADD_SET)
{
keyLargeAddStatus=KEY_PRESS;
1b8: cd 99 sbic 0x19, 5 ; 25
1ba: 0d c0 rjmp .+26 ; 0x1d6 <keyScanProgram+0xa2>
if(keyLargeAddCounter<200)keyLargeAddCounter++;
}
//LARGE ADD按键松开
1bc: 81 e0 ldi r24, 0x01 ; 1
1be: 80 93 6c 00 sts 0x006C, r24
else
1c2: 80 91 6d 00 lds r24, 0x006D
1c6: 88 3c cpi r24, 0xC8 ; 200
1c8: c0 f4 brcc .+48 ; 0x1fa <keyScanProgram+0xc6>
1ca: 80 91 6d 00 lds r24, 0x006D
1ce: 8f 5f subi r24, 0xFF ; 255
1d0: 80 93 6d 00 sts 0x006D, r24
1d4: 12 c0 rjmp .+36 ; 0x1fa <keyScanProgram+0xc6>
{
//按键是曾经是按过的
if(keyLargeAddStatus==KEY_PRESS)
{
//按键有效触发
if(keyLargeAddCounter>KEY_PRESS_OK)
1d6: 80 91 6c 00 lds r24, 0x006C
1da: 81 30 cpi r24, 0x01 ; 1
1dc: 71 f4 brne .+28 ; 0x1fa <keyScanProgram+0xc6>
{
keyLargeAddCounter=0;
keyLargeAddStatus=KEY_OPEN;
1de: 80 91 6d 00 lds r24, 0x006D
1e2: 84 30 cpi r24, 0x04 ; 4
1e4: 30 f0 brcs .+12 ; 0x1f2 <keyScanProgram+0xbe>
}
//无法有效触发
1e6: 10 92 6d 00 sts 0x006D, r1
else
1ea: 82 e0 ldi r24, 0x02 ; 2
1ec: 80 93 6c 00 sts 0x006C, r24
1f0: 04 c0 rjmp .+8 ; 0x1fa <keyScanProgram+0xc6>
{
keyLargeAddCounter=0;
keyLargeAddStatus=KEY_WAITING;
}
}
1f2: 10 92 6d 00 sts 0x006D, r1
}
1f6: 10 92 6c 00 sts 0x006C, r1
/////////////////////////////////////////
//LARGE SUB按钮按下
if(KEY_LARGE_SUB_SET)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -