📄 sl3010_2.s
字号:
rcall _mic_startup
.dbline 459
;
; forward(); //前行
rcall _forward
.dbline 460
; delay_ms(delay_time2);
lds R16,_delay_time2
lds R17,_delay_time2+1
rcall _delay_ms
rjmp L197
L196:
.dbline 463
.dbline 464
rcall _sw_touch
.dbline 466
rcall _remote_auto_time
.dbline 468
rcall _turn_right
.dbline 469
lds R16,_delay_time1
lds R17,_delay_time1+1
rcall _delay_ms
.dbline 471
rcall _forward
.dbline 472
lds R16,_delay_time2
lds R17,_delay_time2+1
rcall _delay_ms
.dbline 474
rcall _turn_left
.dbline 475
lds R16,_delay_time1
lds R17,_delay_time1+1
rcall _delay_ms
.dbline 477
rcall _forward
.dbline 478
lds R16,_delay_time2
lds R17,_delay_time2+1
rcall _delay_ms
.dbline 479
L197:
.dbline 462
rjmp L196
X14:
.dbline -2
.dbline 480
;
; while(1)
; {
; sw_touch(); //检测轻触开关
;
; remote_auto_time(); //遥控器控制直行和转弯时间
;
; turn_right(); //右转
; delay_ms(delay_time1);
;
; forward(); //前行
; delay_ms(delay_time2);
;
; turn_left(); //左转
; delay_ms(delay_time1);
;
; forward(); //前行
; delay_ms(delay_time2);
; }
; }
L195:
.dbline 0 ; func end
ret
.dbend
.dbfunc e cny_car _cny_car fV
; cny_times -> <dead>
.even
_cny_car::
.dbline -1
.dbline 488
;
; //cny_car 探测白底黑线,沿着黑线运动
; unsigned char cny_in;
;
; #define cny_delayms 50
;
; void cny_car()
; {
.dbline 490
; unsigned char cny_times;
; port_init();
rcall _port_init
.dbline 492
;
; PORTA = 0xc3;//1100,0011
ldi R24,195
out 0x1b,R24
.dbline 494
;
; mic_startup();
rcall _mic_startup
rjmp L201
L200:
.dbline 497
;
; while(1)
; {
.dbline 498
; sw_touch();
rcall _sw_touch
.dbline 500
;
; cny_in = PINC & 0xe0;
in R24,0x13
andi R24,224
sts _cny_in,R24
.dbline 501
; if(cny_in == 0x00 || cny_in == 0x40 || cny_in == 0xa0)
tst R24
breq L206
cpi R24,64
breq L206
cpi R24,160
brne L203
L206:
.dbline 502
; {//前行
.dbline 503
; forward(); //前行
rcall _forward
.dbline 504
; }
L203:
.dbline 505
; if(cny_in == 0x20 || cny_in == 0x60)
lds R24,_cny_in
cpi R24,32
breq L209
cpi R24,96
brne L207
L209:
.dbline 506
; {//慢速右转
.dbline 507
; turn_right_s(); //慢速右转
rcall _turn_right_s
.dbline 508
; delay_ms(cny_delayms);
ldi R16,50
ldi R17,0
rcall _delay_ms
.dbline 509
; }
L207:
.dbline 510
; if(cny_in == 0x80 || cny_in == 0xc0)
lds R24,_cny_in
cpi R24,128
breq L212
cpi R24,192
brne L210
L212:
.dbline 511
; {//慢速左转
.dbline 512
; turn_left_s(); //慢速左转
rcall _turn_left_s
.dbline 513
; delay_ms(cny_delayms);
ldi R16,50
ldi R17,0
rcall _delay_ms
.dbline 514
; }
L210:
.dbline 515
; if(cny_in == 0xe0)
lds R24,_cny_in
cpi R24,224
brne L213
.dbline 516
; {//前行--探测多次都为 0xe0 ,停止运行
.dbline 544
; // stop(); //停止运动//熄灭指示灯
; /*
; PORTD = 0xA0; //前行//1010 0000
; PORTA = 0xC3; //1100,0011
; cny_times = 0;
; delay_ms(cny_delayms);
; while(1)
; {
; cny_in = PINC & 0xe0;
; if(cny_in != 0xe0)
; {
; break;
; }
; if(cny_in == 0xe0)
; {
; cny_times++;
; if(cny_times == 5)
; {
; while(1)
; {
; PORTD = 0xff; //停止运动
; PORTA = 0xff; //熄灭指示灯
; }
; }
; }
; }
; */
; }
L213:
.dbline 545
L201:
.dbline 496
rjmp L200
X15:
.dbline -2
.dbline 546
; }
; }
L199:
.dbline 0 ; func end
ret
.dbsym l cny_times 1 c
.dbend
.dbfunc e trace_light _trace_light fV
.even
_trace_light::
.dbline -1
.dbline 552
;
; //追光机器人
; unsigned char cds;
; #define light_delay 100
; void trace_light()
; {
.dbline 553
; port_init(); //PA,PB,PC,PD 初始化
rcall _port_init
.dbline 555
;
; PORTA = 0xbd;//1011,1101
ldi R24,189
out 0x1b,R24
.dbline 557
;
; work_status = 0x70; //置对应的工作状态标志
ldi R24,112
sts _work_status,R24
.dbline 559
;
; mic_startup(); //等待声控启动
rcall _mic_startup
rjmp L217
L216:
.dbline 562
;
; while(1)
; {
.dbline 563
; sw_touch(); //检测轻触开关
rcall _sw_touch
.dbline 565
;
; cds = PINC & 0x06; //0b0000,0110
in R24,0x13
andi R24,6
sts _cds,R24
.dbline 567
;
; if(cds == 0x00) //左右两侧都感测到光
tst R24
brne L219
.dbline 568
; {//直行
.dbline 569
; forward();
rcall _forward
.dbline 570
; delay_ms(light_delay); //延时
ldi R16,100
ldi R17,0
rcall _delay_ms
.dbline 571
; }
L219:
.dbline 572
; if(cds == 0x02) //0b0000,0010___pc2(右侧)感测到光
lds R24,_cds
cpi R24,2
brne L221
.dbline 573
; {//慢速右转
.dbline 574
; turn_right_s();
rcall _turn_right_s
.dbline 575
; delay_ms(light_delay); //延时
ldi R16,100
ldi R17,0
rcall _delay_ms
.dbline 576
; }
L221:
.dbline 577
; if(cds == 0x04) //0b0000,0100___pc1(左侧)感测到光
lds R24,_cds
cpi R24,4
brne L223
.dbline 578
; {//慢速左转
.dbline 579
; turn_left_s();
rcall _turn_left_s
.dbline 580
; delay_ms(light_delay); //延时
ldi R16,100
ldi R17,0
rcall _delay_ms
.dbline 581
; }
L223:
.dbline 582
; if(cds == 0x06)
lds R24,_cds
cpi R24,6
brne L225
.dbline 583
; {//停止动作
.dbline 584
; PORTA = 0x55; //延时后停止动作,等待光照重新动作
ldi R24,85
out 0x1b,R24
.dbline 585
; delay_ms(light_delay*2);
ldi R16,200
ldi R17,0
rcall _delay_ms
.dbline 586
; stop();
rcall _stop
.dbline 587
; }
L225:
.dbline 588
L217:
.dbline 561
rjmp L216
X16:
.dbline -2
.dbline 589
; }
; }
L215:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; pd_select -> R20
; remote_select -> R22
.even
_main::
.dbline -1
.dbline 592
;
; void main()
; {
.dbline 595
; unsigned char pd_select,remote_select;
;
; port_init(); //PA,PB,PC,PD 初始化
rcall _port_init
.dbline 597
;
; work_status = 0x67; //置对应的工作状态标志
ldi R24,103
sts _work_status,R24
.dbline 599
;
; PORTA = 0x7e;
ldi R24,126
out 0x1b,R24
rjmp L229
L228:
.dbline 602
;
; while(1)
; {
.dbline 656
; /*
; pd_select = PIND & 0x0f;
; if(pd_select == 0x0e)//pd0=0,其它为高电平
; {
; while(1)
; {
; delay_ms(500);//消除抖动
; pd_select = PIND & 0x0f;
; if(pd_select == 0x0e)//pd0=0,其它为高电平
; {remote_car();}//运行遥控车程序
; else
; break;
; }
; }
; if(pd_select == 0x0d)//pd1=0,其它为高电平
; {
; while(1)
; {
; delay_ms(500);//消除抖动
; pd_select = PIND & 0x0f;
; if(pd_select == 0x0d)//pd1=0,其它为高电平
; {xuanya_car();}//运行悬崖车程序
; else
; break;
; }
; }
; if(pd_select == 0x0b)//pd2=0,其它为高电平
; {
; while(1)
; {
; delay_ms(500);//消除抖动
; pd_select = PIND & 0x0f;
; if(pd_select == 0x0b)//pd1=0,其它为高电平
; {music_car();}//运行音乐车程序
; else
; break;
; }
; }
; if(pd_select == 0x07)//pd3=0,其它为高电平
; {
; while(1)
; {
; delay_ms(500);//消除抖动
; pd_select = PIND & 0x0f;
; if(pd_select == 0x07)//pd1=0,其它为高电平
; {led_car();}//运行霓虹车程序
; else
; break;
; }
; }
; */
; //********************************************************//
; // pd3~pd0 的短路块均接上 //
; pd_select = PIND & 0x0f;
in R20,0x10
andi R20,15
.dbline 657
; if(pd_select == 0x00) //pd0,pd1,pd2,pd3均为低电平
breq X18
rjmp L231
X18:
.dbline 658
; {
.dbline 659
; remote_select = PINB & 0x0f;//检测遥控器是否有键按下
in R22,0x16
andi R22,15
.dbline 660
; if(remote_select == 0x04)// A
cpi R22,4
brne L233
.dbline 661
; {
rjmp L236
L235:
.dbline 663
; while(1)
; {
.dbline 664
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 665
; remote_select = PINB & 0x0f;
in R22,0x16
andi R22,15
.dbline 666
; if(remote_select == 0x04)// A
cpi R22,4
brne L237
.dbline 667
; {remote_car();}//运行遥控车程序
.dbline 667
rcall _remote_car
.dbline 667
.dbline 669
; else
; break;
L239:
.dbline 670
L236:
.dbline 662
rjmp L235
L237:
.dbline 671
; }
; }
L233:
.dbline 672
; if(remote_select == 0x02)// B
cpi R22,2
brne L240
.dbline 673
; {
rjmp L243
L242:
.dbline 675
; while(1)
; {
.dbline 676
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 677
; remote_select = PINB & 0x0f;
in R22,0x16
andi R22,15
.dbline 678
; if(remote_select == 0x02)// B
cpi R22,2
brne L244
.dbline 679
; {xuanya_car();}//运行悬崖车程序
.dbline 679
rcall _xuanya_car
.dbline 679
.dbline 681
; else
; break;
L246:
.dbline 682
L243:
.dbline 674
rjmp L242
L244:
.dbline 683
; }
; }
L240:
.dbline 684
; if(remote_select == 0x08)// C
cpi R22,8
brne L247
.dbline 685
; {
rjmp L250
L249:
.dbline 687
; while(1)
; {
.dbline 688
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 689
; remote_select = PINB & 0x0f;
in R22,0x16
andi R22,15
.dbline 690
; if(remote_select == 0x08)// C
cpi R22,8
brne L251
.dbline 691
; {music_car();}//运行音乐车程序
.dbline 691
rcall _music_car
.dbline 691
.dbline 693
; else
; break;
L253:
.dbline 694
L250:
.dbline 686
rjmp L249
L251:
.dbline 695
; }
; }
L247:
.dbline 696
; if(remote_select == 0x01)// D
cpi R22,1
brne L254
.dbline 697
; {
rjmp L257
L256:
.dbline 699
; while(1)
; {
.dbline 700
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 701
; remote_select = PINB & 0x0f;
in R22,0x16
andi R22,15
.dbline 702
; if(remote_select == 0x01)// D
cpi R22,1
brne L258
.dbline 703
; {led_car();}//运行霓虹车程序
.dbline 703
rcall _led_car
.dbline 703
.dbline 705
; else
; break;
L260:
.dbline 706
L257:
.dbline 698
rjmp L256
L258:
.dbline 707
; }
; }
L254:
.dbline 708
; }
L231:
.dbline 711
; //*******************************************************//
; // pd3~pd0 的短路块没有全部接上 //
; if(pd_select != 0x00) //pd0,pd1,pd2,pd3 不全为低电平
tst R20
brne X19
rjmp L261
X19:
.dbline 712
; {
.dbline 713
; remote_select = PINB & 0x0f;//检测遥控器是否有键按下
in R22,0x16
andi R22,15
.dbline 714
; if(remote_select == 0x04)// A
cpi R22,4
brne L263
.dbline 715
; {
rjmp L266
L265:
.dbline 717
; while(1)
; {
.dbline 718
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 719
; remote_select = PINB & 0x0f;
in R22,0x16
andi R22,15
.dbline 720
; if(remote_select == 0x04)// A
cpi R22,4
brne L267
.dbline 721
; {auto_car1();}//机器人走四方形路线
.dbline 721
rcall _auto_car1
.dbline 721
.dbline 723
; else
; break;
L269:
.dbline 724
L266:
.dbline 716
rjmp L265
L267:
.dbline 725
; }
; }
L263:
.dbline 726
; if(remote_select == 0x02)// B
cpi R22,2
brne L270
.dbline 727
; {
rjmp L273
L272:
.dbline 729
; while(1)
; {
.dbline 730
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 731
; remote_select = PINB & 0x0f;
in R22,0x16
andi R22,15
.dbline 732
; if(remote_select == 0x02)// B
cpi R22,2
brne L274
.dbline 733
; {auto_car8();}//机器人走"8"字
.dbline 733
rcall _auto_car8
.dbline 733
.dbline 735
; else
; break;
L276:
.dbline 736
L273:
.dbline 728
rjmp L272
L274:
.dbline 737
; }
; }
L270:
.dbline 738
; if(remote_select == 0x08)// C
cpi R22,8
brne L277
.dbline 739
; {
rjmp L280
L279:
.dbline 741
; while(1)
; {
.dbline 742
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 743
; remote_select = PINB & 0x0f;
in R22,0x16
andi R22,15
.dbline 744
; if(remote_select == 0x08)// C
cpi R22,8
brne L281
.dbline 745
; {cny_car();}//寻迹机器人,探测白底黑线,沿黑线运动
.dbline 745
rcall _cny_car
.dbline 745
.dbline 747
; else
; break;
L283:
.dbline 748
L280:
.dbline 740
rjmp L279
L281:
.dbline 749
; }
; }
L277:
.dbline 750
; if(remote_select == 0x01)// D
cpi R22,1
brne L284
.dbline 751
; {
rjmp L287
L286:
.dbline 753
; while(1)
; {
.dbline 754
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 755
; remote_select = PINB & 0x0f;
in R22,0x16
andi R22,15
.dbline 756
; if(remote_select == 0x01)// D
cpi R22,1
brne L288
.dbline 757
; {trace_light();}//追光机器人
.dbline 757
rcall _trace_light
.dbline 757
.dbline 759
; else
; break;
L290:
.dbline 760
L287:
.dbline 752
rjmp L286
L288:
.dbline 761
; }
; }
L284:
.dbline 762
; }
L261:
.dbline 763
L229:
.dbline 601
rjmp L228
X17:
.dbline -2
.dbline 764
; }
; }
L227:
.dbline 0 ; func end
ret
.dbsym r pd_select 20 c
.dbsym r remote_select 22 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\icc\iccavr\sl3010\sl3010_2\sl3010_2.c
_cds::
.blkb 1
.dbsym e cds _cds c
_cny_in::
.blkb 1
.dbsym e cny_in _cny_in 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
.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
.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 + -