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

📄 双足机器人.lis

📁 这段源代码是基于atmel公司mega16单片机做的双足机器人控制程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 02F6 30E0              ldi R19,0
 02F8 0A2D              mov R16,R10
 02FA 1127              clr R17
 02FC 0E940000          xcall div16s
 0300 F801              movw R30,R16
 0302 80E0              ldi R24,<_number
 0304 90E0              ldi R25,>_number
 0306 E80F              add R30,R24
 0308 F91F              adc R31,R25
 030A 6081              ldd R22,z+0
 030C                   .dbline 266
 030C           ;   for(j=0;j<8;j++)
 030C 4427              clr R20
 030E 1DC0              xjmp L72
 0310           L69:
 0310                   .dbline 267
 0310                   .dbline 268
 0310 AC9A              sbi 0x15,4
 0312                   .dbline 268
 0312 05E0              ldi R16,5
 0314 10E0              ldi R17,0
 0316 74DE              xcall _delay_us
 0318                   .dbline 269
 0318 85B3              in R24,0x15
 031A 877F              andi R24,247
 031C 85BB              out 0x15,R24
 031E                   .dbline 269
 031E 05E0              ldi R16,5
 0320 10E0              ldi R17,0
 0322 6EDE              xcall _delay_us
 0324                   .dbline 270
 0324 862F              mov R24,R22
 0326 8170              andi R24,1
 0328 880F              lsl R24
 032A 880F              lsl R24
 032C 880F              lsl R24
 032E 25B2              in R2,0x15
 0330 282A              or R2,R24
 0332 25BA              out 0x15,R2
 0334                   .dbline 270
 0334 05E0              ldi R16,5
 0336 10E0              ldi R17,0
 0338 63DE              xcall _delay_us
 033A                   .dbline 271
 033A 85B3              in R24,0x15
 033C 8F7E              andi R24,239
 033E 85BB              out 0x15,R24
 0340                   .dbline 271
 0340 05E0              ldi R16,5
 0342 10E0              ldi R17,0
 0344 5DDE              xcall _delay_us
 0346                   .dbline 272
 0346 6695              lsr R22
 0348                   .dbline 273
 0348           L70:
 0348                   .dbline 266
 0348 4395              inc R20
 034A           L72:
 034A                   .dbline 266
 034A 4830              cpi R20,8
 034C 08F3              brlo L69
 034E                   .dbline 274
 034E           ;   {
 034E           ;    PORTC|=0x10;delay_us(5);
 034E           ;    PORTC&=0xf7;delay_us(5);
 034E           ;    PORTC|=((display&0x01)<<3);delay_us(5);
 034E           ;    PORTC&=0xef;delay_us(5);
 034E           ;    display>>=1;
 034E           ;   }
 034E           ;   display=number[second%10];
 034E 2AE0              ldi R18,10
 0350 30E0              ldi R19,0
 0352 0A2D              mov R16,R10
 0354 1127              clr R17
 0356 0E940000          xcall mod16s
 035A F801              movw R30,R16
 035C 80E0              ldi R24,<_number
 035E 90E0              ldi R25,>_number
 0360 E80F              add R30,R24
 0362 F91F              adc R31,R25
 0364 6081              ldd R22,z+0
 0366                   .dbline 275
 0366           ;   for(j=0;j<8;j++)
 0366 4427              clr R20
 0368 1DC0              xjmp L76
 036A           L73:
 036A                   .dbline 276
 036A                   .dbline 277
 036A AC9A              sbi 0x15,4
 036C                   .dbline 277
 036C 05E0              ldi R16,5
 036E 10E0              ldi R17,0
 0370 47DE              xcall _delay_us
 0372                   .dbline 278
 0372 85B3              in R24,0x15
 0374 877F              andi R24,247
 0376 85BB              out 0x15,R24
 0378                   .dbline 278
 0378 05E0              ldi R16,5
 037A 10E0              ldi R17,0
 037C 41DE              xcall _delay_us
 037E                   .dbline 279
 037E 862F              mov R24,R22
 0380 8170              andi R24,1
 0382 880F              lsl R24
 0384 880F              lsl R24
 0386 880F              lsl R24
 0388 25B2              in R2,0x15
 038A 282A              or R2,R24
 038C 25BA              out 0x15,R2
 038E                   .dbline 279
 038E 05E0              ldi R16,5
 0390 10E0              ldi R17,0
 0392 36DE              xcall _delay_us
 0394                   .dbline 280
 0394 85B3              in R24,0x15
 0396 8F7E              andi R24,239
 0398 85BB              out 0x15,R24
 039A                   .dbline 280
 039A 05E0              ldi R16,5
 039C 10E0              ldi R17,0
 039E 30DE              xcall _delay_us
 03A0                   .dbline 281
 03A0 6695              lsr R22
 03A2                   .dbline 282
 03A2           L74:
 03A2                   .dbline 275
 03A2 4395              inc R20
 03A4           L76:
 03A4                   .dbline 275
 03A4 4830              cpi R20,8
 03A6 08F3              brlo L73
 03A8                   .dbline -2
 03A8           L54:
 03A8 0E940000          xcall pop_gset5
 03AC                   .dbline 0 ; func end
 03AC 0895              ret
 03AE                   .dbsym r j 20 c
 03AE                   .dbsym r display 22 c
 03AE                   .dbsym r point 12 c
 03AE                   .dbsym r second 10 c
 03AE                   .dbsym r minute 14 c
 03AE                   .dbsym r n1 20 c
 03AE                   .dbend
 03AE                   .dbfunc e trace_road _trace_road fV
 03AE           ;           pinc -> <dead>
                        .even
 03AE           _trace_road::
 03AE                   .dbline -1
 03AE                   .dbline 290
 03AE           ;   {
 03AE           ;    PORTC|=0x10;delay_us(5);
 03AE           ;    PORTC&=0xf7;delay_us(5);
 03AE           ;    PORTC|=((display&0x01)<<3);delay_us(5);
 03AE           ;    PORTC&=0xef;delay_us(5);
 03AE           ;    display>>=1;
 03AE           ;   }
 03AE           ; } 
 03AE           ; /////////////液晶屏显示函数/////////////////////////////////////
 03AE           ; 
 03AE           ; 
 03AE           ; 
 03AE           ; /////////////////寻找黑线////////////////////////////////////////
 03AE           ; void trace_road(void) //黑线寻迹函数
 03AE           ; {
 03AE                   .dbline 292
 03AE           ;    unsigned char pinc;
 03AE           ;     PINC=PINC&0x07;  //PC0~PC2信号送给变量pinc
 03AE 83B3              in R24,0x13
 03B0 8770              andi R24,7
 03B2 83BB              out 0x13,R24
 03B4                   .dbline 293
 03B4           ;   if((PINC==0x02)||(PINC==0x07))//只有中间传感器有信号,
 03B4 83B3              in R24,0x13
 03B6 8230              cpi R24,2
 03B8 19F0              breq L80
 03BA 83B3              in R24,0x13
 03BC 8730              cpi R24,7
 03BE 39F4              brne L78
 03C0           L80:
 03C0                   .dbline 294
 03C0           ;       { run();turn_state0=0;  turn_state1=0;}//或三个均有信号,则直走
 03C0                   .dbline 294
 03C0 8DDE              xcall _run
 03C2                   .dbline 294
 03C2 2224              clr R2
 03C4 20920000          sts _turn_state0,R2
 03C8                   .dbline 294
 03C8 20920100          sts _turn_state1,R2
 03CC                   .dbline 294
 03CC 33C0              xjmp L79
 03CE           L78:
 03CE                   .dbline 295
 03CE           ;       else if(PINC==0x06)//若右边无信号
 03CE 83B3              in R24,0x13
 03D0 8630              cpi R24,6
 03D2 29F4              brne L81
 03D4                   .dbline 296
 03D4           ;         {turn_left();turn_state0=1;}     //左转
 03D4                   .dbline 296
 03D4 A3DE              xcall _turn_left
 03D6                   .dbline 296
 03D6 81E0              ldi R24,1
 03D8 80930000          sts _turn_state0,R24
 03DC                   .dbline 296
 03DC 2BC0              xjmp L82
 03DE           L81:
 03DE                   .dbline 297
 03DE           ;         else if(PINC==0x03)//若左边无信号
 03DE 83B3              in R24,0x13
 03E0 8330              cpi R24,3
 03E2 29F4              brne L83
 03E4                   .dbline 298
 03E4           ;           {turn_right(); turn_state1=1;}   //右转
 03E4                   .dbline 298
 03E4 A5DE              xcall _turn_right
 03E6                   .dbline 298
 03E6 81E0              ldi R24,1
 03E8 80930100          sts _turn_state1,R24
 03EC                   .dbline 298
 03EC 23C0              xjmp L84
 03EE           L83:
 03EE                   .dbline 299
 03EE           ;               else if(PINC==0x04)//若右边和中间均无信号
 03EE 83B3              in R24,0x13
 03F0 8430              cpi R24,4
 03F2 29F4              brne L85
 03F4                   .dbline 300
 03F4           ;                { turn_left();turn_state0=1;}   //左转
 03F4                   .dbline 300
 03F4 93DE              xcall _turn_left
 03F6                   .dbline 300
 03F6 81E0              ldi R24,1
 03F8 80930000          sts _turn_state0,R24
 03FC                   .dbline 300
 03FC 1BC0              xjmp L86
 03FE           L85:
 03FE                   .dbline 301
 03FE           ;                 else if(PINC==0x01)//若左边和中间均无信号
 03FE 83B3              in R24,0x13
 0400 8130              cpi R24,1
 0402 29F4              brne L87
 0404                   .dbline 302
 0404           ;                   {turn_right();turn_state1=1;}   //右转
 0404                   .dbline 302
 0404 95DE              xcall _turn_right
 0406                   .dbline 302
 0406 81E0              ldi R24,1
 0408 80930100          sts _turn_state1,R24
 040C                   .dbline 302
 040C 13C0              xjmp L88
 040E           L87:
 040E                   .dbline 303
 040E           ;                       else if((turn_state0==1)&&(PINC==0))//若三个均无信号
 040E 80910000          lds R24,_turn_state0
 0412 8130              cpi R24,1
 0414 29F4              brne L89
 0416 23B2              in R2,0x13
 0418 2220              tst R2
 041A 11F4              brne L89
 041C                   .dbline 304
 041C           ;                          turn_left();  //左转半圈
 041C 7FDE              xcall _turn_left
 041E 0AC0              xjmp L90
 0420           L89:
 0420                   .dbline 305
 0420           ;               else if((turn_state1==1)&&(PINC==0))
 0420 80910100          lds R24,_turn_state1
 0424 8130              cpi R24,1
 0426 29F4              brne L91
 0428 23B2              in R2,0x13
 042A 2220              tst R2
 042C 11F4              brne L91
 042E                   .dbline 306
 042E           ;                           turn_right();
 042E 80DE              xcall _turn_right
 0430 01C0              xjmp L92
 0432           L91:
 0432                   .dbline 308
 0432           ;                               else
 0432           ;                                 run();
 0432 54DE              xcall _run
 0434           L92:
 0434           L90:
 0434           L88:
 0434           L86:
 0434           L84:
 0434           L82:
 0434           L79:
 0434                   .dbline -2
 0434           L77:
 0434                   .dbline 0 ; func end
 0434 0895              ret
 0436                   .dbsym l pinc 1 c
 0436                   .dbend
 0436                   .dbfunc e trace_light_init _trace_light_init fV
                        .even
 0436           _trace_light_init::
 0436                   .dbline -1
 0436                   .dbline 316
 0436           ;   }
 0436           ; ///////////////////寻找黑线////////////////////////////////////////
 0436           ; 
 0436           ; 
 0436           ; 
 0436           ; ////////////////////探测光源函数///////////////////////////////////
 0436           ; void trace_light_init(void)
 0436           ;  {
 0436                   .dbline 317
 0436           ;    DDRA&=0xf8;       // PC0 1分别为探测光源的左 右端口,
 0436 8AB3              in R24,0x1a
 0438 887F              andi R24,248
 043A 8ABB              out 0x1a,R24
 043C                   .dbline 318
 043C           ;    PORTA&=0xf8;
 043C 8BB3              in R24,0x1b
 043E 887F              andi R24,248
 0440 8BBB              out 0x1b,R24
 0442                   .dbline 319
 0442           ;   ADMUX=0x60;         //初始化ADC0 
 0442 80E6              ldi R24,96
 0444 87B9              out 0x7,R24
 0446                   .dbline 320
 0446           ;   ADCSRA=0x82;         //初始化ADC0,64分频
 0446 82E8              ldi R24,130
 0448 86B9              out 0x6,R24
 044A                   .dbline -2
 044A           L93:
 044A                   .dbline 0 ; func end
 044A 0895              ret
 044C                   .dbend
 044C                   .dbfunc e trace_light _trace_light fV
 044C           ;            adc -> R20
                        .even
 044C           _trace_light::
 044C 0E940000          xcall push_gset2
 0450                   .dbline -1
 0450                   .dbline 323
 0450           ;  }
 0450           ; void trace_light(void)
 0450           ; {
 0450                   .dbline 325
 0450           ;    unsigned char adc;
 0450           ;     for(adc=0;adc<3;adc++)
 0450 4427              clr R20
 0452 42C0              xjmp L98
 0454           L95:
 0454                   .dbline 326
 0454           ;       {
 0454                   .dbline 327
 0454           ;          if(adc==0)
 0454 4423              tst R20
 0456 19F4              brne L99

⌨️ 快捷键说明

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