📄 irsensor.lss
字号:
IrSensor.elf: file format elf32-avr
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000022e 00000000 00000000 00000094 2**0
CONTENTS, ALLOC, LOAD, READONLY, CODE
1 .data 00000000 00800060 0000022e 000002c2 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000002 00800060 00800060 000002c2 2**0
ALLOC
3 .noinit 00000000 00800062 00800062 000002c2 2**0
CONTENTS
4 .eeprom 00000000 00810000 00810000 000002c2 2**0
CONTENTS
5 .debug_aranges 00000028 00000000 00000000 000002c2 2**0
CONTENTS, READONLY, DEBUGGING
6 .debug_pubnames 000000a4 00000000 00000000 000002ea 2**0
CONTENTS, READONLY, DEBUGGING
7 .debug_info 000002e0 00000000 00000000 0000038e 2**0
CONTENTS, READONLY, DEBUGGING
8 .debug_abbrev 00000141 00000000 00000000 0000066e 2**0
CONTENTS, READONLY, DEBUGGING
9 .debug_line 000002f8 00000000 00000000 000007af 2**0
CONTENTS, READONLY, DEBUGGING
10 .debug_str 00000153 00000000 00000000 00000aa7 2**0
CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:
00000000 <__vectors>:
0: 12 c0 rjmp .+36 ; 0x26
2: 2b c0 rjmp .+86 ; 0x5a
4: 2a c0 rjmp .+84 ; 0x5a
6: 29 c0 rjmp .+82 ; 0x5a
8: 28 c0 rjmp .+80 ; 0x5a
a: 27 c0 rjmp .+78 ; 0x5a
c: 26 c0 rjmp .+76 ; 0x5a
e: 25 c0 rjmp .+74 ; 0x5a
10: 40 c0 rjmp .+128 ; 0x92
12: 24 c0 rjmp .+72 ; 0x5c
14: 22 c0 rjmp .+68 ; 0x5a
16: 21 c0 rjmp .+66 ; 0x5a
18: 20 c0 rjmp .+64 ; 0x5a
1a: 1f c0 rjmp .+62 ; 0x5a
1c: 1e c0 rjmp .+60 ; 0x5a
1e: 1d c0 rjmp .+58 ; 0x5a
20: 1c c0 rjmp .+56 ; 0x5a
22: 1b c0 rjmp .+54 ; 0x5a
24: 1a c0 rjmp .+52 ; 0x5a
00000026 <__ctors_end>:
26: 11 24 eor r1, r1
28: 1f be out 0x3f, r1 ; 63
2a: cf e5 ldi r28, 0x5F ; 95
2c: d4 e0 ldi r29, 0x04 ; 4
2e: de bf out 0x3e, r29 ; 62
30: cd bf out 0x3d, r28 ; 61
00000032 <__do_copy_data>:
32: 10 e0 ldi r17, 0x00 ; 0
34: a0 e6 ldi r26, 0x60 ; 96
36: b0 e0 ldi r27, 0x00 ; 0
38: ee e2 ldi r30, 0x2E ; 46
3a: f2 e0 ldi r31, 0x02 ; 2
3c: 02 c0 rjmp .+4 ; 0x42
0000003e <.do_copy_data_loop>:
3e: 05 90 lpm r0, Z+
40: 0d 92 st X+, r0
00000042 <.do_copy_data_start>:
42: a0 36 cpi r26, 0x60 ; 96
44: b1 07 cpc r27, r17
46: d9 f7 brne .-10 ; 0x3e
00000048 <__do_clear_bss>:
48: 10 e0 ldi r17, 0x00 ; 0
4a: a0 e6 ldi r26, 0x60 ; 96
4c: b0 e0 ldi r27, 0x00 ; 0
4e: 01 c0 rjmp .+2 ; 0x52
00000050 <.do_clear_bss_loop>:
50: 1d 92 st X+, r1
00000052 <.do_clear_bss_start>:
52: a2 36 cpi r26, 0x62 ; 98
54: b1 07 cpc r27, r17
56: e1 f7 brne .-8 ; 0x50
58: ac c0 rjmp .+344 ; 0x1b2
0000005a <__bad_interrupt>:
5a: d2 cf rjmp .-92 ; 0x0
0000005c <__vector_9>:
//38K Hz
SIGNAL(SIG_OVERFLOW0)
{
5c: 1f 92 push r1
5e: 0f 92 push r0
60: 0f b6 in r0, 0x3f ; 63
62: 0f 92 push r0
64: 11 24 eor r1, r1
66: 8f 93 push r24
68: 9f 93 push r25
if(ucIr_LR_Flag == IR_LEFT_LED)
6a: 80 91 60 00 lds r24, 0x0060
6e: 88 23 and r24, r24
70: 19 f4 brne .+6 ; 0x78
PORTB ^= _BV(PB0);
72: 88 b3 in r24, 0x18 ; 24
74: 91 e0 ldi r25, 0x01 ; 1
76: 02 c0 rjmp .+4 ; 0x7c
else
PORTB ^= _BV(PB1);
78: 88 b3 in r24, 0x18 ; 24
7a: 92 e0 ldi r25, 0x02 ; 2
7c: 89 27 eor r24, r25
7e: 88 bb out 0x18, r24 ; 24
TCNT0 = 256 - 13;
80: 83 ef ldi r24, 0xF3 ; 243
82: 82 bf out 0x32, r24 ; 50
84: 9f 91 pop r25
86: 8f 91 pop r24
88: 0f 90 pop r0
8a: 0f be out 0x3f, r0 ; 63
8c: 0f 90 pop r0
8e: 1f 90 pop r1
90: 18 95 reti
00000092 <__vector_8>:
}
//600ms的时间延时
SIGNAL(SIG_OVERFLOW1)
{
92: 1f 92 push r1
94: 0f 92 push r0
96: 0f b6 in r0, 0x3f ; 63
98: 0f 92 push r0
9a: 11 24 eor r1, r1
9c: 8f 93 push r24
ucIr_600msOverFlag = IR_TRUE;
9e: 81 e0 ldi r24, 0x01 ; 1
a0: 80 93 61 00 sts 0x0061, r24
a4: 8f 91 pop r24
a6: 0f 90 pop r0
a8: 0f be out 0x3f, r0 ; 63
aa: 0f 90 pop r0
ac: 1f 90 pop r1
ae: 18 95 reti
000000b0 <Ir_Init>:
//TCNT1H = 0xff - 0x09;
//TCNT1L = 0xff - 0x28+1;
}
void Ir_Init(void)
{
//初始化
ucIr_LR_Flag = IR_LEFT_LED;
b0: 10 92 60 00 sts 0x0060, r1
ucIr_600msOverFlag = IR_FALSE;
b4: 10 92 61 00 sts 0x0061, r1
//设置端口方向
DDRB = 0xff;
b8: 8f ef ldi r24, 0xFF ; 255
ba: 87 bb out 0x17, r24 ; 23
DDRC = 0x7F;
bc: 8f e7 ldi r24, 0x7F ; 127
be: 84 bb out 0x14, r24 ; 20
DDRD = 0x00;
c0: 11 ba out 0x11, r1 ; 17
//设置TIMER0 计数器
IR_38K_Disable;
c2: 13 be out 0x33, r1 ; 51
c4: 89 ef ldi r24, 0xF9 ; 249
c6: 82 bf out 0x32, r24 ; 50
//设置TIMER1 计数器
TCCR1A = 0x00;
c8: 1f bc out 0x2f, r1 ; 47
IR_600ms_Disable;
ca: 86 ef ldi r24, 0xF6 ; 246
cc: 8d bd out 0x2d, r24 ; 45
ce: 88 ed ldi r24, 0xD8 ; 216
d0: 8c bd out 0x2c, r24 ; 44
d2: 1e bc out 0x2e, r1 ; 46
//使能中断
TIMSK = _BV(TOIE0)|_BV(TOIE1);
d4: 85 e0 ldi r24, 0x05 ; 5
d6: 89 bf out 0x39, r24 ; 57
sei();
d8: 78 94 sei
da: 08 95 ret
000000dc <Ir_Check>:
}
int Ir_Check(void)
{
unsigned char ucIsHaveSignFlag;
IR_38K_Enable; //打开38k信号的发送
dc: 82 e0 ldi r24, 0x02 ; 2
de: 83 bf out 0x33, r24 ; 51
e0: 89 ef ldi r24, 0xF9 ; 249
e2: 82 bf out 0x32, r24 ; 50
IR_600ms_Enable;//600ms时间计数开始
e4: 86 ef ldi r24, 0xF6 ; 246
e6: 8d bd out 0x2d, r24 ; 45
e8: 88 ed ldi r24, 0xD8 ; 216
ea: 8c bd out 0x2c, r24 ; 44
ec: 84 e0 ldi r24, 0x04 ; 4
ee: 8e bd out 0x2e, r24 ; 46
ucIr_600msOverFlag = IR_FALSE;
f0: 10 92 61 00 sts 0x0061, r1
ucIsHaveSignFlag = IR_FALSE;
f4: 40 e0 ldi r20, 0x00 ; 0
//等待600ms时间完成
while(ucIr_600msOverFlag == IR_FALSE )
{
if(IR_REC_HAVE_SIGN)
{ //检测到了信号
ucIsHaveSignFlag = IR_TRUE;
break;
f6: 80 91 61 00 lds r24, 0x0061
fa: 88 23 and r24, r24
fc: 89 f4 brne .+34 ; 0x120
fe: 21 e0 ldi r18, 0x01 ; 1
100: 30 e0 ldi r19, 0x00 ; 0
102: 80 b3 in r24, 0x10 ; 16
104: 99 27 eor r25, r25
106: 96 95 lsr r25
108: 87 95 ror r24
10a: 96 95 lsr r25
10c: 87 95 ror r24
10e: 81 70 andi r24, 0x01 ; 1
110: 90 70 andi r25, 0x00 ; 0
112: 82 17 cp r24, r18
114: 93 07 cpc r25, r19
116: 91 f4 brne .+36 ; 0x13c
118: 80 91 61 00 lds r24, 0x0061
11c: 88 23 and r24, r24
11e: 89 f3 breq .-30 ; 0x102
}
}
IR_38K_Disable; //关闭38k信号
120: 13 be out 0x33, r1 ; 51
122: 89 ef ldi r24, 0xF9 ; 249
124: 82 bf out 0x32, r24 ; 50
IR_600ms_Disable;//600ms时间计数关闭
126: 86 ef ldi r24, 0xF6 ; 246
128: 8d bd out 0x2d, r24 ; 45
12a: 88 ed ldi r24, 0xD8 ; 216
12c: 8c bd out 0x2c, r24 ; 44
12e: 1e bc out 0x2e, r1 ; 46
if( ucIr_LR_Flag == IR_LEFT_LED)
130: 80 91 60 00 lds r24, 0x0060
134: 88 23 and r24, r24
136: 21 f4 brne .+8 ; 0x140
PORTB &=~ _BV(PB0);
138: c0 98 cbi 0x18, 0 ; 24
13a: 03 c0 rjmp .+6 ; 0x142
13c: 41 e0 ldi r20, 0x01 ; 1
13e: f0 cf rjmp .-32 ; 0x120
else
PORTB &=~ _BV(PB1);
140: c1 98 cbi 0x18, 1 ; 24
if(ucIsHaveSignFlag == IR_FALSE) return IR_FALSE; //没有找到
142: 44 23 and r20, r20
144: 19 f4 brne .+6 ; 0x14c
146: 2e c0 rjmp .+92 ; 0x1a4
IR_600ms_Enable;//600ms时间计数开始
ucIsHaveSignFlag = IR_FALSE;
ucIr_600msOverFlag = IR_FALSE;
//等待600ms时间完成
while(ucIr_600msOverFlag == IR_FALSE)
{
if( !IR_REC_HAVE_SIGN )
{ //检测到了信号
ucIsHaveSignFlag = IR_TRUE;
148: 41 e0 ldi r20, 0x01 ; 1
break;
14a: 1e c0 rjmp .+60 ; 0x188
14c: 86 ef ldi r24, 0xF6 ; 246
14e: 8d bd out 0x2d, r24 ; 45
150: 88 ed ldi r24, 0xD8 ; 216
152: 8c bd out 0x2c, r24 ; 44
154: 84 e0 ldi r24, 0x04 ; 4
156: 8e bd out 0x2e, r24 ; 46
158: 40 e0 ldi r20, 0x00 ; 0
15a: 40 93 61 00 sts 0x0061, r20
15e: 80 91 61 00 lds r24, 0x0061
162: 88 23 and r24, r24
164: 89 f4 brne .+34 ; 0x188
166: 21 e0 ldi r18, 0x01 ; 1
168: 30 e0 ldi r19, 0x00 ; 0
16a: 80 b3 in r24, 0x10 ; 16
16c: 99 27 eor r25, r25
16e: 96 95 lsr r25
170: 87 95 ror r24
172: 96 95 lsr r25
174: 87 95 ror r24
176: 81 70 andi r24, 0x01 ; 1
178: 90 70 andi r25, 0x00 ; 0
17a: 82 17 cp r24, r18
17c: 93 07 cpc r25, r19
17e: 21 f3 breq .-56 ; 0x148
180: 80 91 61 00 lds r24, 0x0061
184: 88 23 and r24, r24
186: 89 f3 breq .-30 ; 0x16a
}
}
IR_600ms_Disable;//600ms时间计数关闭
188: 86 ef ldi r24, 0xF6 ; 246
18a: 8d bd out 0x2d, r24 ; 45
18c: 88 ed ldi r24, 0xD8 ; 216
18e: 8c bd out 0x2c, r24 ; 44
190: 1e bc out 0x2e, r1 ; 46
if( ucIr_LR_Flag == IR_LEFT_LED)
192: 80 91 60 00 lds r24, 0x0060
196: 88 23 and r24, r24
198: 11 f4 brne .+4 ; 0x19e
PORTB &=~ _BV(PB0);
19a: c0 98 cbi 0x18, 0 ; 24
19c: 01 c0 rjmp .+2 ; 0x1a0
else
PORTB &=~ _BV(PB1);
19e: c1 98 cbi 0x18, 1 ; 24
if(ucIsHaveSignFlag == IR_FALSE) return IR_FALSE; //如果找到,则信号不正确
1a0: 44 23 and r20, r20
1a2: 19 f4 brne .+6 ; 0x1aa
1a4: 80 e0 ldi r24, 0x00 ; 0
1a6: 90 e0 ldi r25, 0x00 ; 0
1a8: 08 95 ret
//由信号
return IR_TRUE;
1aa: 81 e0 ldi r24, 0x01 ; 1
1ac: 90 e0 ldi r25, 0x00 ; 0
}
1ae: 08 95 ret
1b0: 08 95 ret
000001b2 <main>:
int main(void)
{
1b2: cf e5 ldi r28, 0x5F ; 95
1b4: d4 e0 ldi r29, 0x04 ; 4
1b6: de bf out 0x3e, r29 ; 62
1b8: cd bf out 0x3d, r28 ; 61
int iRetVal;
Ir_Init();
1ba: 7a df rcall .-268 ; 0xb0
while(1)
{
iRetVal = Ir_Check();
1bc: 8f df rcall .-226 ; 0xdc
1be: 9c 01 movw r18, r24
if(ucIr_LR_Flag == IR_LEFT_LED)
1c0: 80 91 60 00 lds r24, 0x0060
1c4: 88 23 and r24, r24
1c6: 51 f4 brne .+20 ; 0x1dc
{
if( iRetVal == IR_TRUE)
1c8: 21 30 cpi r18, 0x01 ; 1
1ca: 31 05 cpc r19, r1
1cc: 11 f4 brne .+4 ; 0x1d2
{
PORTC |= _BV(PC0);
1ce: a8 9a sbi 0x15, 0 ; 21
1d0: 01 c0 rjmp .+2 ; 0x1d4
}
else
{
PORTC &=~ _BV(PC0);
1d2: a8 98 cbi 0x15, 0 ; 21
}
//DelayMs(200);
ucIr_LR_Flag = IR_RIGHT_LED;
1d4: 81 e0 ldi r24, 0x01 ; 1
1d6: 80 93 60 00 sts 0x0060, r24
1da: f0 cf rjmp .-32 ; 0x1bc
}
else
{
if( iRetVal == IR_TRUE)
1dc: 21 30 cpi r18, 0x01 ; 1
1de: 31 05 cpc r19, r1
1e0: 11 f4 brne .+4 ; 0x1e6
{
PORTC |= _BV(PC1);
1e2: a9 9a sbi 0x15, 1 ; 21
1e4: 01 c0 rjmp .+2 ; 0x1e8
}
else
{
PORTC &=~ _BV(PC1);
1e6: a9 98 cbi 0x15, 1 ; 21
}
//DelayMs(200);
ucIr_LR_Flag = IR_LEFT_LED;
1e8: 10 92 60 00 sts 0x0060, r1
1ec: e7 cf rjmp .-50 ; 0x1bc
000001ee <DelayUs>:
#include <avr/delay.h>
//微秒级延时
void DelayUs(DM_TIME ulTime)
{
1ee: 9c 01 movw r18, r24
while(ulTime>0)
{
_delay_us(1);
ulTime--;
1f0: 89 2b or r24, r25
1f2: 51 f0 breq .+20 ; 0x208
1f4: 41 e0 ldi r20, 0x01 ; 1
1f6: 50 e0 ldi r21, 0x00 ; 0
1f8: 60 e0 ldi r22, 0x00 ; 0
1fa: 70 e0 ldi r23, 0x00 ; 0
*/
static __inline__ void
_delay_loop_1(uint8_t __count)
{
__asm__ volatile (
1fc: 84 2f mov r24, r20
1fe: 8a 95 dec r24
200: f1 f7 brne .-4 ; 0x1fe
202: 21 50 subi r18, 0x01 ; 1
204: 30 40 sbci r19, 0x00 ; 0
206: d1 f7 brne .-12 ; 0x1fc
208: 08 95 ret
0000020a <DelayMs>:
}
}
//毫秒级延时
void DelayMs(DM_TIME mlTime)
{
20a: cf 93 push r28
20c: df 93 push r29
20e: 9c 01 movw r18, r24
while(mlTime>0)
{
_delay_ms(1);
mlTime--;
210: 89 2b or r24, r25
212: 51 f0 breq .+20 ; 0x228
214: a8 ee ldi r26, 0xE8 ; 232
216: b3 e0 ldi r27, 0x03 ; 3
218: c0 e0 ldi r28, 0x00 ; 0
21a: d0 e0 ldi r29, 0x00 ; 0
*/
static __inline__ void
_delay_loop_2(uint16_t __count)
{
__asm__ volatile (
21c: cd 01 movw r24, r26
21e: 01 97 sbiw r24, 0x01 ; 1
220: f1 f7 brne .-4 ; 0x21e
222: 21 50 subi r18, 0x01 ; 1
224: 30 40 sbci r19, 0x00 ; 0
226: d1 f7 brne .-12 ; 0x21c
228: df 91 pop r29
22a: cf 91 pop r28
22c: 08 95 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -