📄 宝贝机器人.lis
字号:
034C .dbline 221
034C 23C0 xjmp L68
034E L67:
034E .dbline 222
034E ; else if(PINC==0x04)//若右边和中间均无信号
034E 83B3 in R24,0x13
0350 8430 cpi R24,4
0352 29F4 brne L69
0354 .dbline 223
0354 ; { turn_left();turn_state0=1;} //左转
0354 .dbline 223
0354 E3DE xcall _turn_left
0356 .dbline 223
0356 81E0 ldi R24,1
0358 80930000 sts _turn_state0,R24
035C .dbline 223
035C 1BC0 xjmp L70
035E L69:
035E .dbline 224
035E ; else if(PINC==0x01)//若左边和中间均无信号
035E 83B3 in R24,0x13
0360 8130 cpi R24,1
0362 29F4 brne L71
0364 .dbline 225
0364 ; {turn_right();turn_state1=1;} //右转
0364 .dbline 225
0364 E5DE xcall _turn_right
0366 .dbline 225
0366 81E0 ldi R24,1
0368 80930100 sts _turn_state1,R24
036C .dbline 225
036C 13C0 xjmp L72
036E L71:
036E .dbline 226
036E ; else if((turn_state0==1)&&(PINC==0))//若三个均无信号
036E 80910000 lds R24,_turn_state0
0372 8130 cpi R24,1
0374 29F4 brne L73
0376 23B2 in R2,0x13
0378 2220 tst R2
037A 11F4 brne L73
037C .dbline 227
037C ; turn_left(); //左转半圈
037C CFDE xcall _turn_left
037E 0AC0 xjmp L74
0380 L73:
0380 .dbline 228
0380 ; else if((turn_state1==1)&&(PINC==0))
0380 80910100 lds R24,_turn_state1
0384 8130 cpi R24,1
0386 29F4 brne L75
0388 23B2 in R2,0x13
038A 2220 tst R2
038C 11F4 brne L75
038E .dbline 229
038E ; turn_right();
038E D0DE xcall _turn_right
0390 01C0 xjmp L76
0392 L75:
0392 .dbline 231
0392 ; else
0392 ; run();
0392 A4DE xcall _run
0394 L76:
0394 L74:
0394 L72:
0394 L70:
0394 L68:
0394 L66:
0394 L63:
0394 .dbline -2
0394 L61:
0394 .dbline 0 ; func end
0394 0895 ret
0396 .dbsym l pinc 1 c
0396 .dbend
0396 .dbfunc e trace_light_init _trace_light_init fV
.even
0396 _trace_light_init::
0396 .dbline -1
0396 .dbline 239
0396 ; }
0396 ; ///////////////////寻找黑线////////////////////////////////////////
0396 ;
0396 ;
0396 ;
0396 ; ////////////////////探测光源函数///////////////////////////////////
0396 ; void trace_light_init(void)
0396 ; {
0396 .dbline 240
0396 ; DDRA&=0xf8; // PC0 1分别为探测光源的左 右端口,
0396 8AB3 in R24,0x1a
0398 887F andi R24,248
039A 8ABB out 0x1a,R24
039C .dbline 241
039C ; PORTA&=0xf8;
039C 8BB3 in R24,0x1b
039E 887F andi R24,248
03A0 8BBB out 0x1b,R24
03A2 .dbline 242
03A2 ; ADMUX=0x60; //初始化ADC0
03A2 80E6 ldi R24,96
03A4 87B9 out 0x7,R24
03A6 .dbline 243
03A6 ; ADCSRA=0x82; //初始化ADC0,64分频
03A6 82E8 ldi R24,130
03A8 86B9 out 0x6,R24
03AA .dbline -2
03AA L77:
03AA .dbline 0 ; func end
03AA 0895 ret
03AC .dbend
03AC .dbfunc e trace_light _trace_light fV
03AC ; adc -> R20
.even
03AC _trace_light::
03AC 0E940000 xcall push_gset2
03B0 .dbline -1
03B0 .dbline 246
03B0 ; }
03B0 ; void trace_light(void)
03B0 ; {
03B0 .dbline 248
03B0 ; unsigned char adc;
03B0 ; for(adc=0;adc<3;adc++)
03B0 4427 clr R20
03B2 42C0 xjmp L82
03B4 L79:
03B4 .dbline 249
03B4 ; {
03B4 .dbline 250
03B4 ; if(adc==0)
03B4 4423 tst R20
03B6 19F4 brne L83
03B8 .dbline 251
03B8 ; ADMUX=0x60;
03B8 80E6 ldi R24,96
03BA 87B9 out 0x7,R24
03BC 07C0 xjmp L84
03BE L83:
03BE .dbline 252
03BE ; else if(adc==1)
03BE 4130 cpi R20,1
03C0 19F4 brne L85
03C2 .dbline 253
03C2 ; ADMUX=0x61;
03C2 81E6 ldi R24,97
03C4 87B9 out 0x7,R24
03C6 02C0 xjmp L86
03C8 L85:
03C8 .dbline 255
03C8 ; else
03C8 ; ADMUX=0x62;
03C8 82E6 ldi R24,98
03CA 87B9 out 0x7,R24
03CC L86:
03CC L84:
03CC .dbline 256
03CC ; delay_us(10);
03CC 0AE0 ldi R16,10
03CE 10E0 ldi R17,0
03D0 17DE xcall _delay_us
03D2 .dbline 257
03D2 ; ADCSRA|=0x40;
03D2 369A sbi 0x6,6
03D4 .dbline 258
03D4 ; delay_ms(100);
03D4 04E6 ldi R16,100
03D6 10E0 ldi R17,0
03D8 1BDE xcall _delay_ms
03DA .dbline 259
03DA ; switch(adc)
03DA 642F mov R22,R20
03DC 7727 clr R23
03DE 6030 cpi R22,0
03E0 6707 cpc R22,R23
03E2 49F0 breq L90
03E4 X1:
03E4 6130 cpi R22,1
03E6 E0E0 ldi R30,0
03E8 7E07 cpc R23,R30
03EA 81F0 breq L91
03EC 6230 cpi R22,2
03EE E0E0 ldi R30,0
03F0 7E07 cpc R23,R30
03F2 B9F0 breq L92
03F4 20C0 xjmp L88
03F6 X2:
03F6 .dbline 260
03F6 ; {
03F6 L90:
03F6 .dbline 261
03F6 ; case 0: left=(ADC>>6);break;
03F6 26E0 ldi R18,6
03F8 30E0 ldi R19,0
03FA 04B1 in R16,0x4
03FC 15B1 in R17,0x5
03FE 0E940000 xcall lsr16
0402 10930700 sts _left+1,R17
0406 00930600 sts _left,R16
040A .dbline 261
040A 15C0 xjmp L88
040C L91:
040C .dbline 262
040C ; case 1: right=(ADC>>6);break;
040C 26E0 ldi R18,6
040E 30E0 ldi R19,0
0410 04B1 in R16,0x4
0412 15B1 in R17,0x5
0414 0E940000 xcall lsr16
0418 10930500 sts _right+1,R17
041C 00930400 sts _right,R16
0420 .dbline 262
0420 0AC0 xjmp L88
0422 L92:
0422 .dbline 263
0422 ; case 2: interval=(ADC>>6);break;
0422 26E0 ldi R18,6
0424 30E0 ldi R19,0
0426 04B1 in R16,0x4
0428 15B1 in R17,0x5
042A 0E940000 xcall lsr16
042E 10930100 sts _interval+1,R17
0432 00930000 sts _interval,R16
0436 .dbline 263
0436 .dbline 264
0436 ; default: break;
0436 L88:
0436 .dbline 266
0436 L80:
0436 .dbline 248
0436 4395 inc R20
0438 L82:
0438 .dbline 248
0438 4330 cpi R20,3
043A 08F4 brsh X4
043C BBCF xjmp L79
043E X4:
043E .dbline 267
043E ; }
043E ; }
043E ; zhong=right-left;
043E 20900600 lds R2,_left
0442 30900700 lds R3,_left+1
0446 40900400 lds R4,_right
044A 50900500 lds R5,_right+1
044E 4218 sub R4,R2
0450 5308 sbc R5,R3
0452 50920300 sts _zhong+1,R5
0456 40920200 sts _zhong,R4
045A .dbline 268
045A ; right=1024-right;
045A 20900400 lds R2,_right
045E 30900500 lds R3,_right+1
0462 80E0 ldi R24,1024
0464 94E0 ldi R25,4
0466 8219 sub R24,R2
0468 9309 sbc R25,R3
046A 90930500 sts _right+1,R25
046E 80930400 sts _right,R24
0472 .dbline 269
0472 ; if(interval<420)
0472 80910000 lds R24,_interval
0476 90910100 lds R25,_interval+1
047A 843A cpi R24,164
047C E1E0 ldi R30,1
047E 9E07 cpc R25,R30
0480 28F4 brsh L93
0482 .dbline 270
0482 ; {
0482 .dbline 271
0482 ; TIMSK&=0xbf;//停止计时
0482 89B7 in R24,0x39
0484 8F7B andi R24,191
0486 89BF out 0x39,R24
0488 .dbline 272
0488 ; for(;;)
0488 L95:
0488 .dbline 273
0488 ; stop();
0488 20DE xcall _stop
048A .dbline 272
048A .dbline 272
048A FECF xjmp L95
048C L93:
048C .dbline 275
048C ; }
048C ; else if((interval>419)&&(zhong<left)&&(zhong<right)&&((left<(right+10))|(right<(left+10))))
048C 83EA ldi R24,419
048E 91E0 ldi R25,1
0490 20900000 lds R2,_interval
0494 30900100 lds R3,_interval+1
0498 8215 cp R24,R2
049A 9305 cpc R25,R3
049C 08F0 brlo X5
049E 3AC0 xjmp L99
04A0 X5:
04A0 20900600 lds R2,_left
04A4 30900700 lds R3,_left+1
04A8 40900200 lds R4,_zhong
04AC 50900300 lds R5,_zhong+1
04B0 4214 cp R4,R2
04B2 5304 cpc R5,R3
04B4 78F5 brsh L99
04B6 20900400 lds R2,_right
04BA 30900500 lds R3,_right+1
04BE 4214 cp R4,R2
04C0 5304 cpc R5,R3
04C2 40F5 brsh L99
04C4 C101 movw R24,R2
04C6 0A96 adiw R24,10
04C8 20900600 lds R2,_left
04CC 30900700 lds R3,_left+1
04D0 2816 cp R2,R24
04D2 3906 cpc R3,R25
04D4 18F4 brsh L101
04D6 61E0 ldi R22,1
04D8 70E0 ldi R23,0
04DA 02C0 xjmp L102
04DC L101:
04DC 6627 clr R22
04DE 7727 clr R23
04E0 L102:
04E0 80910600 lds R24,_left
04E4 90910700 lds R25,_left+1
04E8 0A96 adiw R24,10
04EA 20900400 lds R2,_right
04EE 30900500 lds R3,_right+1
04F2 2816 cp R2,R24
04F4 3906 cpc R3,R25
04F6 18F4 brsh L103
04F8 41E0 ldi R20,1
04FA 50E0 ldi R21,0
04FC 02C0 xjmp L104
04FE L103:
04FE 4427 clr R20
0500 5527 clr R21
0502 L104:
0502 1B01 movw R2,R22
0504 242A or R2,R20
0506 352A or R3,R21
0508 2220 tst R2
050A 11F4 brne X3
050C 3320 tst R3
050E 11F0 breq L99
0510 X3:
0510 .dbline 276
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -