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

📄 宝贝机器人.lis

📁 基于atmel公司的mega16单片机做的机器人控制程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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 + -