⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irsensor.lss

📁 红外线避障检测程序
💻 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 + -