?? countermeter.lss
字號:
countermeter.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 000005d6 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 0000000e 00800060 000005d6 0000066a 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000007 0080006e 0080006e 00000678 2**0
ALLOC
3 .noinit 00000000 00800075 00800075 00000678 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 00000678 2**0
CONTENTS
5 .stab 00000930 00000000 00000000 00000678 2**2
CONTENTS, READONLY, DEBUGGING
6 .stabstr 0000083b 00000000 00000000 00000fa8 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 0c 94 2a 00 jmp 0x54
4: 0c 94 45 00 jmp 0x8a
8: 0c 94 45 00 jmp 0x8a
c: 0c 94 45 00 jmp 0x8a
10: 0c 94 45 00 jmp 0x8a
14: 0c 94 45 00 jmp 0x8a
18: 0c 94 45 00 jmp 0x8a
1c: 0c 94 45 00 jmp 0x8a
20: 0c 94 45 00 jmp 0x8a
24: 0c 94 47 00 jmp 0x8e
28: 0c 94 45 00 jmp 0x8a
2c: 0c 94 45 00 jmp 0x8a
30: 0c 94 45 00 jmp 0x8a
34: 0c 94 45 00 jmp 0x8a
38: 0c 94 45 00 jmp 0x8a
3c: 0c 94 45 00 jmp 0x8a
40: 0c 94 45 00 jmp 0x8a
44: 0c 94 45 00 jmp 0x8a
48: 0c 94 45 00 jmp 0x8a
4c: 0c 94 45 00 jmp 0x8a
50: 0c 94 45 00 jmp 0x8a
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: e6 ed ldi r30, 0xD6 ; 214
68: f5 e0 ldi r31, 0x05 ; 5
6a: 02 c0 rjmp .+4 ; 0x70
0000006c <.do_copy_data_loop>:
6c: 05 90 lpm r0, Z+
6e: 0d 92 st X+, r0
00000070 <.do_copy_data_start>:
70: ae 36 cpi r26, 0x6E ; 110
72: b1 07 cpc r27, r17
74: d9 f7 brne .-10 ; 0x6c
00000076 <__do_clear_bss>:
76: 10 e0 ldi r17, 0x00 ; 0
78: ae e6 ldi r26, 0x6E ; 110
7a: b0 e0 ldi r27, 0x00 ; 0
7c: 01 c0 rjmp .+2 ; 0x80
0000007e <.do_clear_bss_loop>:
7e: 1d 92 st X+, r1
00000080 <.do_clear_bss_start>:
80: a5 37 cpi r26, 0x75 ; 117
82: b1 07 cpc r27, r17
84: e1 f7 brne .-8 ; 0x7e
86: 0c 94 dc 01 jmp 0x3b8
0000008a <__bad_interrupt>:
8a: 0c 94 00 00 jmp 0x0
0000008e <__vector_9>:
SIGNAL(SIG_OVERFLOW0) //定時器T0溢出中斷程序(16 uS中斷一次)
{
8e: 1f 92 push r1
90: 0f 92 push r0
92: 0f b6 in r0, 0x3f ; 63
94: 0f 92 push r0
96: 11 24 eor r1, r1
9a: 3f 93 push r19
9c: 4f 93 push r20
9e: 5f 93 push r21
a0: 6f 93 push r22
a2: 7f 93 push r23
a4: 8f 93 push r24
a6: 9f 93 push r25
a8: af 93 push r26
aa: bf 93 push r27
ac: ef 93 push r30
ae: ff 93 push r31
b0: cf 93 push r28
b2: df 93 push r29
b4: cd b7 in r28, 0x3d ; 61
b6: de b7 in r29, 0x3e ; 62
b8: 22 97 sbiw r28, 0x02 ; 2
ba: de bf out 0x3e, r29 ; 62
bc: cd bf out 0x3d, r28 ; 61
unsigned char a,b;
//重新裝載初值
TCNT0 = TI0_L;
be: 83 e8 ldi r24, 0x83 ; 131
c0: 80 93 52 00 sts 0x0052, r24
//關閉所有數碼管
PORTA |= 0X07;
c4: 80 91 3b 00 lds r24, 0x003B
c8: 87 60 ori r24, 0x07 ; 7
ca: 80 93 3b 00 sts 0x003B, r24
if (active_led == 5)
ce: 80 91 6e 00 lds r24, 0x006E
d2: 85 30 cpi r24, 0x05 ; 5
d4: 49 f4 brne .+18 ; 0xe8
{
b = digits[10 + mode_setting]; //第6為數碼管用于模式指示
d6: 80 91 74 00 lds r24, 0x0074
da: 99 27 eor r25, r25
dc: fc 01 movw r30, r24
de: e6 59 subi r30, 0x96 ; 150
e0: ff 4f sbci r31, 0xFF ; 255
e2: 80 81 ld r24, Z
e4: 8a 83 std Y+2, r24 ; 0x02
e6: 38 c0 rjmp .+112 ; 0x158
}
else
{
a = led_value >> (( 4 - active_led ) * 4);
e8: 80 91 6e 00 lds r24, 0x006E
ec: 28 2f mov r18, r24
ee: 33 27 eor r19, r19
f0: 84 e0 ldi r24, 0x04 ; 4
f2: 90 e0 ldi r25, 0x00 ; 0
f4: 82 1b sub r24, r18
f6: 93 0b sbc r25, r19
f8: 9c 01 movw r18, r24
fa: 22 0f add r18, r18
fc: 33 1f adc r19, r19
fe: 22 0f add r18, r18
100: 33 1f adc r19, r19
102: 80 91 6f 00 lds r24, 0x006F
106: 90 91 70 00 lds r25, 0x0070
10a: a0 91 71 00 lds r26, 0x0071
10e: b0 91 72 00 lds r27, 0x0072
112: 04 c0 rjmp .+8 ; 0x11c
114: b6 95 lsr r27
116: a7 95 ror r26
118: 97 95 ror r25
11a: 87 95 ror r24
11c: 2a 95 dec r18
11e: d2 f7 brpl .-12 ; 0x114
120: 89 83 std Y+1, r24 ; 0x01
b = digits[a & 0x0f];
122: 89 81 ldd r24, Y+1 ; 0x01
124: 99 27 eor r25, r25
126: 8f 70 andi r24, 0x0F ; 15
128: 90 70 andi r25, 0x00 ; 0
12a: fc 01 movw r30, r24
12c: e0 5a subi r30, 0xA0 ; 160
12e: ff 4f sbci r31, 0xFF ; 255
130: 80 81 ld r24, Z
132: 8a 83 std Y+2, r24 ; 0x02
if (decimal_point == (4 - active_led) )
134: 80 91 73 00 lds r24, 0x0073
138: 48 2f mov r20, r24
13a: 55 27 eor r21, r21
13c: 80 91 6e 00 lds r24, 0x006E
140: 28 2f mov r18, r24
142: 33 27 eor r19, r19
144: 84 e0 ldi r24, 0x04 ; 4
146: 90 e0 ldi r25, 0x00 ; 0
148: 82 1b sub r24, r18
14a: 93 0b sbc r25, r19
14c: 48 17 cp r20, r24
14e: 59 07 cpc r21, r25
150: 19 f4 brne .+6 ; 0x158
b |= SEG_dot;
152: 8a 81 ldd r24, Y+2 ; 0x02
154: 80 68 ori r24, 0x80 ; 128
156: 8a 83 std Y+2, r24 ; 0x02
}
PORTB = b;
158: 8a 81 ldd r24, Y+2 ; 0x02
15a: 80 93 38 00 sts 0x0038, r24
//設置顯示位置
PORTA = ((PORTA & 0Xf8)|active_led);
15e: 98 ef ldi r25, 0xF8 ; 248
160: 80 91 3b 00 lds r24, 0x003B
164: 98 23 and r25, r24
166: 80 91 6e 00 lds r24, 0x006E
16a: 89 2b or r24, r25
16c: 80 93 3b 00 sts 0x003B, r24
active_led = (active_led+1) % 6;
170: 80 91 6e 00 lds r24, 0x006E
174: 99 27 eor r25, r25
176: 01 96 adiw r24, 0x01 ; 1
178: 26 e0 ldi r18, 0x06 ; 6
17a: 30 e0 ldi r19, 0x00 ; 0
17c: b9 01 movw r22, r18
17e: 0e 94 d8 02 call 0x5b0
182: 80 93 6e 00 sts 0x006E, r24
186: 22 96 adiw r28, 0x02 ; 2
188: f8 94 cli
18a: de bf out 0x3e, r29 ; 62
18c: cd bf out 0x3d, r28 ; 61
18e: df 91 pop r29
190: cf 91 pop r28
192: ff 91 pop r31
194: ef 91 pop r30
196: bf 91 pop r27
198: af 91 pop r26
19a: 9f 91 pop r25
19c: 8f 91 pop r24
19e: 7f 91 pop r23
1a0: 6f 91 pop r22
1a2: 5f 91 pop r21
1a4: 4f 91 pop r20
1a6: 3f 91 pop r19
1a8: 2f 91 pop r18
1aa: 0f 90 pop r0
1ac: 0f be out 0x3f, r0 ; 63
1ae: 0f 90 pop r0
1b0: 1f 90 pop r1
1b2: 18 95 reti
000001b4 <delay>:
}
/****************************************************************************/
/* helpers ****************************************************************/
/****************************************************************************/
void delay(unsigned short us)
{
1b4: cf 93 push r28
1b6: df 93 push r29
1b8: cd b7 in r28, 0x3d ; 61
1ba: de b7 in r29, 0x3e ; 62
1bc: 26 97 sbiw r28, 0x06 ; 6
1be: 0f b6 in r0, 0x3f ; 63
1c0: f8 94 cli
1c4: 0f be out 0x3f, r0 ; 63
1c6: cd bf out 0x3d, r28 ; 61
1c8: 89 83 std Y+1, r24 ; 0x01
1ca: 9a 83 std Y+2, r25 ; 0x02
unsigned short delay_loops;
register unsigned short i;
delay_loops = (us+3)/5*CYCLES_PER_US; // +3 for rounding up (dirty)
1cc: 89 81 ldd r24, Y+1 ; 0x01
1ce: 9a 81 ldd r25, Y+2 ; 0x02
1d0: 03 96 adiw r24, 0x03 ; 3
1d2: 25 e0 ldi r18, 0x05 ; 5
1d4: 30 e0 ldi r19, 0x00 ; 0
1d6: b9 01 movw r22, r18
1d8: 0e 94 c4 02 call 0x588
1dc: cb 01 movw r24, r22
1de: aa 27 eor r26, r26
1e0: bb 27 eor r27, r27
1e2: 68 94 set
1e4: 12 f8 bld r1, 2
1e6: 88 0f add r24, r24
1e8: 99 1f adc r25, r25
1ea: aa 1f adc r26, r26
1ec: bb 1f adc r27, r27
1ee: 16 94 lsr r1
1f0: d1 f7 brne .-12 ; 0x1e6
1f2: 8b 83 std Y+3, r24 ; 0x03
1f4: 9c 83 std Y+4, r25 ; 0x04
// one loop takes 5 cpu cycles
for (i=0; i < delay_loops; i++);
1f6: 1d 82 std Y+5, r1 ; 0x05
1f8: 1e 82 std Y+6, r1 ; 0x06
1fa: 8b 81 ldd r24, Y+3 ; 0x03
1fc: 9c 81 ldd r25, Y+4 ; 0x04
1fe: 2d 81 ldd r18, Y+5 ; 0x05
200: 3e 81 ldd r19, Y+6 ; 0x06
202: 28 17 cp r18, r24
204: 39 07 cpc r19, r25
206: 30 f4 brcc .+12 ; 0x214
208: 8d 81 ldd r24, Y+5 ; 0x05
20a: 9e 81 ldd r25, Y+6 ; 0x06
20c: 01 96 adiw r24, 0x01 ; 1
20e: 8d 83 std Y+5, r24 ; 0x05
210: 9e 83 std Y+6, r25 ; 0x06
212: f3 cf rjmp .-26 ; 0x1fa
214: 26 96 adiw r28, 0x06 ; 6
216: 0f b6 in r0, 0x3f ; 63
218: f8 94 cli
21a: de bf out 0x3e, r29 ; 62
21c: 0f be out 0x3f, r0 ; 63
21e: cd bf out 0x3d, r28 ; 61
220: df 91 pop r29
222: cf 91 pop r28
224: 08 95 ret
00000226 <read_counters>:
}
//讀16位計數值
unsigned int read_counters(void)
{
226: cf 93 push r28
228: df 93 push r29
22a: cd b7 in r28, 0x3d ; 61
22c: de b7 in r29, 0x3e ; 62
22e: 22 97 sbiw r28, 0x02 ; 2
230: 0f b6 in r0, 0x3f ; 63
232: f8 94 cli
234: de bf out 0x3e, r29 ; 62
236: 0f be out 0x3f, r0 ; 63
238: cd bf out 0x3d, r28 ; 61
unsigned int counter_value;
// 讀數據時關閉中斷
cli();
23a: f8 94 cli
//關閉數碼管顯示
PORTA |= 0X07;
23c: 80 91 3b 00 lds r24, 0x003B
240: 87 60 ori r24, 0x07 ; 7
242: 80 93 3b 00 sts 0x003B, r24
//設置PORTB位輸入
DDRB = 0X00;
246: 10 92 37 00 sts 0x0037, r1
//置OE_H為低讀取高8位
PORTA &= ~(1<<OE_H);
24a: 80 91 3b 00 lds r24, 0x003B
24e: 8f 7d andi r24, 0xDF ; 223
250: 80 93 3b 00 sts 0x003B, r24
asm volatile("nop");
254: 00 00 nop
//1個脈沖鎖存計數值
PORTA |= (1<<OE_H);
256: 80 91 3b 00 lds r24, 0x003B
25a: 80 62 ori r24, 0x20 ; 32
25c: 80 93 3b 00 sts 0x003B, r24
asm volatile("nop");
260: 00 00 nop
PORTA &= ~(1<<OE_H);
262: 80 91 3b 00 lds r24, 0x003B
266: 8f 7d andi r24, 0xDF ; 223
268: 80 93 3b 00 sts 0x003B, r24
asm volatile("nop");
26c: 00 00 nop
//讀高8位數據
counter_value = PINB;
26e: 80 91 36 00 lds r24, 0x0036
272: 99 27 eor r25, r25
274: 89 83 std Y+1, r24 ; 0x01
276: 9a 83 std Y+2, r25 ; 0x02
//置OE_H為高
PORTA |= (1<<OE_H);
278: 80 91 3b 00 lds r24, 0x003B
27c: 80 62 ori r24, 0x20 ; 32
27e: 80 93 3b 00 sts 0x003B, r24
counter_value <<= 8;
282: 89 81 ldd r24, Y+1 ; 0x01
284: 9a 81 ldd r25, Y+2 ; 0x02
286: 98 2f mov r25, r24
288: 88 27 eor r24, r24
28a: 89 83 std Y+1, r24 ; 0x01
28c: 9a 83 std Y+2, r25 ; 0x02
//置OE_L為低讀取低8位
PORTA &= ~(1<<OE_L);
28e: 80 91 3b 00 lds r24, 0x003B
292: 8f 7e andi r24, 0xEF ; 239
294: 80 93 3b 00 sts 0x003B, r24
asm volatile("nop");
298: 00 00 nop
//1個脈沖鎖存計數值
PORTA |= (1<<OE_L);
29a: 80 91 3b 00 lds r24, 0x003B
29e: 80 61 ori r24, 0x10 ; 16
2a0: 80 93 3b 00 sts 0x003B, r24
asm volatile("nop");
2a4: 00 00 nop
PORTA &= ~(1<<OE_L);
2a6: 80 91 3b 00 lds r24, 0x003B
2aa: 8f 7e andi r24, 0xEF ; 239
2ac: 80 93 3b 00 sts 0x003B, r24
asm volatile("nop");
2b0: 00 00 nop
//讀低8位數據
counter_value |= PINB ;
2b2: 80 91 36 00 lds r24, 0x0036
2b6: 28 2f mov r18, r24
2b8: 33 27 eor r19, r19
2ba: 89 81 ldd r24, Y+1 ; 0x01
2bc: 9a 81 ldd r25, Y+2 ; 0x02
2be: 82 2b or r24, r18
2c0: 93 2b or r25, r19
2c2: 89 83 std Y+1, r24 ; 0x01
2c4: 9a 83 std Y+2, r25 ; 0x02
//置OE_L為高
PORTA |= (1<<OE_L);
2c6: 80 91 3b 00 lds r24, 0x003B
2ca: 80 61 ori r24, 0x10 ; 16
2cc: 80 93 3b 00 sts 0x003B, r24
//設置PORTB位輸出
DDRB = 0XFF;
2d0: 8f ef ldi r24, 0xFF ; 255
2d2: 80 93 37 00 sts 0x0037, r24
//使能數碼管刷新
sei();
2d6: 78 94 sei
return counter_value;
2d8: 89 81 ldd r24, Y+1 ; 0x01
2da: 9a 81 ldd r25, Y+2 ; 0x02
2dc: 22 96 adiw r28, 0x02 ; 2
2de: 0f b6 in r0, 0x3f ; 63
2e0: f8 94 cli
2e2: de bf out 0x3e, r29 ; 62
2e4: 0f be out 0x3f, r0 ; 63
2e6: cd bf out 0x3d, r28 ; 61
2e8: df 91 pop r29
2ea: cf 91 pop r28
2ec: 08 95 ret
}
void capture(unsigned int compare)
{
2ee: cf 93 push r28
2f0: df 93 push r29
2f2: cd b7 in r28, 0x3d ; 61
2f4: de b7 in r29, 0x3e ; 62
2f6: 22 97 sbiw r28, 0x02 ; 2
2f8: 0f b6 in r0, 0x3f ; 63
2fa: f8 94 cli
2fc: de bf out 0x3e, r29 ; 62
2fe: 0f be out 0x3f, r0 ; 63
300: cd bf out 0x3d, r28 ; 61
302: 89 83 std Y+1, r24 ; 0x01
304: 9a 83 std Y+2, r25 ; 0x02
//清零外部計數器
PORTA &= ~(1<<CLEAR);
306: 80 91 3b 00 lds r24, 0x003B
30a: 8f 7b andi r24, 0xBF ; 191
30c: 80 93 3b 00 sts 0x003B, r24
asm volatile("nop");
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -