📄 boat.s
字号:
xjmp L99
X14:
.dbline 281
.dbline 282
; pt_r->real_speed += pt_r->step; //加速梯形图
movw R24,R18
adiw R24,2
movw R30,R18
ldd R4,z+10
ldd R5,z+11
movw R30,R24
ldd R6,z+0
ldd R7,z+1
add R6,R4
adc R7,R5
std z+1,R7
std z+0,R6
.dbline 283
; if ( pt_r->real_speed < 0 ){ //取绝对值
movw R30,R18
ldd R24,z+2
ldd R25,z+3
cpi R24,0
ldi R30,0
cpc R25,R30
brge L102
.dbline 283
.dbline 284
; OCR1B = (uint)(-pt_r->real_speed);
movw R30,R18
ldd R24,z+2
ldd R25,z+3
com R24
com R25
subi R24,0xFF
sbci R25,0xFF
out 0x29,R25
out 0x28,R24
.dbline 285
xjmp L103
L102:
.dbline 285
; } else {
.dbline 286
; OCR1B = (uint)(pt_r->real_speed);
movw R30,R18
ldd R2,z+2
ldd R3,z+3
out 0x29,R3
out 0x28,R2
.dbline 287
; }
L103:
.dbline 288
; pt_r->counter = 0; //计数器清零
clr R2
clr R3
movw R30,R18
std z+9,R3
std z+8,R2
.dbline 289
; }
.dbline 290
xjmp L99
L98:
.dbline 290
; } else if( pt_r->real_speed > pt_r->des_speed ){
movw R30,R18
ldd R2,z+0
ldd R3,z+1
ldd R4,z+2
ldd R5,z+3
cp R2,R4
cpc R3,R5
brlt X15
xjmp L104
X15:
.dbline 290
.dbline 291
; if ( ++ pt_r->counter == pt_r->dece_count ){
movw R24,R18
adiw R24,8
movw R30,R24
ldd R24,z+0
ldd R25,z+1
adiw R24,1
movw R4,R24
std z+1,R5
std z+0,R4
movw R30,R18
ldd R2,z+6
ldd R3,z+7
cp R24,R2
cpc R25,R3
breq X16
xjmp L106
X16:
.dbline 291
.dbline 292
; pt_r->real_speed -= pt_r->step;
movw R24,R18
adiw R24,2
movw R30,R18
ldd R4,z+10
ldd R5,z+11
movw R30,R24
ldd R6,z+0
ldd R7,z+1
sub R6,R4
sbc R7,R5
std z+1,R7
std z+0,R6
.dbline 293
; if ( pt_r->real_speed < 0 ){ //取绝对值
movw R30,R18
ldd R24,z+2
ldd R25,z+3
cpi R24,0
ldi R30,0
cpc R25,R30
brge L108
.dbline 293
.dbline 294
; OCR1B = (uint)(-pt_r->real_speed);
movw R30,R18
ldd R24,z+2
ldd R25,z+3
com R24
com R25
subi R24,0xFF
sbci R25,0xFF
out 0x29,R25
out 0x28,R24
.dbline 295
xjmp L109
L108:
.dbline 295
; } else {
.dbline 296
; OCR1B = (uint)(pt_r->real_speed);
movw R30,R18
ldd R2,z+2
ldd R3,z+3
out 0x29,R3
out 0x28,R2
.dbline 297
; }
L109:
.dbline 298
; pt_r->counter = 0;
clr R2
clr R3
movw R30,R18
std z+9,R3
std z+8,R2
.dbline 299
; }
L106:
.dbline 300
; }
L104:
L99:
L89:
.dbline -2
.dbline 301
; }
L65:
.dbline 0 ; func end
ret
.dbsym r pt_r 18 pS[_trap]
.dbsym r pt_l 16 pS[_trap]
.dbend
.dbfunc e trap_ctrler _trap_ctrler fV
; r_des_speed -> R18,R19
; l_des_speed -> R16,R17
.even
_trap_ctrler::
.dbline -1
.dbline 305
;
; //电机速度控制接口函数
; void trap_ctrler( int l_des_speed, int r_des_speed )
; {
.dbline 306
; l_trap.acce_count = L_ACCE_COUNT; //设定左电机
ldi R24,2
ldi R25,0
sts _l_trap+4+1,R25
sts _l_trap+4,R24
.dbline 307
; l_trap.dece_count = L_DECE_COUNT;
sts _l_trap+6+1,R25
sts _l_trap+6,R24
.dbline 308
; l_trap.step = L_STEP;
ldi R24,1
sts _l_trap+10+1,R25
sts _l_trap+10,R24
.dbline 309
; if ( l_des_speed > ( MAX_SPEED - l_trap.step ) ){ //给定值限幅处理
movw R2,R24
ldi R24,510
ldi R25,1
sub R24,R2
sbc R25,R3
cp R24,R16
cpc R25,R17
brge L114
.dbline 309
.dbline 310
; l_trap.des_speed = MAX_SPEED - l_trap.step;
ldi R24,510
ldi R25,1
sub R24,R2
sbc R25,R3
sts _l_trap+1,R25
sts _l_trap,R24
.dbline 311
xjmp L115
L114:
.dbline 311
; } else if ( l_des_speed < ( MIN_SPEED + l_trap.step ) ){
lds R24,_l_trap+10
lds R25,_l_trap+10+1
subi R24,254
sbci R25,1
cp R16,R24
cpc R17,R25
brge L118
.dbline 311
.dbline 312
; l_trap.des_speed = MIN_SPEED + l_trap.step;
lds R24,_l_trap+10
lds R25,_l_trap+10+1
subi R24,254
sbci R25,1
sts _l_trap+1,R25
sts _l_trap,R24
.dbline 313
xjmp L119
L118:
.dbline 313
; } else {
.dbline 314
; l_trap.des_speed = l_des_speed;
sts _l_trap+1,R17
sts _l_trap,R16
.dbline 315
; }
L119:
L115:
.dbline 316
; r_trap.acce_count = R_ACCE_COUNT; //设定右电机
ldi R24,2
ldi R25,0
sts _r_trap+4+1,R25
sts _r_trap+4,R24
.dbline 317
; r_trap.dece_count = R_DECE_COUNT;
sts _r_trap+6+1,R25
sts _r_trap+6,R24
.dbline 318
; r_trap.step = R_STEP;
ldi R24,1
sts _r_trap+10+1,R25
sts _r_trap+10,R24
.dbline 319
; if ( r_des_speed > ( MAX_SPEED - r_trap.step ) ){ //给定值限幅处理
movw R2,R24
ldi R24,510
ldi R25,1
sub R24,R2
sbc R25,R3
cp R24,R18
cpc R25,R19
brge L125
.dbline 319
.dbline 320
; r_trap.des_speed = MAX_SPEED - r_trap.step;
ldi R24,510
ldi R25,1
sub R24,R2
sbc R25,R3
sts _r_trap+1,R25
sts _r_trap,R24
.dbline 321
xjmp L126
L125:
.dbline 321
; } else if ( r_des_speed < ( MIN_SPEED + r_trap.step ) ){
lds R24,_r_trap+10
lds R25,_r_trap+10+1
subi R24,254
sbci R25,1
cp R18,R24
cpc R19,R25
brge L129
.dbline 321
.dbline 322
; r_trap.des_speed = MIN_SPEED + r_trap.step;
lds R24,_r_trap+10
lds R25,_r_trap+10+1
subi R24,254
sbci R25,1
sts _r_trap+1,R25
sts _r_trap,R24
.dbline 323
xjmp L130
L129:
.dbline 323
; } else {
.dbline 324
; r_trap.des_speed = r_des_speed;
sts _r_trap+1,R19
sts _r_trap,R18
.dbline 325
; }
L130:
L126:
.dbline -2
.dbline 326
; }
L110:
.dbline 0 ; func end
ret
.dbsym r r_des_speed 18 I
.dbsym r l_des_speed 16 I
.dbend
.dbfunc e key_process _key_process fV
; key_buf -> R20,R21
.even
_key_process::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 330
;
; /**************************** 键盘信号处理模块 ********************************/
; void key_process( uint key_buf )
; {
.dbline 331
; if ( key_buf & BIT( L_STOP_KEY ) ){
sbrs R21,4
rjmp L134
.dbline 331
.dbline 332
; l_temp_speed = l_trap.des_speed;
lds R2,_l_trap
lds R3,_l_trap+1
sts _l_temp_speed+1,R3
sts _l_temp_speed,R2
.dbline 333
; l_trap.des_speed = 0;
clr R2
clr R3
sts _l_trap+1,R3
sts _l_trap,R2
.dbline 334
; trap_ctrler( 0, r_trap.des_speed );
lds R18,_r_trap
lds R19,_r_trap+1
clr R16
clr R17
xcall _trap_ctrler
.dbline 335
; key_prev_status |= BIT( L_STOP_KEY_PRESS );
lds R24,_key_prev_status
ori R24,16
sts _key_prev_status,R24
.dbline 336
xjmp L135
L134:
.dbline 336
; } else if ( ( key_buf & BIT( L_RESUME_KEY ) ) && ( key_prev_status & BIT( L_STOP_KEY_PRESS ) ) ){
sbrs R21,0
rjmp L136
lds R2,_key_prev_status
sbrs R2,4
rjmp L136
.dbline 336
.dbline 337
; l_trap.des_speed = l_temp_speed;
lds R2,_l_temp_speed
lds R3,_l_temp_speed+1
sts _l_trap+1,R3
sts _l_trap,R2
.dbline 338
; trap_ctrler( l_trap.des_speed, r_trap.des_speed );
lds R18,_r_trap
lds R19,_r_trap+1
lds R16,_l_trap
lds R17,_l_trap+1
xcall _trap_ctrler
.dbline 339
; key_prev_status &= ~BIT( L_STOP_KEY_PRESS );
lds R24,_key_prev_status
andi R24,239
sts _key_prev_status,R24
.dbline 340
xjmp L137
L136:
.dbline 340
; } else if ( key_buf & BIT( L_ACCE_KEY ) ){
sbrs R20,0
rjmp L138
.dbline 340
.dbline 341
; trap_ctrler( l_trap.des_speed + SPEED_INC, r_trap.des_speed );
lds R18,_r_trap
lds R19,_r_trap+1
lds R16,_l_trap
lds R17,_l_trap+1
subi R16,251 ; offset = 5
sbci R17,255
xcall _trap_ctrler
.dbline 342
xjmp L139
L138:
.dbline 342
; } else if ( key_buf & BIT( L_DECE_KEY ) ){
sbrs R20,4
rjmp L140
.dbline 342
.dbline 343
; trap_ctrler( l_trap.des_speed - SPEED_INC, r_trap.des_speed );
lds R18,_r_trap
lds R19,_r_trap+1
lds R16,_l_trap
lds R17,_l_trap+1
subi R16,5
sbci R17,0
xcall _trap_ctrler
.dbline 344
; }
L140:
L139:
L137:
L135:
.dbline 346
;
; if ( key_buf & BIT( R_STOP_KEY ) ){
sbrs R21,7
rjmp L142
.dbline 346
.dbline 347
; r_temp_speed = r_trap.des_speed;
lds R2,_r_trap
lds R3,_r_trap+1
sts _r_temp_speed+1,R3
sts _r_temp_speed,R2
.dbline 348
; r_trap.des_speed = 0;
clr R2
clr R3
sts _r_trap+1,R3
sts _r_trap,R2
.dbline 349
; trap_ctrler( l_trap.des_speed, 0 );
clr R18
clr R19
lds R16,_l_trap
lds R17,_l_trap+1
xcall _trap_ctrler
.dbline 350
; key_prev_status |= BIT( R_STOP_KEY_PRESS );
lds R24,_key_prev_status
ori R24,1
sts _key_prev_status,R24
.dbline 351
xjmp L143
L142:
.dbline 351
; } else if ( ( key_buf & BIT( R_RESUME_KEY ) ) && ( key_prev_status & BIT( R_STOP_KEY_PRESS ) ) ){
sbrs R21,3
rjmp L144
lds R2,_key_prev_status
sbrs R2,0
rjmp L144
.dbline 351
.dbline 352
; r_trap.des_speed = r_temp_speed;
lds R2,_r_temp_speed
lds R3,_r_temp_speed+1
sts _r_trap+1,R3
sts _r_trap,R2
.dbline 353
; trap_ctrler( l_trap.des_speed, r_trap.des_speed );
lds R18,_r_trap
lds R19,_r_trap+1
lds R16,_l_trap
lds R17,_l_trap+1
xcall _trap_ctrler
.dbline 354
; key_prev_status &= ~BIT( R_STOP_KEY_PRESS );
lds R24,_key_prev_status
andi R24,254
sts _key_prev_status,R24
.dbline 355
xjmp L145
L144:
.dbline 355
; } else if ( key_buf & BIT( R_ACCE_KEY ) ){
sbrs R20,3
rjmp L146
.dbline 355
.dbline 356
; trap_ctrler( l_trap.des_speed, r_trap.des_speed + SPEED_INC );
lds R18,_r_trap
lds R19,_r_trap+1
subi R18,251 ; offset = 5
sbci R19,255
lds R16,_l_trap
lds R17,_l_trap+1
xcall _trap_ctrler
.dbline 357
xjmp L147
L146:
.dbline 357
; } else if ( key_buf & BIT( R_DECE_KEY ) ){
sbrs R20,7
rjmp L148
.dbline 357
.dbline 358
; trap_ctrler( l_trap.des_speed, r_trap.des_speed - SPEED_INC );
lds R18,_r_trap
lds R19,_r_trap+1
subi R18,5
sbci R19,0
lds R16,_l_trap
lds R17,_l_trap+1
xcall _trap_ctrler
.dbline 359
; }
L148:
L147:
L145:
L143:
.dbline -2
.dbline 360
; }
L133:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r key_buf 20 i
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 363
;
; void main(void)
; {
.dbline 364
; init_devices();
xcall _init_devices
.dbline 365
; rst_ctrl();
xcall _rst_ctrl
L151:
.dbline 367
;
; do{
.dbline 368
; WDR();
wdr
.dbline 369
L152:
.dbline 369
xjmp L151
X17:
.dbline -2
.dbline 370
; }while(1);
; }
L150:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile G:\汽艇\source\key_board\boat.c
_key_prev_status::
.blkb 1
.dbsym e key_prev_status _key_prev_status c
_key_status::
.blkb 2
.dbsym e key_status _key_status i
_rbuf::
.blkb 20
.dbsym e rbuf _rbuf A[20:20]c
_tbuf::
.blkb 20
.dbsym e tbuf _tbuf A[20:20]c
_delay_counter::
.blkb 2
.dbsym e delay_counter _delay_counter i
_r_temp_speed::
.blkb 2
.dbsym e r_temp_speed _r_temp_speed i
_l_temp_speed::
.blkb 2
.dbsym e l_temp_speed _l_temp_speed i
_r_trap::
.blkb 12
.dbsym e r_trap _r_trap S[_trap]
_l_trap::
.blkb 12
.dbsym e l_trap _l_trap S[_trap]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -