📄 双足机器人.lst
字号:
0387 90500076 LDS R5,left+1
0389 1442 CP R4,R2
038A 0453 CPC R5,R3
038B F448 BCC 0x0395
038C 90200073 LDS R2,right
038E 90300074 LDS R3,right+1
0390 1442 CP R4,R2
0391 0453 CPC R5,R3
0392 F410 BCC 0x0395
(0359) {turn_right();}
0393 DD57 RCALL _turn_right
0394 C018 RJMP 0x03AD
(0360) else if((interval>419)&&(right<left)&&(right<left))
0395 EA83 LDI R24,0xA3
0396 E091 LDI R25,1
0397 9020006F LDS R2,interval
0399 90300070 LDS R3,interval+1
039B 1582 CP R24,R2
039C 0593 CPC R25,R3
039D F478 BCC 0x03AD
039E 90200075 LDS R2,left
03A0 90300076 LDS R3,left+1
03A2 90400073 LDS R4,right
03A4 90500074 LDS R5,right+1
03A6 1442 CP R4,R2
03A7 0453 CPC R5,R3
03A8 F420 BCC 0x03AD
03A9 1442 CP R4,R2
03AA 0453 CPC R5,R3
03AB F408 BCC 0x03AD
(0361) {turn_left();}
03AC DD34 RCALL _turn_left
(0362) delay_ms(100);
03AD E604 LDI R16,0x64
03AE E010 LDI R17,0
03AF DCAB RCALL _delay_ms
03B0 940E0465 CALL pop_gset2
03B2 9508 RET
(0363) }
(0364) ////////////////////探测光源函数///////////////////////////////////
(0365)
(0366)
(0367) ///////////////计时中断函数/////////////////////////////////////////
(0368) void time_inite(void)
(0369) {
(0370) TCCR2|= 0x07;//分频比1024
_time_inite:
03B3 B585 IN R24,0x25
03B4 6087 ORI R24,7
03B5 BD85 OUT 0x25,R24
(0371) mini=0;
03B6 2422 CLR R2
03B7 92200078 STS mini,R2
(0372) second=0;
03B9 92200079 STS second,R2
(0373) minisecond=0;
03BB 92200077 STS minisecond,R2
03BD 9508 RET
_time2_isr:
03BE 940E048A CALL push_lset
03C0 9723 SBIW R28,3
(0374) }
(0375)
(0376) #pragma interrupt_handler time2_isr:5
(0377) void time2_isr(void)
(0378) {
(0379) TCNT2=0xb2;
03C1 EB82 LDI R24,0xB2
03C2 BD84 OUT 0x24,R24
(0380) minisecond++;
03C3 91800077 LDS R24,minisecond
03C5 5F8F SUBI R24,0xFF
03C6 93800077 STS minisecond,R24
(0381) if (minisecond<100)//计算总时间
03C8 3684 CPI R24,0x64
03C9 F408 BCC 0x03CB
(0382) ;
03CA C017 RJMP 0x03E2
(0383) else
(0384) {
(0385) minisecond=0;
03CB 2422 CLR R2
03CC 92200077 STS minisecond,R2
(0386) if (second<60)
03CE 91800079 LDS R24,second
03D0 338C CPI R24,0x3C
03D1 F420 BCC 0x03D6
(0387) second++;
03D2 5F8F SUBI R24,0xFF
03D3 93800079 STS second,R24
03D5 C00C RJMP 0x03E2
(0388) else
(0389) {
(0390) second=0;
03D6 2422 CLR R2
03D7 92200079 STS second,R2
(0391) minute++;
03D9 91800062 LDS R24,minute
03DB 5F8F SUBI R24,0xFF
03DC 93800062 STS minute,R24
(0392) if(minute==100)
03DE 3684 CPI R24,0x64
03DF F411 BNE 0x03E2
(0393) minute=0;
03E0 92200062 STS minute,R2
(0394) }
(0395) }
(0396) display_time(10,minute,second,0);
03E2 2422 CLR R2
03E3 822A STD Y+2,R2
03E4 90200079 LDS R2,second
03E6 8228 STD Y+0,R2
03E7 91200062 LDS R18,minute
03E9 E00A LDI R16,0xA
03EA DD5A RCALL _display_time
03EB 9623 ADIW R28,3
03EC 940E04A1 CALL pop_lset
03EE 9518 RETI
(0397)
(0398) }
(0399) ///////////////计时中断函数/////////////////////////////////////////
(0400)
(0401)
(0402) //////////////主函数///////////////////////////////////////////////
(0403) void main(void)
(0404) {
(0405) unsigned int i;
(0406) MCUCSR|=0x80;//禁止PC5第二功能,使之为普通I/O口
_main:
i --> Y+1
03EF B784 IN R24,0x34
03F0 6880 ORI R24,0x80
03F1 BF84 OUT 0x34,R24
(0407) MCUCSR|=0x80;
03F2 B784 IN R24,0x34
03F3 6880 ORI R24,0x80
03F4 BF84 OUT 0x34,R24
(0408) DDRD|=0xc0;//PD 6 7控制左右电机
03F5 B381 IN R24,0x11
03F6 6C80 ORI R24,0xC0
03F7 BB81 OUT 0x11,R24
(0409) DDRC&=0xf8;//PC0 1 2为右中左红外传感器输入
03F8 B384 IN R24,0x14
03F9 7F88 ANDI R24,0xF8
03FA BB84 OUT 0x14,R24
(0410) DDRC|=0x18;//PC3,4控制显示,PC3传送数据,PC4为时钟信号线
03FB B384 IN R24,0x14
03FC 6188 ORI R24,0x18
03FD BB84 OUT 0x14,R24
(0411) PORTC&=0xe7;
03FE B385 IN R24,0x15
03FF 7E87 ANDI R24,0xE7
0400 BB85 OUT 0x15,R24
(0412) PORTC&=0xf8;
0401 B385 IN R24,0x15
0402 7F88 ANDI R24,0xF8
0403 BB85 OUT 0x15,R24
(0413) PORTD&=0x3f;
0404 B382 IN R24,0x12
0405 738F ANDI R24,0x3F
0406 BB82 OUT 0x12,R24
(0414) time_inite();
0407 DFAB RCALL _time_inite
(0415)
(0416) SEI();
0408 9478 BSET 7
(0417) TIMSK|=0x40;//开始计时
0409 B789 IN R24,0x39
040A 6480 ORI R24,0x40
040B BF89 OUT 0x39,R24
(0418) //while(1)stop();
(0419)
(0420) //while(1) LeftUp(2);//抬左脚
(0421)
(0422) delay_ms(100);
040C E604 LDI R16,0x64
040D E010 LDI R17,0
040E DC4C RCALL _delay_ms
(0423) LeftFwd(10);//迈左脚步
040F E00A LDI R16,0xA
0410 DCF8 RCALL _LeftFwd
(0424) delay_ms(100);
0411 E604 LDI R16,0x64
0412 E010 LDI R17,0
0413 DC47 RCALL _delay_ms
0414 C014 RJMP 0x0429
(0425)
(0426) while(1)
(0427) {
(0428)
(0429) RightUp(5);//抬右脚
0415 E005 LDI R16,5
0416 DD06 RCALL _RightUp
(0430) delay_ms(100);
0417 E604 LDI R16,0x64
0418 E010 LDI R17,0
0419 DC41 RCALL _delay_ms
(0431) RightFwd(20);//迈右脚
041A E104 LDI R16,0x14
041B DD15 RCALL _RightFwd
(0432) delay_ms(100);
041C E604 LDI R16,0x64
041D E010 LDI R17,0
041E DC3C RCALL _delay_ms
(0433)
(0434) LeftUp(7);//抬左脚
041F E007 LDI R16,7
0420 DCD4 RCALL _LeftUp
(0435) delay_ms(100);
0421 E604 LDI R16,0x64
0422 E010 LDI R17,0
0423 DC37 RCALL _delay_ms
(0436) LeftFwd(20);//迈左脚步
0424 E104 LDI R16,0x14
0425 DCE3 RCALL _LeftFwd
(0437) delay_ms(100);
FILE: <library>
0426 E604 LDI R16,0x64
0427 E010 LDI R17,0
0428 DC32 RCALL _delay_ms
0429 CFEB RJMP 0x0415
042A 9508 RET
mod16s:
042B 9468 BSET 6
042C 92DA ST R13,-Y
042D 2ED1 MOV R13,R17
042E C004 RJMP 0x0433
div16s:
042F 94E8 BCLR 6
0430 92DA ST R13,-Y
0431 2ED1 MOV R13,R17
0432 26D3 EOR R13,R19
0433 FF17 SBRS R17,7
0434 C004 RJMP 0x0439
0435 9510 COM R17
0436 9500 COM R16
0437 5F0F SUBI R16,0xFF
0438 4F1F SBCI R17,0xFF
0439 FF37 SBRS R19,7
043A C004 RJMP 0x043F
043B 9530 COM R19
043C 9520 COM R18
043D 5F2F SUBI R18,0xFF
043E 4F3F SBCI R19,0xFF
043F 940E044C CALL xdiv16u
0441 FED7 SBRS R13,7
0442 C004 RJMP 0x0447
0443 9510 COM R17
0444 9500 COM R16
0445 5F0F SUBI R16,0xFF
0446 4F1F SBCI R17,0xFF
0447 90D9 LD R13,Y+
0448 9508 RET
mod16u:
0449 9468 BSET 6
044A C001 RJMP xdiv16u
div16u:
044B 94E8 BCLR 6
xdiv16u:
044C 92EA ST R14,-Y
044D 92FA ST R15,-Y
044E 938A ST R24,-Y
044F 24EE CLR R14
0450 24FF CLR R15
0451 E180 LDI R24,0x10
0452 0F00 LSL R16
0453 1F11 ROL R17
0454 1CEE ROL R14
0455 1CFF ROL R15
0456 16E2 CP R14,R18
0457 06F3 CPC R15,R19
0458 F018 BCS 0x045C
0459 1AE2 SUB R14,R18
045A 0AF3 SBC R15,R19
045B 9503 INC R16
045C 958A DEC R24
045D F7A1 BNE 0x0452
045E F416 BRTC 0x0461
045F 2D0E MOV R16,R14
0460 2D1F MOV R17,R15
0461 9189 LD R24,Y+
0462 90F9 LD R15,Y+
0463 90E9 LD R14,Y+
0464 9508 RET
pop_gset2:
0465 E0E2 LDI R30,2
0466 940C0477 JMP pop
pop_gset5:
0468 27EE CLR R30
0469 940C0477 JMP pop
push_gset5:
046B 92FA ST R15,-Y
046C 92EA ST R14,-Y
push_gset4:
046D 92DA ST R13,-Y
046E 92CA ST R12,-Y
push_gset3:
046F 92BA ST R11,-Y
0470 92AA ST R10,-Y
push_gset2:
0471 937A ST R23,-Y
0472 936A ST R22,-Y
push_gset1:
0473 935A ST R21,-Y
0474 934A ST R20,-Y
0475 9508 RET
pop_gset1:
0476 E0E1 LDI R30,1
pop:
0477 9149 LD R20,Y+
0478 9159 LD R21,Y+
0479 FDE0 SBRC R30,0
047A 9508 RET
047B 9169 LD R22,Y+
047C 9179 LD R23,Y+
047D FDE1 SBRC R30,1
047E 9508 RET
047F 90A9 LD R10,Y+
0480 90B9 LD R11,Y+
0481 FDE2 SBRC R30,2
0482 9508 RET
0483 90C9 LD R12,Y+
0484 90D9 LD R13,Y+
0485 FDE3 SBRC R30,3
0486 9508 RET
0487 90E9 LD R14,Y+
0488 90F9 LD R15,Y+
0489 9508 RET
push_lset:
048A 93FA ST R31,-Y
048B 93EA ST R30,-Y
048C 93BA ST R27,-Y
048D 93AA ST R26,-Y
048E 939A ST R25,-Y
048F 938A ST R24,-Y
0490 933A ST R19,-Y
0491 932A ST R18,-Y
0492 931A ST R17,-Y
0493 930A ST R16,-Y
0494 929A ST R9,-Y
0495 928A ST R8,-Y
0496 927A ST R7,-Y
0497 926A ST R6,-Y
0498 925A ST R5,-Y
0499 924A ST R4,-Y
049A 923A ST R3,-Y
049B 922A ST R2,-Y
049C 921A ST R1,-Y
049D 920A ST R0,-Y
049E B60F IN R0,0x3F
049F 920A ST R0,-Y
04A0 9508 RET
pop_lset:
04A1 9009 LD R0,Y+
04A2 BE0F OUT 0x3F,R0
04A3 9009 LD R0,Y+
04A4 9019 LD R1,Y+
04A5 9029 LD R2,Y+
04A6 9039 LD R3,Y+
04A7 9049 LD R4,Y+
04A8 9059 LD R5,Y+
04A9 9069 LD R6,Y+
04AA 9079 LD R7,Y+
04AB 9089 LD R8,Y+
04AC 9099 LD R9,Y+
04AD 9109 LD R16,Y+
04AE 9119 LD R17,Y+
04AF 9129 LD R18,Y+
04B0 9139 LD R19,Y+
04B1 9189 LD R24,Y+
04B2 9199 LD R25,Y+
04B3 91A9 LD R26,Y+
04B4 91B9 LD R27,Y+
04B5 91E9 LD R30,Y+
04B6 91F9 LD R31,Y+
04B7 9508 RET
lsr16:
04B8 2322 TST R18
04B9 F021 BEQ 0x04BE
04BA 9516 LSR R17
04BB 9507 ROR R16
04BC 952A DEC R18
04BD CFFA RJMP lsr16
04BE 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -