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

📄 car_prevent.lss

📁 基于AT Mega16的多功能小车
💻 LSS
📖 第 1 页 / 共 3 页
字号:
			break;
		case OBSTACLE_LEFT:
			switch(sensor)
 19a:	80 31       	cpi	r24, 0x10	; 16
 19c:	91 05       	cpc	r25, r1
 19e:	b1 f0       	breq	.+44     	; 0x1cc <car_prevent+0xea>
 1a0:	81 31       	cpi	r24, 0x11	; 17
 1a2:	91 05       	cpc	r25, r1
 1a4:	18 f4       	brcc	.+6      	; 0x1ac <car_prevent+0xca>
 1a6:	89 2b       	or	r24, r25
 1a8:	e9 f0       	breq	.+58     	; 0x1e4 <car_prevent+0x102>
 1aa:	08 95       	ret
 1ac:	80 32       	cpi	r24, 0x20	; 32
 1ae:	91 05       	cpc	r25, r1
 1b0:	09 f0       	breq	.+2      	; 0x1b4 <car_prevent+0xd2>
 1b2:	61 c0       	rjmp	.+194    	; 0x276 <car_prevent+0x194>
				case SENSOR_N:				// B ---> A:	左侧障碍消除	小车停止
					car_stop();
					g_state = OBSTACLE_NONE;
					break;
				case SENSOR_L:				// B ---> B:	左->左侧障碍	小车右转
					car_right();
 1b4:	0e 94 d0 01 	call	0x3a0	; 0x3a0 <car_right>
 1b8:	88 e8       	ldi	r24, 0x88	; 136
 1ba:	93 e1       	ldi	r25, 0x13	; 19
 1bc:	28 eb       	ldi	r18, 0xB8	; 184
 1be:	30 e0       	ldi	r19, 0x00	; 0
 1c0:	f9 01       	movw	r30, r18
 1c2:	31 97       	sbiw	r30, 0x01	; 1
 1c4:	f1 f7       	brne	.-4      	; 0x1c2 <car_prevent+0xe0>
		{
			// wait 1/10 ms
			_delay_loop_2(((F_CPU) / 4e3) / 10);
			__ticks --;
 1c6:	01 97       	sbiw	r24, 0x01	; 1
		__ticks = 1;
	else if (__tmp > 65535)
	{
		//	__ticks = requested delay in 1/10 ms
		__ticks = (uint16_t) (__ms * 10.0);
		while(__ticks)
 1c8:	d9 f7       	brne	.-10     	; 0x1c0 <car_prevent+0xde>
 1ca:	67 c0       	rjmp	.+206    	; 0x29a <car_prevent+0x1b8>
					_delay_ms(500);
					g_state = OBSTACLE_LEFT;
					break;
				case SENSOR_R:				// B ---> C:	左->右侧障碍	小车右转
					car_right();
 1cc:	0e 94 d0 01 	call	0x3a0	; 0x3a0 <car_right>
 1d0:	88 e8       	ldi	r24, 0x88	; 136
 1d2:	93 e1       	ldi	r25, 0x13	; 19
 1d4:	28 eb       	ldi	r18, 0xB8	; 184
 1d6:	30 e0       	ldi	r19, 0x00	; 0
 1d8:	f9 01       	movw	r30, r18
 1da:	31 97       	sbiw	r30, 0x01	; 1
 1dc:	f1 f7       	brne	.-4      	; 0x1da <car_prevent+0xf8>
		{
			// wait 1/10 ms
			_delay_loop_2(((F_CPU) / 4e3) / 10);
			__ticks --;
 1de:	01 97       	sbiw	r24, 0x01	; 1
		__ticks = 1;
	else if (__tmp > 65535)
	{
		//	__ticks = requested delay in 1/10 ms
		__ticks = (uint16_t) (__ms * 10.0);
		while(__ticks)
 1e0:	d9 f7       	brne	.-10     	; 0x1d8 <car_prevent+0xf6>
 1e2:	68 c0       	rjmp	.+208    	; 0x2b4 <car_prevent+0x1d2>
					_delay_ms(500);
					g_state = OBSTRACLE_RIGHT;
					break;
				case SENSOR_B:				// B ---> D:	左->前方障碍	小车右转
					car_right();
 1e4:	0e 94 d0 01 	call	0x3a0	; 0x3a0 <car_right>
 1e8:	88 e8       	ldi	r24, 0x88	; 136
 1ea:	93 e1       	ldi	r25, 0x13	; 19
 1ec:	28 eb       	ldi	r18, 0xB8	; 184
 1ee:	30 e0       	ldi	r19, 0x00	; 0
 1f0:	f9 01       	movw	r30, r18
 1f2:	31 97       	sbiw	r30, 0x01	; 1
 1f4:	f1 f7       	brne	.-4      	; 0x1f2 <car_prevent+0x110>
		{
			// wait 1/10 ms
			_delay_loop_2(((F_CPU) / 4e3) / 10);
			__ticks --;
 1f6:	01 97       	sbiw	r24, 0x01	; 1
		__ticks = 1;
	else if (__tmp > 65535)
	{
		//	__ticks = requested delay in 1/10 ms
		__ticks = (uint16_t) (__ms * 10.0);
		while(__ticks)
 1f8:	d9 f7       	brne	.-10     	; 0x1f0 <car_prevent+0x10e>
 1fa:	2f c0       	rjmp	.+94     	; 0x25a <car_prevent+0x178>
					g_state = OBSTRACLE_FRONT;
					break;
			}
			break;
		case OBSTRACLE_RIGHT:
			switch(sensor)
 1fc:	80 31       	cpi	r24, 0x10	; 16
 1fe:	91 05       	cpc	r25, r1
 200:	a9 f0       	breq	.+42     	; 0x22c <car_prevent+0x14a>
 202:	81 31       	cpi	r24, 0x11	; 17
 204:	91 05       	cpc	r25, r1
 206:	18 f4       	brcc	.+6      	; 0x20e <car_prevent+0x12c>
 208:	89 2b       	or	r24, r25
 20a:	e1 f0       	breq	.+56     	; 0x244 <car_prevent+0x162>
 20c:	08 95       	ret
 20e:	80 32       	cpi	r24, 0x20	; 32
 210:	91 05       	cpc	r25, r1
 212:	89 f5       	brne	.+98     	; 0x276 <car_prevent+0x194>
				case SENSOR_N:				// C ---> A:	右侧障碍消除	小车停止
					car_stop();
					g_state = OBSTACLE_NONE;
					break;
				case SENSOR_L:				// C ---> B:	右->左侧障碍	小车左转
					car_left();
 214:	0e 94 c7 01 	call	0x38e	; 0x38e <car_left>
 218:	88 e8       	ldi	r24, 0x88	; 136
 21a:	93 e1       	ldi	r25, 0x13	; 19
 21c:	28 eb       	ldi	r18, 0xB8	; 184
 21e:	30 e0       	ldi	r19, 0x00	; 0
 220:	f9 01       	movw	r30, r18
 222:	31 97       	sbiw	r30, 0x01	; 1
 224:	f1 f7       	brne	.-4      	; 0x222 <car_prevent+0x140>
		{
			// wait 1/10 ms
			_delay_loop_2(((F_CPU) / 4e3) / 10);
			__ticks --;
 226:	01 97       	sbiw	r24, 0x01	; 1
		__ticks = 1;
	else if (__tmp > 65535)
	{
		//	__ticks = requested delay in 1/10 ms
		__ticks = (uint16_t) (__ms * 10.0);
		while(__ticks)
 228:	d9 f7       	brne	.-10     	; 0x220 <car_prevent+0x13e>
 22a:	37 c0       	rjmp	.+110    	; 0x29a <car_prevent+0x1b8>
					_delay_ms(500);
					g_state = OBSTACLE_LEFT;
					break;
				case SENSOR_R:				// C ---> C:	右->右侧障碍	小车左转
					car_left();
 22c:	0e 94 c7 01 	call	0x38e	; 0x38e <car_left>
 230:	88 e8       	ldi	r24, 0x88	; 136
 232:	93 e1       	ldi	r25, 0x13	; 19
 234:	28 eb       	ldi	r18, 0xB8	; 184
 236:	30 e0       	ldi	r19, 0x00	; 0
 238:	f9 01       	movw	r30, r18
 23a:	31 97       	sbiw	r30, 0x01	; 1
 23c:	f1 f7       	brne	.-4      	; 0x23a <car_prevent+0x158>
		{
			// wait 1/10 ms
			_delay_loop_2(((F_CPU) / 4e3) / 10);
			__ticks --;
 23e:	01 97       	sbiw	r24, 0x01	; 1
		__ticks = 1;
	else if (__tmp > 65535)
	{
		//	__ticks = requested delay in 1/10 ms
		__ticks = (uint16_t) (__ms * 10.0);
		while(__ticks)
 240:	d9 f7       	brne	.-10     	; 0x238 <car_prevent+0x156>
 242:	38 c0       	rjmp	.+112    	; 0x2b4 <car_prevent+0x1d2>
					_delay_ms(500);
					g_state = OBSTRACLE_RIGHT;
					break;
				case SENSOR_B:				// C ---> D:	右->前方障碍	小车左转
					car_left();
 244:	0e 94 c7 01 	call	0x38e	; 0x38e <car_left>
 248:	88 e8       	ldi	r24, 0x88	; 136
 24a:	93 e1       	ldi	r25, 0x13	; 19
 24c:	28 eb       	ldi	r18, 0xB8	; 184
 24e:	30 e0       	ldi	r19, 0x00	; 0
 250:	f9 01       	movw	r30, r18
 252:	31 97       	sbiw	r30, 0x01	; 1
 254:	f1 f7       	brne	.-4      	; 0x252 <car_prevent+0x170>
		{
			// wait 1/10 ms
			_delay_loop_2(((F_CPU) / 4e3) / 10);
			__ticks --;
 256:	01 97       	sbiw	r24, 0x01	; 1
		__ticks = 1;
	else if (__tmp > 65535)
	{
		//	__ticks = requested delay in 1/10 ms
		__ticks = (uint16_t) (__ms * 10.0);
		while(__ticks)
 258:	d9 f7       	brne	.-10     	; 0x250 <car_prevent+0x16e>
					_delay_ms(500);
					g_state = OBSTRACLE_FRONT;
 25a:	83 e0       	ldi	r24, 0x03	; 3
 25c:	2c c0       	rjmp	.+88     	; 0x2b6 <car_prevent+0x1d4>
					break;
			}
			break;
		case OBSTRACLE_FRONT:
			switch(sensor)
 25e:	80 31       	cpi	r24, 0x10	; 16
 260:	91 05       	cpc	r25, r1
 262:	e9 f0       	breq	.+58     	; 0x29e <car_prevent+0x1bc>
 264:	81 31       	cpi	r24, 0x11	; 17
 266:	91 05       	cpc	r25, r1
 268:	18 f4       	brcc	.+6      	; 0x270 <car_prevent+0x18e>
 26a:	89 2b       	or	r24, r25
 26c:	39 f1       	breq	.+78     	; 0x2bc <car_prevent+0x1da>
 26e:	08 95       	ret
 270:	80 32       	cpi	r24, 0x20	; 32
 272:	91 05       	cpc	r25, r1
 274:	39 f0       	breq	.+14     	; 0x284 <car_prevent+0x1a2>
 276:	c0 97       	sbiw	r24, 0x30	; 48
 278:	79 f5       	brne	.+94     	; 0x2d8 <car_prevent+0x1f6>
			{
				case SENSOR_N:				// D ---> A:	前方障碍消除	小车停止
					car_stop();
 27a:	0e 94 81 01 	call	0x302	; 0x302 <car_stop>
					g_state = OBSTACLE_NONE;
 27e:	10 92 60 00 	sts	0x0060, r1
 282:	08 95       	ret
					break;
				case SENSOR_L:				// D ---> B:	前->左侧障碍	小车右转
					car_right();
 284:	0e 94 d0 01 	call	0x3a0	; 0x3a0 <car_right>
 288:	88 e8       	ldi	r24, 0x88	; 136
 28a:	93 e1       	ldi	r25, 0x13	; 19
 28c:	28 eb       	ldi	r18, 0xB8	; 184
 28e:	30 e0       	ldi	r19, 0x00	; 0
 290:	f9 01       	movw	r30, r18
 292:	31 97       	sbiw	r30, 0x01	; 1
 294:	f1 f7       	brne	.-4      	; 0x292 <car_prevent+0x1b0>
		{
			// wait 1/10 ms
			_delay_loop_2(((F_CPU) / 4e3) / 10);
			__ticks --;
 296:	01 97       	sbiw	r24, 0x01	; 1
		__ticks = 1;
	else if (__tmp > 65535)
	{
		//	__ticks = requested delay in 1/10 ms
		__ticks = (uint16_t) (__ms * 10.0);
		while(__ticks)
 298:	d9 f7       	brne	.-10     	; 0x290 <car_prevent+0x1ae>
					_delay_ms(500);
					g_state = OBSTACLE_LEFT;
 29a:	81 e0       	ldi	r24, 0x01	; 1
 29c:	0c c0       	rjmp	.+24     	; 0x2b6 <car_prevent+0x1d4>
					break;
				case SENSOR_R:				// D ---> C:	前->右侧障碍	小车右转
					car_right();
 29e:	0e 94 d0 01 	call	0x3a0	; 0x3a0 <car_right>
 2a2:	88 e8       	ldi	r24, 0x88	; 136
 2a4:	93 e1       	ldi	r25, 0x13	; 19
 2a6:	28 eb       	ldi	r18, 0xB8	; 184
 2a8:	30 e0       	ldi	r19, 0x00	; 0
 2aa:	f9 01       	movw	r30, r18
 2ac:	31 97       	sbiw	r30, 0x01	; 1
 2ae:	f1 f7       	brne	.-4      	; 0x2ac <car_prevent+0x1ca>
		{
			// wait 1/10 ms
			_delay_loop_2(((F_CPU) / 4e3) / 10);
			__ticks --;
 2b0:	01 97       	sbiw	r24, 0x01	; 1
		__ticks = 1;
	else if (__tmp > 65535)
	{
		//	__ticks = requested delay in 1/10 ms
		__ticks = (uint16_t) (__ms * 10.0);
		while(__ticks)
 2b2:	d9 f7       	brne	.-10     	; 0x2aa <car_prevent+0x1c8>
					_delay_ms(500);
					g_state = OBSTRACLE_RIGHT;
 2b4:	82 e0       	ldi	r24, 0x02	; 2
 2b6:	80 93 60 00 	sts	0x0060, r24
 2ba:	08 95       	ret
					break;
				case SENSOR_B:				// D ---> D:	前->前方障碍	小车后退并右转
					car_right();
 2bc:	0e 94 d0 01 	call	0x3a0	; 0x3a0 <car_right>
 2c0:	88 e8       	ldi	r24, 0x88	; 136
 2c2:	93 e1       	ldi	r25, 0x13	; 19
 2c4:	28 eb       	ldi	r18, 0xB8	; 184
 2c6:	30 e0       	ldi	r19, 0x00	; 0
 2c8:	f9 01       	movw	r30, r18
 2ca:	31 97       	sbiw	r30, 0x01	; 1
 2cc:	f1 f7       	brne	.-4      	; 0x2ca <car_prevent+0x1e8>
		{
			// wait 1/10 ms
			_delay_loop_2(((F_CPU) / 4e3) / 10);
			__ticks --;
 2ce:	01 97       	sbiw	r24, 0x01	; 1
		__ticks = 1;
	else if (__tmp > 65535)
	{
		//	__ticks = requested delay in 1/10 ms
		__ticks = (uint16_t) (__ms * 10.0);
		while(__ticks)
 2d0:	d9 f7       	brne	.-10     	; 0x2c8 <car_prevent+0x1e6>
					_delay_ms(500);
					g_state = OBSTRACLE_FRONT;
 2d2:	83 e0       	ldi	r24, 0x03	; 3
 2d4:	80 93 60 00 	sts	0x0060, r24
 2d8:	08 95       	ret

000002da <main>:
//======================================================================
int main(void)
{
	uint8_t key;

	Key_Init();
 2da:	0e 94 d9 01 	call	0x3b2	; 0x3b2 <Key_Init>
	car_init();
 2de:	0e 94 7d 01 	call	0x2fa	; 0x2fa <car_init>
//	入口参数:	无
//	返回  值:	无
//======================================================================
void sensor_init(void)
{
	DDRA &= ~0x30;						// PA4~PA5 设置为输入
 2e2:	8a b3       	in	r24, 0x1a	; 26
 2e4:	8f 7c       	andi	r24, 0xCF	; 207
 2e6:	8a bb       	out	0x1a, r24	; 26
	car_init();
	sensor_init();

	while(1)						// 等待按键启动 KEY4
	{
		key = Key_Get();
 2e8:	0e 94 05 02 	call	0x40a	; 0x40a <Key_Get>
		if(key == KEY_4)
 2ec:	88 30       	cpi	r24, 0x08	; 8
 2ee:	e1 f7       	brne	.-8      	; 0x2e8 <main+0xe>
			break;
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -