📄 jidong.lst
字号:
2E5 91E9 LD R30,Y+
2E6 91B9 LD R27,Y+
2E7 91A9 LD R26,Y+
2E8 9199 LD R25,Y+
2E9 9189 LD R24,Y+
2EA 9139 LD R19,Y+
2EB 9129 LD R18,Y+
2EC 9119 LD R17,Y+
2ED 9109 LD R16,Y+
2EE 9099 LD R9,Y+
2EF 9089 LD R8,Y+
2F0 9079 LD R7,Y+
2F1 9069 LD R6,Y+
2F2 9059 LD R5,Y+
2F3 9049 LD R4,Y+
2F4 9039 LD R3,Y+
2F5 9029 LD R2,Y+
2F6 9019 LD R1,Y+
2F7 9009 LD R0,Y+
2F8 9518 RETI
(0213) }
(0214) //////////////////////////////寻光部分结束///////////////////////////////
(0215)
(0216)
(0217) ///////////////////////////////避障部分///////////////////////////////
(0218) //定义全局变量
(0219) uchar model = 0;
(0220) uchar model_a = 0;
(0221) uchar flag_zhangai;
(0222) long int count_1 = 0;
(0223) long int count_2 = 0;
(0224) long int count_3 = 0;
(0225)
(0226) //time0 allow
(0227) void time_off( void )
(0228) {
(0229) TCCR0 &=~ ( 1 << OCIE0 );
_time_off:
2F9 B783 IN R24,0x33
2FA 7F8D ANDI R24,0xFD
2FB BF83 OUT 0x33,R24
2FC 9508 RET
(0230) }
(0231)
(0232) //time0 ON
(0233) void time_on( void )
(0234) {
(0235) TCCR0 |= ( 1 << OCIE0 );
_time_on:
2FD B783 IN R24,0x33
2FE 6082 ORI R24,2
2FF BF83 OUT 0x33,R24
300 9508 RET
(0236) }
(0237)
(0238) //TIMER0 initialize - prescale:256
(0239) // WGM: CTC
(0240) // desired value: 4mSec
(0241) // actual value: 4.032mSec (-0.8%)
(0242) void timer0_init(void)
(0243) {
(0244) TCCR0 = 0x00; //stop
_timer0_init:
301 2422 CLR R2
302 BE23 OUT 0x33,R2
(0245) TCNT0 = 0x83; //set count
303 E883 LDI R24,0x83
304 BF82 OUT 0x32,R24
(0246) OCR0 = 0x7D; //set compare
305 E78D LDI R24,0x7D
306 BF8C OUT 0x3C,R24
(0247) TCCR0 = 0x0C; //start timer
307 E08C LDI R24,0xC
308 BF83 OUT 0x33,R24
309 9508 RET
(0248) }
(0249)
(0250) //扫描端口初始化
(0251) void hw_port_init( void )
(0252) {
(0253) DDRC &=~ ( 1 << PC0 ) | ( 1 << PC1 ); //定义PC0, PC1口为上拉
_hw_port_init:
30A 98A0 CBI 0x14,0
(0254) PORTC |= ( 1 << PC0 ) | ( 1 << PC1 );
30B B385 IN R24,0x15
30C 6083 ORI R24,3
30D BB85 OUT 0x15,R24
30E 9508 RET
(0255) }
(0256)
(0257) //红外返回值
(0258) uchar int_scan( void ) //判断障碍,并执行相应动作
(0259) {
(0260) switch( PINC & 0b00000011 )
_int_scan:
30F B303 IN R16,0x13
310 2711 CLR R17
311 7003 ANDI R16,3
312 7010 ANDI R17,0
313 3000 CPI R16,0
314 0701 CPC R16,R17
315 F049 BEQ 0x031F
316 3001 CPI R16,1
317 E0E0 LDI R30,0
318 071E CPC R17,R30
319 F079 BEQ 0x0329
31A 3002 CPI R16,2
31B E0E0 LDI R30,0
31C 071E CPC R17,R30
31D F031 BEQ 0x0324
31E C00F RJMP 0x032E
(0261) {
(0262) case 0b00000000: model = 1; return 1; break; //左右同时遇到障碍
31F E081 LDI R24,1
320 9380 007D STS model,R24
322 E001 LDI R16,1
323 C00E RJMP 0x0332
(0263) case 0b00000010: model = 2; return 2; break; //左遇到障碍
324 E082 LDI R24,2
325 9380 007D STS model,R24
327 E002 LDI R16,2
328 C009 RJMP 0x0332
(0264) case 0b00000001: model = 3; return 3; break; //右遇到障碍
329 E083 LDI R24,3
32A 9380 007D STS model,R24
32C E003 LDI R16,3
32D C004 RJMP 0x0332
(0265) default : model = 0; return 0; break; //没有遇到障碍
32E 2422 CLR R2
32F 9220 007D STS model,R2
331 2700 CLR R16
332 9508 RET
_timer0_comp_isr:
333 920A ST R0,-Y
334 921A ST R1,-Y
335 922A ST R2,-Y
336 923A ST R3,-Y
337 924A ST R4,-Y
338 925A ST R5,-Y
339 926A ST R6,-Y
33A 927A ST R7,-Y
33B 928A ST R8,-Y
33C 929A ST R9,-Y
33D 930A ST R16,-Y
33E 931A ST R17,-Y
33F 932A ST R18,-Y
340 933A ST R19,-Y
341 938A ST R24,-Y
342 939A ST R25,-Y
343 93AA ST R26,-Y
344 93BA ST R27,-Y
345 93EA ST R30,-Y
346 93FA ST R31,-Y
347 B60F IN R0,0x3F
348 920A ST R0,-Y
349 92AA ST R10,-Y
34A 92BA ST R11,-Y
34B 972C SBIW R28,0xC
(0266) }
(0267) }
(0268)
(0269)
(0270) #pragma interrupt_handler timer0_comp_isr:iv_TIM0_COMP
(0271) void timer0_comp_isr(void) // CTC模式, 比较匹配中断服务程序
(0272) {
(0273) //CLI();
(0274) //time_off();
(0275)
(0276) if( model == 0 ) //如果没有障碍返回值,刚继续前一动作
34C 9020 007D LDS R2,model
34E 2022 TST R2
34F F451 BNE 0x035A
(0277) {
(0278) if( flag_zhangai == 1 ) model = model_a;
350 9180 008B LDS R24,flag_zhangai
352 3081 CPI R24,1
353 F429 BNE 0x0359
354 9020 007E LDS R2,model_a
356 9220 007D STS model,R2
358 C001 RJMP 0x035A
(0279) else ADC_start();
359 DE66 RCALL _ADC_start
(0280) }
(0281)
(0282) if( model == 1 ) //左方右方有障碍, 即是前方有障碍
35A 9180 007D LDS R24,model
35C 3081 CPI R24,1
35D F009 BEQ 0x035F
35E C09A RJMP 0x03F9
(0283) {
(0284) model_a = model;
35F 2E28 MOV R2,R24
360 9220 007E STS model_a,R2
(0285) flag_zhangai = 1;
362 E081 LDI R24,1
363 9380 008B STS flag_zhangai,R24
(0286) turn_r();
365 DD1C RCALL _turn_r
(0287) if( int_scan() == 0 )
366 DFA8 RCALL _int_scan
367 2300 TST R16
368 F009 BEQ 0x036A
369 C08F RJMP 0x03F9
(0288) {
(0289) if( ++count_1 >= 100 )
36A E081 LDI R24,1
36B E090 LDI R25,0
36C E0A0 LDI R26,0
36D E0B0 LDI R27,0
36E 9040 0081 LDS R4,count_1+2
370 9050 0082 LDS R5,count_1+3
372 9020 007F LDS R2,count_1
374 9030 0080 LDS R3,count_1+1
376 0E28 ADD R2,R24
377 1E39 ADC R3,R25
378 1E4A ADC R4,R26
379 1E5B ADC R5,R27
37A 8228 STD Y+0,R2
37B 8239 STD Y+1,R3
37C 824A STD Y+2,R4
37D 825B STD Y+3,R5
37E 8028 LDD R2,Y+0
37F 8039 LDD R3,Y+1
380 804A LDD R4,Y+2
381 805B LDD R5,Y+3
382 9230 0080 STS count_1+1,R3
384 9220 007F STS count_1,R2
386 9250 0082 STS count_1+3,R5
388 9240 0081 STS count_1+2,R4
38A E684 LDI R24,0x64
38B E090 LDI R25,0
38C E0A0 LDI R26,0
38D E0B0 LDI R27,0
38E 1628 CP R2,R24
38F 0639 CPC R3,R25
390 064A CPC R4,R26
391 065B CPC R5,R27
392 F40C BGE 0x0394
393 C065 RJMP 0x03F9
(0290) {
(0291) go_ahead();
394 DCD8 RCALL _go_ahead
(0292) if( ++count_1 >= 250 )
395 E081 LDI R24,1
396 E090 LDI R25,0
397 E0A0 LDI R26,0
398 E0B0 LDI R27,0
399 9040 0081 LDS R4,count_1+2
39B 9050 0082 LDS R5,count_1+3
39D 9020 007F LDS R2,count_1
39F 9030 0080 LDS R3,count_1+1
3A1 0E28 ADD R2,R24
3A2 1E39 ADC R3,R25
3A3 1E4A ADC R4,R26
3A4 1E5B ADC R5,R27
3A5 822C STD Y+4,R2
3A6 823D STD Y+5,R3
3A7 824E STD Y+6,R4
3A8 825F STD Y+7,R5
3A9 802C LDD R2,Y+4
3AA 803D LDD R3,Y+5
3AB 804E LDD R4,Y+6
3AC 805F LDD R5,Y+7
3AD 9230 0080 STS count_1+1,R3
3AF 9220 007F STS count_1,R2
3B1 9250 0082 STS count_1+3,R5
3B3 9240 0081 STS count_1+2,R4
3B5 EF8A LDI R24,0xFA
3B6 E090 LDI R25,0
3B7 E0A0 LDI R26,0
3B8 E0B0 LDI R27,0
3B9 1628 CP R2,R24
3BA 0639 CPC R3,R25
3BB 064A CPC R4,R26
3BC 065B CPC R5,R27
3BD F1DC BLT 0x03F9
(0293) {
(0294) turn_l();
3BE DCBC RCALL _turn_l
(0295) if( ++count_1 >= 350 )
3BF E081 LDI R24,1
3C0 E090 LDI R25,0
3C1 E0A0 LDI R26,0
3C2 E0B0 LDI R27,0
3C3 9040 0081 LDS R4,count_1+2
3C5 9050 0082 LDS R5,count_1+3
3C7 9020 007F LDS R2,count_1
3C9 9030 0080 LDS R3,count_1+1
3CB 0E28 ADD R2,R24
3CC 1E39 ADC R3,R25
3CD 1E4A ADC R4,R26
3CE 1E5B ADC R5,R27
3CF 8628 STD Y+8,R2
3D0 8639 STD Y+9,R3
3D1 864A STD Y+10,R4
3D2 865B STD Y+11,R5
3D3 8428 LDD R2,Y+8
3D4 8439 LDD R3,Y+9
3D5 844A LDD R4,Y+10
3D6 845B LDD R5,Y+11
3D7 9230 0080 STS count_1+1,R3
3D9 9220 007F STS count_1,R2
3DB 9250 0082 STS count_1+3,R5
3DD 9240 0081 STS count_1+2,R4
3DF E58E LDI R24,0x5E
3E0 E091 LDI R25,1
3E1 E0A0 LDI R26,0
3E2 E0B0 LDI R27,0
3E3 1628 CP R2,R24
3E4 0639 CPC R3,R25
3E5 064A CPC R4,R26
3E6 065B CPC R5,R27
3E7 F08C BLT 0x03F9
(0296) {
(0297) model = 0;
3E8 2422 CLR R2
3E9 9220 007D STS model,R2
(0298) count_1 = 0;
3EB E080 LDI R24,0
3EC E090 LDI R25,0
3ED E0A0 LDI R26,0
3EE E0B0 LDI R27,0
3EF 9390 0080 STS count_1+1,R25
3F1 9380 007F STS count_1,R24
3F3 93B0 0082 STS count_1+3,R27
3F5 93A0 0081 STS count_1+2,R26
(0299) flag_zhangai = 0;
3F7 9220 008B STS flag_zhangai,R2
(0300) }
(0301) }
(0302) }
(0303) }
(0304) }
(0305)
(0306) if( model == 2 ) //左边有障碍
3F9 9180 007D LDS R24,model
3FB 3082 CPI R24,2
3FC F009 BEQ 0x03FE
3FD C09A RJMP 0x0498
(0307) {
(0308) model_a = model;
3FE 2E28 MOV R2,R24
3FF 9220 007E STS model_a,R2
(0309) flag_zhangai = 1;
401 E081 LDI R24,1
402 9380 008B STS flag_zhangai,R24
(0310) turn_r();
404 DC7D RCALL _turn_r
(0311) if( int_scan() == 0 )
405 DF09 RCALL _int_scan
406 2300 TST R16
407 F009 BEQ 0x0409
408 C08F RJMP 0x0498
(0312) {
(0313) if( ++count_2 >= 100 )
409 E081 LDI R24,1
40A E090 LDI R25,0
40B E0A0 LDI R26,0
40C E0B0 LDI R27,0
40D 9040 0085 LDS R4,count_2+2
40F 9050 0086 LDS R5,count_2+3
411 9020 0083 LDS R2,count_2
413 9030 0084 LDS R3,count_2+1
415 0E28 ADD R2,R24
416 1E39 ADC R3,R25
417 1E4A ADC R4,R26
418 1E5B ADC R5,R27
419 8228 STD Y+0,R2
41A 8239 STD Y+1,R3
41B 824A STD Y+2,R4
41C 825B STD Y+3,R5
41D 8028 LDD R2,Y+0
41E 8039 LDD R3,Y+1
41F 804A LDD R4,Y+2
420 805B LDD R5,Y+3
421 9230 0084 STS count_2+1,R3
423 9220 0083 STS count_2,R2
425 9250 0086 STS count_2+3,R5
427 9240 0085 STS count_2+2,R4
429 E684 LDI R24,0x64
42A E090 LDI R25,0
42B E0A0 LDI R26,0
42C E0B0 LDI R27,0
42D 1628 CP R2,R24
42E 0639 CPC R3,R25
42F 064A CPC R4,R26
430 065B CPC R5,R27
431 F40C BGE 0x0433
432 C065 RJMP 0x0498
(0314) {
(0315) go_ahead();
433 DC39 RCALL _go_ahead
(0316) if( ++count_2 >= 250 )
434 E081 LDI R24,1
435 E090 LDI R25,0
436 E0A0 LDI R26,0
437 E0B0 LDI R27,0
438 9040 0085 LDS R4,count_2+2
43A 9050 0086 LDS R5,count_2+3
43C 9020 0083 LDS R2,count_2
43E 9030 0084 LDS R3,count_2+1
440 0E28 ADD R2,R24
441 1E39 ADC R3,R25
442 1E4A ADC R4,R26
443 1E5B ADC R5,R27
444 822C STD Y+4,R2
445 823D STD Y+5,R3
446 824E STD Y+6,R4
447 825F STD Y+7,R5
448 802C LDD R2,Y+4
449 803D LDD R3,Y+5
44A 804E LDD R4,Y+6
44B 805F LDD R5,Y+7
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -