📄 双足机器人.lis
字号:
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 + -