📄 boat.lst
字号:
02E6 9580 COM R24
02E7 9590 COM R25
02E8 5F8F SUBI R24,0xFF
02E9 4F9F SBCI R25,0xFF
02EA BD99 OUT 0x29,R25
02EB BD88 OUT 0x28,R24
(0285) } else {
02EC C005 RJMP 0x02F2
(0286) OCR1B = (uint)(pt_r->real_speed);
02ED 01F9 MOVW R30,R18
02EE 8022 LDD R2,Z+2
02EF 8033 LDD R3,Z+3
02F0 BC39 OUT 0x29,R3
02F1 BC28 OUT 0x28,R2
(0287) }
(0288) pt_r->counter = 0; //计数器清零
02F2 2422 CLR R2
02F3 2433 CLR R3
02F4 01F9 MOVW R30,R18
02F5 8631 STD Z+9,R3
02F6 8620 STD Z+8,R2
(0289) }
(0290) } else if( pt_r->real_speed > pt_r->des_speed ){
02F7 C040 RJMP 0x0338
02F8 01F9 MOVW R30,R18
02F9 8020 LDD R2,Z+0
02FA 8031 LDD R3,Z+1
02FB 8042 LDD R4,Z+2
02FC 8053 LDD R5,Z+3
02FD 1424 CP R2,R4
02FE 0435 CPC R3,R5
02FF F00C BLT 0x0301
0300 C037 RJMP 0x0338
(0291) if ( ++ pt_r->counter == pt_r->dece_count ){
0301 01C9 MOVW R24,R18
0302 9608 ADIW R24,0x8
0303 01FC MOVW R30,R24
0304 8180 LDD R24,Z+0
0305 8191 LDD R25,Z+1
0306 9601 ADIW R24,1
0307 012C MOVW R4,R24
0308 8251 STD Z+1,R5
0309 8240 STD Z+0,R4
030A 01F9 MOVW R30,R18
030B 8026 LDD R2,Z+6
030C 8037 LDD R3,Z+7
030D 1582 CP R24,R2
030E 0593 CPC R25,R3
030F F009 BEQ 0x0311
0310 C027 RJMP 0x0338
(0292) pt_r->real_speed -= pt_r->step;
0311 01C9 MOVW R24,R18
0312 9602 ADIW R24,2
0313 01F9 MOVW R30,R18
0314 8442 LDD R4,Z+10
0315 8453 LDD R5,Z+11
0316 01FC MOVW R30,R24
0317 8060 LDD R6,Z+0
0318 8071 LDD R7,Z+1
0319 1864 SUB R6,R4
031A 0875 SBC R7,R5
031B 8271 STD Z+1,R7
031C 8260 STD Z+0,R6
(0293) if ( pt_r->real_speed < 0 ){ //取绝对值
031D 01F9 MOVW R30,R18
031E 8182 LDD R24,Z+2
031F 8193 LDD R25,Z+3
0320 3080 CPI R24,0
0321 E0E0 LDI R30,0
0322 079E CPC R25,R30
0323 F454 BGE 0x032E
(0294) OCR1B = (uint)(-pt_r->real_speed);
0324 01F9 MOVW R30,R18
0325 8182 LDD R24,Z+2
0326 8193 LDD R25,Z+3
0327 9580 COM R24
0328 9590 COM R25
0329 5F8F SUBI R24,0xFF
032A 4F9F SBCI R25,0xFF
032B BD99 OUT 0x29,R25
032C BD88 OUT 0x28,R24
(0295) } else {
032D C005 RJMP 0x0333
(0296) OCR1B = (uint)(pt_r->real_speed);
032E 01F9 MOVW R30,R18
032F 8022 LDD R2,Z+2
0330 8033 LDD R3,Z+3
0331 BC39 OUT 0x29,R3
0332 BC28 OUT 0x28,R2
(0297) }
(0298) pt_r->counter = 0;
0333 2422 CLR R2
0334 2433 CLR R3
0335 01F9 MOVW R30,R18
0336 8631 STD Z+9,R3
0337 8620 STD Z+8,R2
(0299) }
(0300) }
(0301) }
0338 9508 RET
(0302)
(0303) //电机速度控制接口函数
(0304) void trap_ctrler( int l_des_speed, int r_des_speed )
(0305) {
(0306) l_trap.acce_count = L_ACCE_COUNT; //设定左电机
_trap_ctrler:
r_des_speed --> R18
l_des_speed --> R16
0339 E082 LDI R24,2
033A E090 LDI R25,0
033B 939000A2 STS 0xA2,R25
033D 938000A1 STS 0xA1,R24
(0307) l_trap.dece_count = L_DECE_COUNT;
033F 939000A4 STS 0xA4,R25
0341 938000A3 STS 0xA3,R24
(0308) l_trap.step = L_STEP;
0343 E081 LDI R24,1
0344 939000A8 STS 0xA8,R25
0346 938000A7 STS 0xA7,R24
(0309) if ( l_des_speed > ( MAX_SPEED - l_trap.step ) ){ //给定值限幅处理
0348 011C MOVW R2,R24
0349 EF8E LDI R24,0xFE
034A E091 LDI R25,1
034B 1982 SUB R24,R2
034C 0993 SBC R25,R3
034D 1780 CP R24,R16
034E 0791 CPC R25,R17
034F F44C BGE 0x0359
(0310) l_trap.des_speed = MAX_SPEED - l_trap.step;
0350 EF8E LDI R24,0xFE
0351 E091 LDI R25,1
0352 1982 SUB R24,R2
0353 0993 SBC R25,R3
0354 9390009E STS _l_trap+1,R25
0356 9380009D STS _l_trap,R24
(0311) } else if ( l_des_speed < ( MIN_SPEED + l_trap.step ) ){
0358 C018 RJMP 0x0371
0359 918000A7 LDS R24,0xA7
035B 919000A8 LDS R25,0xA8
035D 5F8E SUBI R24,0xFE
035E 4091 SBCI R25,1
035F 1708 CP R16,R24
0360 0719 CPC R17,R25
0361 F45C BGE 0x036D
(0312) l_trap.des_speed = MIN_SPEED + l_trap.step;
0362 918000A7 LDS R24,0xA7
0364 919000A8 LDS R25,0xA8
0366 5F8E SUBI R24,0xFE
0367 4091 SBCI R25,1
0368 9390009E STS _l_trap+1,R25
036A 9380009D STS _l_trap,R24
(0313) } else {
036C C004 RJMP 0x0371
(0314) l_trap.des_speed = l_des_speed;
036D 9310009E STS _l_trap+1,R17
036F 9300009D STS _l_trap,R16
(0315) }
(0316) r_trap.acce_count = R_ACCE_COUNT; //设定右电机
0371 E082 LDI R24,2
0372 E090 LDI R25,0
0373 93900096 STS 0x96,R25
0375 93800095 STS 0x95,R24
(0317) r_trap.dece_count = R_DECE_COUNT;
0377 93900098 STS 0x98,R25
0379 93800097 STS 0x97,R24
(0318) r_trap.step = R_STEP;
037B E081 LDI R24,1
037C 9390009C STS 0x9C,R25
037E 9380009B STS 0x9B,R24
(0319) if ( r_des_speed > ( MAX_SPEED - r_trap.step ) ){ //给定值限幅处理
0380 011C MOVW R2,R24
0381 EF8E LDI R24,0xFE
0382 E091 LDI R25,1
0383 1982 SUB R24,R2
0384 0993 SBC R25,R3
0385 1782 CP R24,R18
0386 0793 CPC R25,R19
0387 F44C BGE 0x0391
(0320) r_trap.des_speed = MAX_SPEED - r_trap.step;
0388 EF8E LDI R24,0xFE
0389 E091 LDI R25,1
038A 1982 SUB R24,R2
038B 0993 SBC R25,R3
038C 93900092 STS _r_trap+1,R25
038E 93800091 STS _r_trap,R24
(0321) } else if ( r_des_speed < ( MIN_SPEED + r_trap.step ) ){
0390 C018 RJMP 0x03A9
0391 9180009B LDS R24,0x9B
0393 9190009C LDS R25,0x9C
0395 5F8E SUBI R24,0xFE
0396 4091 SBCI R25,1
0397 1728 CP R18,R24
0398 0739 CPC R19,R25
0399 F45C BGE 0x03A5
(0322) r_trap.des_speed = MIN_SPEED + r_trap.step;
039A 9180009B LDS R24,0x9B
039C 9190009C LDS R25,0x9C
039E 5F8E SUBI R24,0xFE
039F 4091 SBCI R25,1
03A0 93900092 STS _r_trap+1,R25
03A2 93800091 STS _r_trap,R24
(0323) } else {
03A4 C004 RJMP 0x03A9
(0324) r_trap.des_speed = r_des_speed;
03A5 93300092 STS _r_trap+1,R19
03A7 93200091 STS _r_trap,R18
(0325) }
(0326) }
03A9 9508 RET
_key_process:
key_buf --> R20
03AA 940E0462 CALL push_gset1
03AC 01A8 MOVW R20,R16
(0327)
(0328) /**************************** 键盘信号处理模块 ********************************/
(0329) void key_process( uint key_buf )
(0330) {
(0331) if ( key_buf & BIT( L_STOP_KEY ) ){
03AD FF54 SBRS R21,4
03AE C01B RJMP 0x03CA
(0332) l_temp_speed = l_trap.des_speed;
03AF 9020009D LDS R2,_l_trap
03B1 9030009E LDS R3,_l_trap+1
03B3 92300090 STS _l_temp_speed+1,R3
03B5 9220008F STS _l_temp_speed,R2
(0333) l_trap.des_speed = 0;
03B7 2422 CLR R2
03B8 2433 CLR R3
03B9 9230009E STS _l_trap+1,R3
03BB 9220009D STS _l_trap,R2
(0334) trap_ctrler( 0, r_trap.des_speed );
03BD 91200091 LDS R18,_r_trap
03BF 91300092 LDS R19,_r_trap+1
03C1 2700 CLR R16
03C2 2711 CLR R17
03C3 DF75 RCALL _trap_ctrler
(0335) key_prev_status |= BIT( L_STOP_KEY_PRESS );
03C4 91800060 LDS R24,_key_prev_status
03C6 6180 ORI R24,0x10
03C7 93800060 STS _key_prev_status,R24
(0336) } else if ( ( key_buf & BIT( L_RESUME_KEY ) ) && ( key_prev_status & BIT( L_STOP_KEY_PRESS ) ) ){
03C9 C038 RJMP 0x0402
03CA FF50 SBRS R21,0
03CB C01B RJMP 0x03E7
03CC 90200060 LDS R2,_key_prev_status
03CE FE24 SBRS R2,4
03CF C017 RJMP 0x03E7
(0337) l_trap.des_speed = l_temp_speed;
03D0 9020008F LDS R2,_l_temp_speed
03D2 90300090 LDS R3,_l_temp_speed+1
03D4 9230009E STS _l_trap+1,R3
03D6 9220009D STS _l_trap,R2
(0338) trap_ctrler( l_trap.des_speed, r_trap.des_speed );
03D8 91200091 LDS R18,_r_trap
03DA 91300092 LDS R19,_r_trap+1
03DC 9100009D LDS R16,_l_trap
03DE 9110009E LDS R17,_l_trap+1
03E0 DF58 RCALL _trap_ctrler
(0339) key_prev_status &= ~BIT( L_STOP_KEY_PRESS );
03E1 91800060 LDS R24,_key_prev_status
03E3 7E8F ANDI R24,0xEF
03E4 93800060 STS _key_prev_status,R24
(0340) } else if ( key_buf & BIT( L_ACCE_KEY ) ){
03E6 C01B RJMP 0x0402
03E7 FF40 SBRS R20,0
03E8 C00C RJMP 0x03F5
(0341) trap_ctrler( l_trap.des_speed + SPEED_INC, r_trap.des_speed );
03E9 91200091 LDS R18,_r_trap
03EB 91300092 LDS R19,_r_trap+1
03ED 9100009D LDS R16,_l_trap
03EF 9110009E LDS R17,_l_trap+1
03F1 5F0B SUBI R16,0xFB
03F2 4F1F SBCI R17,0xFF
03F3 DF45 RCALL _trap_ctrler
(0342) } else if ( key_buf & BIT( L_DECE_KEY ) ){
03F4 C00D RJMP 0x0402
03F5 FF44 SBRS R20,4
03F6 C00B RJMP 0x0402
(0343) trap_ctrler( l_trap.des_speed - SPEED_INC, r_trap.des_speed );
03F7 91200091 LDS R18,_r_trap
03F9 91300092 LDS R19,_r_trap+1
03FB 9100009D LDS R16,_l_trap
03FD 9110009E LDS R17,_l_trap+1
03FF 5005 SUBI R16,5
0400 4010 SBCI R17,0
0401 DF37 RCALL _trap_ctrler
(0344) }
(0345)
(0346) if ( key_buf & BIT( R_STOP_KEY ) ){
0402 FF57 SBRS R21,7
0403 C01B RJMP 0x041F
(0347) r_temp_speed = r_trap.des_speed;
0404 90200091 LDS R2,_r_trap
0406 90300092 LDS R3,_r_trap+1
0408 9230008E STS _r_temp_speed+1,R3
040A 9220008D STS _r_temp_speed,R2
(0348) r_trap.des_speed = 0;
040C 2422 CLR R2
040D 2433 CLR R3
040E 92300092 STS _r_trap+1,R3
0410 92200091 STS _r_trap,R2
(0349) trap_ctrler( l_trap.des_speed, 0 );
0412 2722 CLR R18
0413 2733 CLR R19
0414 9100009D LDS R16,_l_trap
0416 9110009E LDS R17,_l_trap+1
0418 DF20 RCALL _trap_ctrler
(0350) key_prev_status |= BIT( R_STOP_KEY_PRESS );
0419 91800060 LDS R24,_key_prev_status
041B 6081 ORI R24,1
041C 93800060 STS _key_prev_status,R24
(0351) } else if ( ( key_buf & BIT( R_RESUME_KEY ) ) && ( key_prev_status & BIT( R_STOP_KEY_PRESS ) ) ){
041E C038 RJMP 0x0457
041F FF53 SBRS R21,3
0420 C01B RJMP 0x043C
0421 90200060 LDS R2,_key_prev_status
0423 FE20 SBRS R2,0
0424 C017 RJMP 0x043C
(0352) r_trap.des_speed = r_temp_speed;
0425 9020008D LDS R2,_r_temp_speed
0427 9030008E LDS R3,_r_temp_speed+1
0429 92300092 STS _r_trap+1,R3
042B 92200091 STS _r_trap,R2
(0353) trap_ctrler( l_trap.des_speed, r_trap.des_speed );
042D 91200091 LDS R18,_r_trap
042F 91300092 LDS R19,_r_trap+1
0431 9100009D LDS R16,_l_trap
0433 9110009E LDS R17,_l_trap+1
0435 DF03 RCALL _trap_ctrler
(0354) key_prev_status &= ~BIT( R_STOP_KEY_PRESS );
0436 91800060 LDS R24,_key_prev_status
0438 7F8E ANDI R24,0xFE
0439 93800060 STS _key_prev_status,R24
(0355) } else if ( key_buf & BIT( R_ACCE_KEY ) ){
043B C01B RJMP 0x0457
043C FF43 SBRS R20,3
043D C00C RJMP 0x044A
(0356) trap_ctrler( l_trap.des_speed, r_trap.des_speed + SPEED_INC );
043E 91200091 LDS R18,_r_trap
0440 91300092 LDS R19,_r_trap+1
0442 5F2B SUBI R18,0xFB
0443 4F3F SBCI R19,0xFF
0444 9100009D LDS R16,_l_trap
0446 9110009E LDS R17,_l_trap+1
0448 DEF0 RCALL _trap_ctrler
(0357) } else if ( key_buf & BIT( R_DECE_KEY ) ){
0449 C00D RJMP 0x0457
044A FF47 SBRS R20,7
044B C00B RJMP 0x0457
(0358) trap_ctrler( l_trap.des_speed, r_trap.des_speed - SPEED_INC );
044C 91200091 LDS R18,_r_trap
044E 91300092 LDS R19,_r_trap+1
0450 5025 SUBI R18,5
0451 4030 SBCI R19,0
0452 9100009D LDS R16,_l_trap
0454 9110009E LDS R17,_l_trap+1
0456 DEE2 RCALL _trap_ctrler
(0359) }
(0360) }
0457 940E0465 CALL pop_gset1
0459 9508 RET
(0361)
(0362) void main(void)
(0363) {
(0364) init_devices();
_main:
045A DD1F RCALL _init_devices
(0365) rst_ctrl();
045B DBF9 RCALL _rst_ctrl
(0366)
(0367) do{
(0368) WDR();
045C 95A8 WDR
(0369) }while(1);
045D CFFE RJMP 0x045C
(0370) }
FILE: <library>
045E 9508 RET
pop_gset3:
045F E0E4 LDI R30,4
0460 940C0466 JMP pop
push_gset1:
0462 935A ST R21,-Y
0463 934A ST R20,-Y
0464 9508 RET
pop_gset1:
0465 E0E1 LDI R30,1
pop:
0466 9149 LD R20,Y+
0467 9159 LD R21,Y+
0468 FDE0 SBRC R30,0
0469 9508 RET
046A 9169 LD R22,Y+
046B 9179 LD R23,Y+
046C FDE1 SBRC R30,1
046D 9508 RET
046E 90A9 LD R10,Y+
046F 90B9 LD R11,Y+
0470 FDE2 SBRC R30,2
0471 9508 RET
0472 90C9 LD R12,Y+
0473 90D9 LD R13,Y+
0474 FDE3 SBRC R30,3
0475 9508 RET
0476 90E9 LD R14,Y+
0477 90F9 LD R15,Y+
0478 9508 RET
push_gset2:
0479 937A ST R23,-Y
047A 936A ST R22,-Y
047B 940C0462 JMP push_gset1
push_gset3:
047D 92BA ST R11,-Y
047E 92AA ST R10,-Y
047F 940C0479 JMP push_gset2
push_lset:
0481 93FA ST R31,-Y
0482 93EA ST R30,-Y
0483 93BA ST R27,-Y
0484 93AA ST R26,-Y
0485 939A ST R25,-Y
0486 938A ST R24,-Y
0487 933A ST R19,-Y
0488 932A ST R18,-Y
0489 931A ST R17,-Y
048A 930A ST R16,-Y
048B 929A ST R9,-Y
048C 928A ST R8,-Y
048D 927A ST R7,-Y
048E 926A ST R6,-Y
048F 925A ST R5,-Y
0490 924A ST R4,-Y
0491 923A ST R3,-Y
0492 922A ST R2,-Y
0493 921A ST R1,-Y
0494 920A ST R0,-Y
0495 B60F IN R0,0x3F
0496 920A ST R0,-Y
0497 9508 RET
pop_lset:
0498 9009 LD R0,Y+
0499 BE0F OUT 0x3F,R0
049A 9009 LD R0,Y+
049B 9019 LD R1,Y+
049C 9029 LD R2,Y+
049D 9039 LD R3,Y+
049E 9049 LD R4,Y+
049F 9059 LD R5,Y+
04A0 9069 LD R6,Y+
04A1 9079 LD R7,Y+
04A2 9089 LD R8,Y+
04A3 9099 LD R9,Y+
04A4 9109 LD R16,Y+
04A5 9119 LD R17,Y+
04A6 9129 LD R18,Y+
04A7 9139 LD R19,Y+
04A8 9189 LD R24,Y+
04A9 9199 LD R25,Y+
04AA 91A9 LD R26,Y+
04AB 91B9 LD R27,Y+
04AC 91E9 LD R30,Y+
04AD 91F9 LD R31,Y+
04AE 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -