📄 sl3010_1.s
字号:
ldi R17,0
rcall _delay_ms
.dbline 323
; }
L167:
.dbline 324
; if(pc == 0x80)
lds R24,_pc
cpi R24,128
brne L169
.dbline 325
; {//后退//左转
.dbline 326
; backward();//后退
rcall _backward
.dbline 327
; delay_ms(xuanya_delayms);
ldi R16,300
ldi R17,1
rcall _delay_ms
.dbline 328
; turn_right();//左转
rcall _turn_right
.dbline 329
; delay_ms(xuanya_delayms/2);
ldi R16,150
ldi R17,0
rcall _delay_ms
.dbline 330
; }
L169:
.dbline 331
; if(pc == 0x20)
lds R24,_pc
cpi R24,32
brne L171
.dbline 332
; {//后退//左转
.dbline 333
; backward();//后退
rcall _backward
.dbline 334
; delay_ms(xuanya_delayms);
ldi R16,300
ldi R17,1
rcall _delay_ms
.dbline 335
; turn_right();//左转
rcall _turn_right
.dbline 336
; delay_ms(xuanya_delayms/2);
ldi R16,150
ldi R17,0
rcall _delay_ms
.dbline 337
; }
L171:
.dbline 338
; if(pc == 0xc0)
lds R24,_pc
cpi R24,192
brne L173
.dbline 339
; {//后退//左转
.dbline 340
; backward();//后退
rcall _backward
.dbline 341
; delay_ms(xuanya_delayms);
ldi R16,300
ldi R17,1
rcall _delay_ms
.dbline 342
; turn_right();//左转
rcall _turn_right
.dbline 343
; delay_ms(xuanya_delayms/2);
ldi R16,150
ldi R17,0
rcall _delay_ms
.dbline 344
; }
L173:
.dbline 345
; if(pc == 0x60)
lds R24,_pc
cpi R24,96
brne L175
.dbline 346
; {//后退//左转
.dbline 347
; backward();//后退
rcall _backward
.dbline 348
; delay_ms(xuanya_delayms);
ldi R16,300
ldi R17,1
rcall _delay_ms
.dbline 349
; turn_right();//左转
rcall _turn_right
.dbline 350
; delay_ms(xuanya_delayms/2);
ldi R16,150
ldi R17,0
rcall _delay_ms
.dbline 351
; }
L175:
.dbline 352
; if(pc == 0xE0)
lds R24,_pc
cpi R24,224
brne L177
.dbline 353
; {
.dbline 355
; //刹车 //led灯为流水灯
; stop();
rcall _stop
.dbline 356
; PORTA = 0x3C;
ldi R24,60
out 0x1b,R24
.dbline 357
; delay_ms(xuanya_delayms);
ldi R16,300
ldi R17,1
rcall _delay_ms
.dbline 358
; PORTA = 0xC3;
ldi R24,195
out 0x1b,R24
.dbline 359
; delay_ms(xuanya_delayms);
ldi R16,300
ldi R17,1
rcall _delay_ms
.dbline 360
; }
rjmp L178
L177:
.dbline 362
; else
; {
.dbline 363
; forward();//前行
rcall _forward
.dbline 364
; }
L178:
.dbline 365
L163:
.dbline 303
rjmp L162
X9:
.dbline -2
.dbline 366
; }
; }
L161:
.dbline 0 ; func end
ret
.dbend
.dbfunc e remote_car _remote_car fV
; remote_in -> R22
.even
_remote_car::
rcall push_gset2
.dbline -1
.dbline 369
;
; void remote_car()
; {//遥控车程序
.dbline 372
; unsigned char remote_in;
;
; PORTA = 0x0f;
ldi R24,15
out 0x1b,R24
.dbline 374
;
; work_status = 0x60;//置对应的工作状态标志
ldi R24,96
sts _work_status,R24
.dbline 376
;
; mic_startup();//等待声控启动函数
rcall _mic_startup
rjmp L181
L180:
.dbline 379
;
; while(1)
; {
.dbline 381
;
; sw_touch();//检测轻触开关
rcall _sw_touch
.dbline 383
;
; remote_in = PINB & 0x0F;
in R22,0x16
andi R22,15
.dbline 384
; switch (remote_in)
mov R20,R22
clr R21
cpi R20,0
cpc R20,R21
breq L190
X10:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L189
cpi R20,2
ldi R30,0
cpc R21,R30
breq L187
cpi R20,4
ldi R30,0
cpc R21,R30
breq L186
cpi R20,8
ldi R30,0
cpc R21,R30
breq L188
rjmp L183
X11:
.dbline 385
; {//检测遥控器是否有键按下
L186:
.dbline 387
; case 0x04: // < A >
; turn_right(); //右转
rcall _turn_right
.dbline 388
; break;
rjmp L184
L187:
.dbline 390
; case 0x02: // < B >
; backward(); //后退
rcall _backward
.dbline 391
; break;
rjmp L184
L188:
.dbline 393
; case 0x08: // < C >
; stop(); //停止运动
rcall _stop
.dbline 394
; break;
rjmp L184
L189:
.dbline 396
; case 0x01: // < D >
; turn_left(); //左转
rcall _turn_left
.dbline 397
; break;
rjmp L184
L190:
.dbline 399
; case 0x00:
; forward(); //前行
rcall _forward
.dbline 400
; break;
L183:
L184:
.dbline 402
ldi R16,100
ldi R17,0
rcall _delay_ms
.dbline 403
L181:
.dbline 378
rjmp L180
X12:
.dbline -2
.dbline 404
; }
; delay_ms(100);
; }
; }
L179:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r remote_in 22 c
.dbend
.dbfunc e main _main fV
; remote_select -> R20
; pd_select -> R22
.even
_main::
.dbline -1
.dbline 407
;
; void main()
; {
.dbline 410
; unsigned char pd_select,remote_select;
;
; port_init(); //PA,PB,PC,PD 初始化
rcall _port_init
.dbline 412
;
; work_status = 0x67; //置对应的工作状态标志
ldi R24,103
sts _work_status,R24
.dbline 414
;
; PORTA = 0x7e;
ldi R24,126
out 0x1b,R24
rjmp L193
L192:
.dbline 417
;
; while(1)
; {
.dbline 418
; pd_select = PIND & 0x0f;
in R22,0x10
andi R22,15
.dbline 419
; if(pd_select == 0x0e)//pd0=0,其它为高电平
cpi R22,14
brne L195
.dbline 420
; {
rjmp L198
L197:
.dbline 422
; while(1)
; {
.dbline 423
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 424
; pd_select = PIND & 0x0f;
in R22,0x10
andi R22,15
.dbline 425
; if(pd_select == 0x0e)//pd0=0,其它为高电平
cpi R22,14
brne L199
.dbline 426
; {remote_car();}//运行遥控车程序
.dbline 426
rcall _remote_car
.dbline 426
.dbline 428
; else
; break;
L201:
.dbline 429
L198:
.dbline 421
rjmp L197
L199:
.dbline 430
; }
; }
L195:
.dbline 431
; if(pd_select == 0x0d)//pd1=0,其它为高电平
cpi R22,13
brne L202
.dbline 432
; {
rjmp L205
L204:
.dbline 434
; while(1)
; {
.dbline 435
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 436
; pd_select = PIND & 0x0f;
in R22,0x10
andi R22,15
.dbline 437
; if(pd_select == 0x0d)//pd1=0,其它为高电平
cpi R22,13
brne L206
.dbline 438
; {xuanya_car();}//运行悬崖车程序
.dbline 438
rcall _xuanya_car
.dbline 438
.dbline 440
; else
; break;
L208:
.dbline 441
L205:
.dbline 433
rjmp L204
L206:
.dbline 442
; }
; }
L202:
.dbline 443
; if(pd_select == 0x0b)//pd2=0,其它为高电平
cpi R22,11
brne L209
.dbline 444
; {
rjmp L212
L211:
.dbline 446
; while(1)
; {
.dbline 447
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 448
; pd_select = PIND & 0x0f;
in R22,0x10
andi R22,15
.dbline 449
; if(pd_select == 0x0b)//pd1=0,其它为高电平
cpi R22,11
brne L213
.dbline 450
; {music_car();}//运行音乐车程序
.dbline 450
rcall _music_car
.dbline 450
.dbline 452
; else
; break;
L215:
.dbline 453
L212:
.dbline 445
rjmp L211
L213:
.dbline 454
; }
; }
L209:
.dbline 455
; if(pd_select == 0x07)//pd3=0,其它为高电平
cpi R22,7
brne L216
.dbline 456
; {
rjmp L219
L218:
.dbline 458
; while(1)
; {
.dbline 459
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 460
; pd_select = PIND & 0x0f;
in R22,0x10
andi R22,15
.dbline 461
; if(pd_select == 0x07)//pd1=0,其它为高电平
cpi R22,7
brne L220
.dbline 462
; {led_car();}//运行霓虹车程序
.dbline 462
rcall _led_car
.dbline 462
.dbline 464
; else
; break;
L222:
.dbline 465
L219:
.dbline 457
rjmp L218
L220:
.dbline 466
; }
; }
L216:
.dbline 468
;
; remote_select = PINB & 0x0f;//检测遥控器是否有键按下
in R20,0x16
andi R20,15
.dbline 469
; if(remote_select == 0x04)// A
cpi R20,4
brne L223
.dbline 470
; {
rjmp L226
L225:
.dbline 472
; while(1)
; {
.dbline 473
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 474
; remote_select = PINB & 0x0f;
in R20,0x16
andi R20,15
.dbline 475
; if(remote_select == 0x04)// A
cpi R20,4
brne L227
.dbline 476
; {remote_car();}//运行遥控车程序
.dbline 476
rcall _remote_car
.dbline 476
.dbline 478
; else
; break;
L229:
.dbline 479
L226:
.dbline 471
rjmp L225
L227:
.dbline 480
; }
; }
L223:
.dbline 481
; if(remote_select == 0x02)// B
cpi R20,2
brne L230
.dbline 482
; {
rjmp L233
L232:
.dbline 484
; while(1)
; {
.dbline 485
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 486
; remote_select = PINB & 0x0f;
in R20,0x16
andi R20,15
.dbline 487
; if(remote_select == 0x02)// B
cpi R20,2
brne L234
.dbline 488
; {xuanya_car();}//运行悬崖车程序
.dbline 488
rcall _xuanya_car
.dbline 488
.dbline 490
; else
; break;
L236:
.dbline 491
L233:
.dbline 483
rjmp L232
L234:
.dbline 492
; }
; }
L230:
.dbline 493
; if(remote_select == 0x08)// C
cpi R20,8
brne L237
.dbline 494
; {
rjmp L240
L239:
.dbline 496
; while(1)
; {
.dbline 497
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 498
; remote_select = PINB & 0x0f;
in R20,0x16
andi R20,15
.dbline 499
; if(remote_select == 0x08)// C
cpi R20,8
brne L241
.dbline 500
; {music_car();}//运行音乐车程序
.dbline 500
rcall _music_car
.dbline 500
.dbline 502
; else
; break;
L243:
.dbline 503
L240:
.dbline 495
rjmp L239
L241:
.dbline 504
; }
; }
L237:
.dbline 505
; if(remote_select == 0x01)// D
cpi R20,1
brne L244
.dbline 506
; {
rjmp L247
L246:
.dbline 508
; while(1)
; {
.dbline 509
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 510
; remote_select = PINB & 0x0f;
in R20,0x16
andi R20,15
.dbline 511
; if(remote_select == 0x01)// D
cpi R20,1
brne L248
.dbline 512
; {led_car();}//运行霓虹车程序
.dbline 512
rcall _led_car
.dbline 512
.dbline 514
; else
; break;
L250:
.dbline 515
L247:
.dbline 507
rjmp L246
L248:
.dbline 516
; }
; }
L244:
.dbline 517
L193:
.dbline 416
rjmp L192
X13:
.dbline -2
.dbline 518
; }
; }
L191:
.dbline 0 ; func end
ret
.dbsym r remote_select 20 c
.dbsym r pd_select 22 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\icc\iccavr\sl3010\sl3010_1\sl3010_1.c
_pd::
.blkb 1
.dbsym e pd _pd c
_pc::
.blkb 1
.dbsym e pc _pc c
_pb::
.blkb 1
.dbsym e pb _pb c
_toneconst::
.blkb 2
.dbsym e toneconst _toneconst i
_timers::
.blkb 1
.dbsym e timers _timers c
_pa::
.blkb 1
.dbsym e pa _pa c
_delay_time2::
.blkb 2
.dbfile e:/ICC/include/sl3010.c
.dbsym e delay_time2 _delay_time2 i
_delay_time1::
.blkb 2
.dbsym e delay_time1 _delay_time1 i
_mic_in::
.blkb 1
.dbsym e mic_in _mic_in c
_remote_in::
.blkb 1
.dbsym e remote_in _remote_in c
_sw_in::
.blkb 1
.dbsym e sw_in _sw_in c
_work_status::
.blkb 1
.dbsym e work_status _work_status c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -