📄 sl3010_4.s
字号:
sts _temp,R2
.dbline 549
mov R24,R2
swap R24
andi R24,#0x0F
sts _temp,R24
.dbline 550
andi R24,15
sts _temp,R24
.dbline 551
mov R18,R24
clr R19
ldi R16,129
ldi R17,0
rcall mpy16s
rcall _delay_ms
.dbline 552
in R24,0x39
andi R24,127
out 0x39,R24
.dbline 553
lds R24,_sound_add
lds R25,_sound_add+1
adiw R24,1
sts _sound_add+1,R25
sts _sound_add,R24
.dbline 555
L167:
.dbline 537
lds R2,_temp1
tst R2
breq X23
rjmp L166
X23:
.dbline 556
rjmp L165
X22:
.dbline -2
L163:
.dbline 0 ; func end
ret
.dbend
.dbfunc e auto_car _auto_car fV
.even
_auto_car::
.dbline -1
.dbline 560
; temp=temp1;
; temp>>=4;
; temp&=0x0f;
; delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
; TIMSK&=~(1<<TOIE1);
; sound_add++;
;
; }
; goto n01;
; }
;
; void auto_car()
; {
.dbline 561
; port_init();//PA,PB,PC,PD 初始化
rcall _port_init
.dbline 563
;
; work_status = 0x51;//置对应的工作状态标志
ldi R24,81
sts _work_status,R24
.dbline 565
;
; PORTA = 0x44;//0100,0100
ldi R24,68
out 0x1b,R24
.dbline 566
; delay_ms(1000);
ldi R16,1000
ldi R17,3
rcall _delay_ms
.dbline 568
;
; delay_time1=22; //转弯时间 22*25ms = 550ms
ldi R24,22
ldi R25,0
sts _delay_time1+1,R25
sts _delay_time1,R24
.dbline 569
; delay_time2=48; //前行时间 48*25ms = 1200ms
ldi R24,48
sts _delay_time2+1,R25
sts _delay_time2,R24
.dbline 570
; gzsl=0x88;timers=0;t0_times=0;
ldi R24,136
sts _gzsl,R24
.dbline 570
clr R2
sts _timers,R2
.dbline 570
sts _t0_times,R2
.dbline 571
; CLI(); //disable all interrupts
cli
.dbline 572
; timer0_init();
rcall _timer0_init
.dbline 574
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 575
; GIMSK = 0x00;
out 0x3b,R2
.dbline 576
; TIMSK|=(1<<TOIE0);
in R24,0x39
ori R24,2
out 0x39,R24
.dbline 577
; SEI(); //re-enable interrupts
sei
.dbline 579
;
; mic_startup();//等待声控启动
rcall _mic_startup
.dbline 581
;
; gzsl=0x11;timers=0;t0_times=0;
ldi R24,17
sts _gzsl,R24
.dbline 581
clr R2
sts _timers,R2
.dbline 581
sts _t0_times,R2
.dbline 583
;
; forward(); //前行
rcall _forward
.dbline 584
; delay_ms(200);
ldi R16,200
ldi R17,0
rcall _delay_ms
rjmp L173
L172:
.dbline 587
.dbline 588
rcall _music_car
.dbline 589
L173:
.dbline 586
rjmp L172
X24:
.dbline -2
.dbline 590
;
; while(1)
; {
; music_car();
; }
; }
L171:
.dbline 0 ; func end
ret
.dbend
.dbfunc e cny_car _cny_car fV
.even
_cny_car::
.dbline -1
.dbline 594
;
; //cny_car 探测白底黑线,沿着黑线运动
; void cny_car()
; {
.dbline 595
; port_init(); //PA,PB,PC,PD 初始化
rcall _port_init
.dbline 597
;
; PORTA = 0xc3; //1100,0011
ldi R24,195
out 0x1b,R24
.dbline 598
; delay_ms(1000);
ldi R16,1000
ldi R17,3
rcall _delay_ms
L176:
.dbline 602
;
; cny_car_start:
;
; gzsl=0x88;timers=0;t0_times=0;
ldi R24,136
sts _gzsl,R24
.dbline 602
clr R2
sts _timers,R2
.dbline 602
sts _t0_times,R2
.dbline 603
; CLI(); //disable all interrupts
cli
.dbline 604
; timer0_init();
rcall _timer0_init
.dbline 606
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 607
; GIMSK = 0x00;
out 0x3b,R2
.dbline 608
; TIMSK|=(1<<TOIE0);
in R24,0x39
ori R24,2
out 0x39,R24
.dbline 609
; SEI(); //re-enable interrupts
sei
.dbline 611
;
; mic_startup(); //等待声控启动
rcall _mic_startup
rjmp L178
L177:
.dbline 614
;
; while(1)
; {
.dbline 615
; sw_touch();
rcall _sw_touch
.dbline 617
;
; cny_in = PINC & 0xe0;
in R24,0x13
andi R24,224
sts _cny_in,R24
.dbline 618
; if(cny_in == 0x00 || cny_in == 0x40 || cny_in == 0xa0)
tst R24
breq L183
cpi R24,64
breq L183
cpi R24,160
brne L180
L183:
.dbline 619
; {//前行
.dbline 620
; forward(); //前行
rcall _forward
.dbline 621
; cny_times = 0x00;
clr R2
sts _cny_times,R2
.dbline 622
; }
L180:
.dbline 623
; if(cny_in == 0x20 || cny_in == 0x60)
lds R24,_cny_in
cpi R24,32
breq L186
cpi R24,96
brne L184
L186:
.dbline 624
; {//慢速右转
.dbline 625
; turn_right_s(); //慢速右转
rcall _turn_right_s
.dbline 626
; delay_ms(cny_delayms);
ldi R16,50
ldi R17,0
rcall _delay_ms
.dbline 627
; cny_times = 0x00;
clr R2
sts _cny_times,R2
.dbline 628
; }
L184:
.dbline 629
; if(cny_in == 0x80 || cny_in == 0xc0)
lds R24,_cny_in
cpi R24,128
breq L189
cpi R24,192
brne L187
L189:
.dbline 630
; {//慢速左转
.dbline 631
; turn_left_s(); //慢速左转
rcall _turn_left_s
.dbline 632
; delay_ms(cny_delayms);
ldi R16,50
ldi R17,0
rcall _delay_ms
.dbline 633
; cny_times = 0x00;
clr R2
sts _cny_times,R2
.dbline 634
; }
L187:
.dbline 635
; if(cny_in == 0xe0)
lds R24,_cny_in
cpi R24,224
brne L190
.dbline 636
; {//前行--探测多次都为 0xe0 ,停止运行
.dbline 637
; forward();
rcall _forward
.dbline 638
; cny_times++;
lds R24,_cny_times
subi R24,255 ; addi 1
sts _cny_times,R24
.dbline 639
; delay_ms(10);
ldi R16,10
ldi R17,0
rcall _delay_ms
.dbline 640
; if(cny_times == 0x64)
lds R24,_cny_times
cpi R24,100
brne L192
.dbline 641
; {
.dbline 642
; stop(); //停止运动//熄灭指示灯
rcall _stop
.dbline 643
; goto cny_car_start;
rjmp L176
L192:
.dbline 645
; }
; }
L190:
.dbline 646
L178:
.dbline 613
rjmp L177
X25:
.dbline -2
.dbline 647
; }
; }
L175:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 650
;
; void main()
; {
.dbline 651
; port_init(); //PA,PB,PC,PD 初始化
rcall _port_init
.dbline 653
;
; work_status = 0x67; //置对应的工作状态标志
ldi R24,103
sts _work_status,R24
.dbline 655
;
; PORTA = 0x7e;
ldi R24,126
out 0x1b,R24
.dbline 657
;
; delay_ms(2000);
ldi R16,2000
ldi R17,7
rcall _delay_ms
.dbline 659
;
; CLI(); //disable all interrupts
cli
.dbline 660
; timer0_init();
rcall _timer0_init
.dbline 662
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 663
; GIMSK = 0x00;
out 0x3b,R2
.dbline 664
; TIMSK|=(1<<TOIE0);
in R24,0x39
ori R24,2
out 0x39,R24
.dbline 665
; SEI(); //re-enable interrupts
sei
.dbline 666
; gzsl=0x88;t0_times=0;sound_1 = 0x88;
ldi R24,136
sts _gzsl,R24
.dbline 666
sts _t0_times,R2
.dbline 666
sts _sound_1,R24
.dbline 667
; mic_startup(); //等待声控起动
rcall _mic_startup
.dbline 668
; gzsl=0x55;t0_times=0;sound_1 = 0x88;
ldi R24,85
sts _gzsl,R24
.dbline 668
clr R2
sts _t0_times,R2
.dbline 668
ldi R24,136
sts _sound_1,R24
.dbline 669
; TCCR1A = 0x00;
out 0x2f,R2
.dbline 670
; TCCR1B =(1<<CS11);//8分频
ldi R24,2
out 0x2e,R24
L195:
.dbline 672
; n01:
; temp=temp1 = 0;
clr R2
sts _temp1,R2
sts _temp,R2
.dbline 673
; sound_add = 0;
clr R3
sts _sound_add+1,R3
sts _sound_add,R2
rjmp L197
L196:
.dbline 676
;
; while(temp1!=0)
; {
.dbline 677
; temp=temp1;
lds R2,_temp1
sts _temp,R2
.dbline 678
; temp&=0x0f;
mov R24,R2
andi R24,15
sts _temp,R24
.dbline 680
cpi R24,1
breq L203
cpi R24,2
breq L203
cpi R24,3
breq L203
cpi R24,4
brne L199
L203:
.dbline 680
; //PA口为音乐灯
; if(temp==1 || temp==2 || temp==3 || temp==4){PORTA = 0xfe;}
.dbline 680
ldi R24,254
out 0x1b,R24
.dbline 680
L199:
.dbline 681
lds R24,_temp
cpi R24,5
breq L206
cpi R24,6
brne L204
L206:
.dbline 681
; if(temp==5 || temp==6){PORTA = 0xfc;}
.dbline 681
ldi R24,252
out 0x1b,R24
.dbline 681
L204:
.dbline 682
lds R24,_temp
cpi R24,7
breq L209
cpi R24,8
brne L207
L209:
.dbline 682
; if(temp==7 || temp==8 ){PORTA = 0xf8;}
.dbline 682
ldi R24,248
out 0x1b,R24
.dbline 682
L207:
.dbline 683
; if(temp==9){PORTA = 0xf0;}
lds R24,_temp
cpi R24,9
brne L210
.dbline 683
.dbline 683
ldi R24,240
out 0x1b,R24
.dbline 683
L210:
.dbline 684
; if(temp==10){PORTA = 0xe0;}
lds R24,_temp
cpi R24,10
brne L212
.dbline 684
.dbline 684
ldi R24,224
out 0x1b,R24
.dbline 684
L212:
.dbline 685
; if(temp==11){PORTA = 0xc0;}
lds R24,_temp
cpi R24,11
brne L214
.dbline 685
.dbline 685
ldi R24,192
out 0x1b,R24
.dbline 685
L214:
.dbline 686
; if(temp==12){PORTA = 0x80;}
lds R24,_temp
cpi R24,12
brne L216
.dbline 686
.dbline 686
ldi R24,128
out 0x1b,R24
.dbline 686
L216:
.dbline 687
lds R24,_temp
cpi R24,13
breq L221
cpi R24,14
breq L221
cpi R24,15
brne L218
L221:
.dbline 687
; if(temp==13||temp==14 || temp==15){PORTA = 0x00;}
.dbline 687
clr R2
out 0x1b,R2
.dbline 687
L218:
.dbline 689
;
; if(temp!=0)
lds R2,_temp
tst R2
breq L222
.dbline 690
; {
.dbline 691
; TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
in R24,0x39
ori R24,128
out 0x39,R24
.dbline 692
; temp--;
mov R24,R2
subi R24,1
sts _temp,R24
.dbline 693
; toneconst=TONETABLE[temp];
ldi R24,<_TONETABLE
ldi R25,>_TONETABLE
lds R16,_temp
clr R17
lsl R16
rol R17
add R16,R24
adc R17,R25
rcall lpm16
sts _toneconst+1,R17
sts _toneconst,R16
.dbline 694
; TCNT1=toneconst;
out 0x2d,R17
out 0x2c,R16
.dbline 695
; }
L222:
.dbline 696
; temp=temp1;
lds R2,_temp1
sts _temp,R2
.dbline 697
; temp>>=4;
mov R24,R2
swap R24
andi R24,#0x0F
sts _temp,R24
.dbline 698
; temp&=0x0f;
andi R24,15
sts _temp,R24
.dbline 699
; delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
mov R18,R24
clr R19
ldi R16,129
ldi R17,0
rcall mpy16s
rcall _delay_ms
.dbline 700
; TIMSK&=~(1<<TOIE1);
in R24,0x39
andi R24,127
out 0x39,R24
.dbline 701
; sound_add++;
lds R24,_sound_add
lds R25,_sound_add+1
adiw R24,1
sts _sound_add+1,R25
sts _sound_add,R24
.dbline 704
;
; /******************************************************/
; pd_select = PIND & 0x01;
in R24,0x10
andi R24,1
sts _pd_select,R24
.dbline 705
; if(pd_select == 0x00)//pd0=0,其它为高电平
tst R24
brne L224
.dbline 706
; {
rjmp L227
L226:
.dbline 708
; while(1)
; {
.dbline 709
; delay_ms(500);//消除抖动
ldi R16,500
ldi R17,1
rcall _delay_ms
.dbline 710
; pd_select = PIND & 0x0f;
in R24,0x10
andi R24,15
sts _pd_select,R24
.dbline 711
; if(pd_select == 0x0e)//pd0=0,其它为高电平
cpi R24,14
brne L228
.dbline 712
; {
.dbline 713
; stop_timer0();
rcall _stop_timer0
.dbline 714
; remote_car();//运行遥控车程序
rcall _remote_car
.dbline 715
; }
.dbline 717
; else
; break;
L230:
.dbline 718
L227:
.dbline 707
rjmp L226
L228:
.dbline 719
; }
; }
L224:
.dbline 720
; pd_select = PIND & 0x02;
in R24,0x10
andi R24,2
sts _pd_select,R24
.dbline 721
; if(pd_select == 0x00)//pd1=0,其它为高电平
tst R24
brne L231
.dbline 722
; {
rjmp L234
L233:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -