📄 sl3010_3.s
字号:
.dbline 334
;
; delay_time1=22; //转弯时间 22*25ms = 550ms
ldi R24,22
ldi R25,0
sts _delay_time1+1,R25
sts _delay_time1,R24
.dbline 335
; delay_time2=48; //前行时间 48*25ms = 1200ms
ldi R24,48
sts _delay_time2+1,R25
sts _delay_time2,R24
.dbline 337
;
; mic_startup();//等待声控启动
rcall _mic_startup
.dbline 339
;
; gzsl=0x11;t0_times=0;
ldi R24,17
sts _gzsl,R24
.dbline 339
clr R2
sts _t0_times,R2
.dbline 340
; CLI(); //disable all interrupts
cli
.dbline 341
; timer0_init();
rcall _timer0_init
.dbline 343
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 344
; GIMSK = 0x00;
out 0x3b,R2
.dbline 345
; TIMSK|=(1<<TOIE0);
in R24,0x39
ori R24,2
out 0x39,R24
.dbline 346
; SEI(); //re-enable interrupts
sei
.dbline 348
;
; forward(); //前行
rcall _forward
.dbline 349
; delay_ms(200);
ldi R16,200
ldi R17,0
rcall _delay_ms
rjmp L120
L119:
.dbline 352
.dbline 353
rcall _music_car
.dbline 354
L120:
.dbline 351
rjmp L119
X12:
.dbline -2
.dbline 355
;
; while(1)
; {
; music_car();
; }
; }
L118:
.dbline 0 ; func end
ret
.dbend
.dbfunc e cny_car _cny_car fV
.even
_cny_car::
.dbline -1
.dbline 359
;
; //cny_car 探测白底黑线,沿着黑线运动
; void cny_car()
; {
.dbline 360
; port_init(); //PA,PB,PC,PD 初始化
rcall _port_init
.dbline 362
;
; PORTA = 0xc3; //1100,0011
ldi R24,195
out 0x1b,R24
L123:
.dbline 365
;
; cny_car_start:
; mic_startup(); //等待声控启动
rcall _mic_startup
rjmp L125
L124:
.dbline 368
;
; while(1)
; {
.dbline 369
; sw_touch();
rcall _sw_touch
.dbline 371
;
; cny_in = PINC & 0xe0;
in R24,0x13
andi R24,224
sts _cny_in,R24
.dbline 372
; if(cny_in == 0x00 || cny_in == 0x40 || cny_in == 0xa0)
tst R24
breq L130
cpi R24,64
breq L130
cpi R24,160
brne L127
L130:
.dbline 373
; {//前行
.dbline 374
; forward(); //前行
rcall _forward
.dbline 375
; cny_times = 0x00;
clr R2
sts _cny_times,R2
.dbline 376
; }
L127:
.dbline 377
; if(cny_in == 0x20 || cny_in == 0x60)
lds R24,_cny_in
cpi R24,32
breq L133
cpi R24,96
brne L131
L133:
.dbline 378
; {//慢速右转
.dbline 379
; turn_right_s(); //慢速右转
rcall _turn_right_s
.dbline 380
; delay_ms(cny_delayms);
ldi R16,50
ldi R17,0
rcall _delay_ms
.dbline 381
; cny_times = 0x00;
clr R2
sts _cny_times,R2
.dbline 382
; }
L131:
.dbline 383
; if(cny_in == 0x80 || cny_in == 0xc0)
lds R24,_cny_in
cpi R24,128
breq L136
cpi R24,192
brne L134
L136:
.dbline 384
; {//慢速左转
.dbline 385
; turn_left_s(); //慢速左转
rcall _turn_left_s
.dbline 386
; delay_ms(cny_delayms);
ldi R16,50
ldi R17,0
rcall _delay_ms
.dbline 387
; cny_times = 0x00;
clr R2
sts _cny_times,R2
.dbline 388
; }
L134:
.dbline 389
; if(cny_in == 0xe0)
lds R24,_cny_in
cpi R24,224
brne L137
.dbline 390
; {//前行--探测多次都为 0xe0 ,停止运行
.dbline 391
; forward();
rcall _forward
.dbline 392
; cny_times++;
lds R24,_cny_times
subi R24,255 ; addi 1
sts _cny_times,R24
.dbline 393
; delay_ms(10);
ldi R16,10
ldi R17,0
rcall _delay_ms
.dbline 394
; if(cny_times == 0x64)
lds R24,_cny_times
cpi R24,100
brne L139
.dbline 395
; {
.dbline 396
; stop(); //停止运动//熄灭指示灯
rcall _stop
.dbline 397
; goto cny_car_start;
rjmp L123
L139:
.dbline 399
; }
; }
L137:
.dbline 400
L125:
.dbline 367
rjmp L124
X13:
.dbline -2
.dbline 401
; }
; }
L122:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 404
;
; void main()
; {
.dbline 405
; port_init(); //PA,PB,PC,PD 初始化
rcall _port_init
.dbline 407
;
; work_status = 0x67; //置对应的工作状态标志
ldi R24,103
sts _work_status,R24
.dbline 409
;
; gzsl=0x88;timers=0;
ldi R24,136
sts _gzsl,R24
.dbline 409
clr R2
sts _timers,R2
.dbline 410
; PORTA = 0x7e;
ldi R24,126
out 0x1b,R24
.dbline 411
; CLI(); //disable all interrupts
cli
.dbline 412
; timer0_init();
rcall _timer0_init
.dbline 414
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 415
; GIMSK = 0x00;
out 0x3b,R2
.dbline 416
; TIMSK|=(1<<TOIE0);
in R24,0x39
ori R24,2
out 0x39,R24
.dbline 417
; SEI(); //re-enable interrupts
sei
rjmp L143
L142:
.dbline 420
;
; while(1)
; {
.dbline 421
; gzsl=0x88;
ldi R24,136
sts _gzsl,R24
.dbline 422
; pa = led_data[timers];
ldi R24,<_led_data
ldi R25,>_led_data
lds R2,_timers
clr R3
add R2,R24
adc R3,R25
mov R30,R2
mov R31,R3
lpm
sts _pa,R0
.dbline 423
; if(pa==0x0a){timers=0;}
mov R24,R0
cpi R24,10
brne L145
.dbline 423
.dbline 423
clr R2
sts _timers,R2
.dbline 423
L145:
.dbline 424
; PORTA = pa;
lds R2,_pa
out 0x1b,R2
.dbline 427
;
; /******************************************************/
; pd_select = PIND & 0x01;
in R24,0x10
andi R24,1
sts _pd_select,R24
.dbline 428
; if(pd_select == 0x00)//pd0=0,其它为高电平
tst R24
brne L147
.dbline 429
; {
rjmp L150
L149:
.dbline 431
; while(1)
; {
.dbline 432
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 433
; pd_select = PIND & 0x0f;
in R24,0x10
andi R24,15
sts _pd_select,R24
.dbline 434
; if(pd_select == 0x0e)//pd0=0,其它为高电平
cpi R24,14
brne L151
.dbline 435
; {
.dbline 436
; stop_timer0();
rcall _stop_timer0
.dbline 437
; remote_car();//运行遥控车程序
rcall _remote_car
.dbline 438
; }
.dbline 440
; else
; break;
L153:
.dbline 441
L150:
.dbline 430
rjmp L149
L151:
.dbline 442
; }
; }
L147:
.dbline 443
; pd_select = PIND & 0x02;
in R24,0x10
andi R24,2
sts _pd_select,R24
.dbline 444
; if(pd_select == 0x00)//pd1=0,其它为高电平
tst R24
brne L154
.dbline 445
; {
rjmp L157
L156:
.dbline 447
; while(1)
; {
.dbline 448
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 449
; pd_select = PIND & 0x0f;
in R24,0x10
andi R24,15
sts _pd_select,R24
.dbline 450
; if(pd_select == 0x0d)//pd1=0,其它为高电平
cpi R24,13
brne L158
.dbline 451
; {
.dbline 452
; stop_timer0();
rcall _stop_timer0
.dbline 453
; cny_car();//寻迹机器人,探测白底黑线,沿黑线行进
rcall _cny_car
.dbline 454
; }
.dbline 456
; else
; break;
L160:
.dbline 457
L157:
.dbline 446
rjmp L156
L158:
.dbline 458
; }
; }
L154:
.dbline 459
; pd_select = PIND & 0x04;
in R24,0x10
andi R24,4
sts _pd_select,R24
.dbline 460
; if(pd_select == 0x00)//pd2=0,其它为高电平
tst R24
brne L161
.dbline 461
; {
rjmp L164
L163:
.dbline 463
; while(1)
; {
.dbline 464
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 465
; pd_select = PIND & 0x0f;
in R24,0x10
andi R24,15
sts _pd_select,R24
.dbline 466
; if(pd_select == 0x0b)//pd2=0,其它为高电平
cpi R24,11
brne L165
.dbline 467
; {
.dbline 468
; stop_timer0();
rcall _stop_timer0
.dbline 469
; xuanya_car();//机器人避障碍、避悬崖行进
rcall _xuanya_car
.dbline 470
; }
.dbline 472
; else
; break;
L167:
.dbline 473
L164:
.dbline 462
rjmp L163
L165:
.dbline 474
; }
; }
L161:
.dbline 475
; pd_select = PIND & 0x08;
in R24,0x10
andi R24,8
sts _pd_select,R24
.dbline 476
; if(pd_select == 0x00)//pd3=0,其它为高电平
tst R24
brne L168
.dbline 477
; {
rjmp L171
L170:
.dbline 479
; while(1)
; {
.dbline 480
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 481
; pd_select = PIND & 0x0f;
in R24,0x10
andi R24,15
sts _pd_select,R24
.dbline 482
; if(pd_select == 0x07)//pd3=0,其它为高电平
cpi R24,7
brne L172
.dbline 483
; {
.dbline 484
; stop_timer0();
rcall _stop_timer0
.dbline 485
; auto_car(); //机器人按程序设定路线行走
rcall _auto_car
.dbline 486
; }
.dbline 488
; else
; break;
L174:
.dbline 489
L171:
.dbline 478
rjmp L170
L172:
.dbline 490
; }
; }
L168:
.dbline 492
; /********************************************************/
; remote_select = PINB & 0x0f;//检测遥控器是否有键按下
in R24,0x16
andi R24,15
sts _remote_select,R24
.dbline 493
; if(remote_select == 0x04)// A
cpi R24,4
brne L175
.dbline 494
; {
rjmp L178
L177:
.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 R24,0x16
andi R24,15
sts _remote_select,R24
.dbline 499
; if(remote_select == 0x04)// A
cpi R24,4
brne L179
.dbline 500
; {
.dbline 501
; stop_timer0();
rcall _stop_timer0
.dbline 502
; remote_car();//运行遥控车程序
rcall _remote_car
.dbline 503
; }
.dbline 505
; else
; break;
L181:
.dbline 506
L178:
.dbline 495
rjmp L177
L179:
.dbline 507
; }
; }
L175:
.dbline 508
; if(remote_select == 0x02)// B
lds R24,_remote_select
cpi R24,2
brne L182
.dbline 509
; {
rjmp L185
L184:
.dbline 511
; while(1)
; {
.dbline 512
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 513
; remote_select = PINB & 0x0f;
in R24,0x16
andi R24,15
sts _remote_select,R24
.dbline 514
; if(remote_select == 0x02)// B
cpi R24,2
brne L186
.dbline 515
; {
.dbline 516
; stop_timer0();
rcall _stop_timer0
.dbline 517
; cny_car();//寻迹机器人,探测白底黑线,沿黑线行进
rcall _cny_car
.dbline 518
; }
.dbline 520
; else
; break;
L188:
.dbline 521
L185:
.dbline 510
rjmp L184
L186:
.dbline 522
; }
; }
L182:
.dbline 523
; if(remote_select == 0x08)// C
lds R24,_remote_select
cpi R24,8
brne L189
.dbline 524
; {
rjmp L192
L191:
.dbline 526
; while(1)
; {
.dbline 527
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 528
; remote_select = PINB & 0x0f;
in R24,0x16
andi R24,15
sts _remote_select,R24
.dbline 529
; if(remote_select == 0x08)// C
cpi R24,8
brne L193
.dbline 530
; {
.dbline 531
; stop_timer0();
rcall _stop_timer0
.dbline 532
; xuanya_car();//机器人避障碍、避悬崖行进
rcall _xuanya_car
.dbline 533
; }
.dbline 535
; else
; break;
L195:
.dbline 536
L192:
.dbline 525
rjmp L191
L193:
.dbline 537
; }
; }
L189:
.dbline 538
; if(remote_select == 0x01)// D
lds R24,_remote_select
cpi R24,1
brne L196
.dbline 539
; {
rjmp L199
L198:
.dbline 541
; while(1)
; {
.dbline 542
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 543
; remote_select = PINB & 0x0f;
in R24,0x16
andi R24,15
sts _remote_select,R24
.dbline 544
; if(remote_select == 0x01)// D
cpi R24,1
brne L200
.dbline 545
; {
.dbline 546
; stop_timer0();
rcall _stop_timer0
.dbline 547
; auto_car();//机器人按程序设定路线行走
rcall _auto_car
.dbline 548
; }
.dbline 550
; else
; break;
L202:
.dbline 551
L199:
.dbline 540
rjmp L198
L200:
.dbline 552
; }
; }
L196:
.dbline 553
L143:
.dbline 419
rjmp L142
X14:
.dbline -2
.dbline 554
; }
; }
L141:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile E:\icc\iccavr\sl3010\sl3010_3\sl3010_3.c
_t0_times::
.blkb 1
.dbsym e t0_times _t0_times c
_gzsl::
.blkb 1
.dbsym e gzsl _gzsl c
_remote_select::
.blkb 1
.dbsym e remote_select _remote_select c
_pd_select::
.blkb 1
.dbsym e pd_select _pd_select c
_cds::
.blkb 1
.dbsym e cds _cds c
_rst_time::
.blkb 1
.dbsym e rst_time _rst_time c
_cny_times::
.blkb 1
.dbsym e cny_times _cny_times c
_cny_in::
.blkb 1
.dbsym e cny_in _cny_in c
_timers::
.blkb 1
.dbsym e timers _timers 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
_pa::
.blkb 1
.dbsym e pa _pa c
_temp1::
.blkb 1
.dbsym e temp1 _temp1 c
_temp::
.blkb 1
.dbsym e temp _temp c
_toneconst::
.blkb 2
.dbsym e toneconst _toneconst i
_delay_time2::
.blkb 2
.dbsym e delay_time2 _delay_time2 i
_delay_time1::
.blkb 2
.dbsym e delay_time1 _delay_time1 i
_mic_in::
.blkb 1
.dbfile E:/icc/include/sl3010.c
.dbsym e mic_in _mic_in c
_remote_in::
.blkb 1
.dbfile E:\icc\iccavr\sl3010\sl3010_3\sl3010_3.c
.dbsym e remote_in _remote_in c
_sw_in::
.blkb 1
.dbfile E:/icc/include/sl3010.c
.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 + -