?? diy0206_4.s
字號:
; n01:
; temp=temp1 = 0;
clr R2
sts _temp1,R2
sts _temp,R2
.dbline 537
; sound_add = 0;
clr R3
sts _sound_add+1,R3
sts _sound_add,R2
rjmp L185
L184:
.dbline 539
; while(temp1!=0)
; {
.dbline 540
; temp=temp1;
lds R2,_temp1
sts _temp,R2
.dbline 541
; temp&=0x0f;
mov R24,R2
andi R24,15
sts _temp,R24
.dbline 542
; if(temp!=0)
mov R2,R24
tst R24
breq L187
.dbline 543
; {
.dbline 544
; TIMSK|=(1<<TOIE1);//根據SOUNDTABLE中數據的低四位選擇音調頻率
in R24,0x39
ori R24,4
out 0x39,R24
.dbline 545
; temp--;
mov R24,R2
subi R24,1
sts _temp,R24
.dbline 546
; 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 547
; TCNT1=toneconst;
mov R2,R16
mov R3,R17
sts 76+1,R3
sts 76,R2
.dbline 548
; }
L187:
.dbline 549
lds R2,_temp1
sts _temp,R2
.dbline 550
mov R24,R2
swap R24
andi R24,#0x0F
sts _temp,R24
.dbline 551
andi R24,15
sts _temp,R24
.dbline 552
mov R18,R24
clr R19
ldi R16,129
ldi R17,0
rcall mpy16s
rcall _delay_ms
.dbline 553
in R24,0x39
andi R24,251
out 0x39,R24
.dbline 554
lds R24,_sound_add
lds R25,_sound_add+1
adiw R24,1
sts _sound_add+1,R25
sts _sound_add,R24
.dbline 556
L185:
.dbline 538
lds R2,_temp1
tst R2
breq X29
rjmp L184
X29:
.dbline 557
rjmp L183
X28:
.dbline -2
L181:
.dbline 0 ; func end
ret
.dbend
.dbfunc e auto_car _auto_car fV
.even
_auto_car::
.dbline -1
.dbline 561
; temp=temp1;
; temp>>=4;
; temp&=0x0f;
; delay_ms(temp*129);//根據SOUNDTABLE中數據的高四位*5后,為音調持續時間
; TIMSK&=~(1<<TOIE1);
; sound_add++;
;
; }
; goto n01;
; }
;
; void auto_car()
; {
.dbline 562
; port_init();//PA,PB,PC,PD 初始化
rcall _port_init
.dbline 564
;
; work_status = 0x51;//置對應的工作狀態標志
ldi R24,81
sts _work_status,R24
.dbline 566
;
; PORTA = 0x44;//0100,0100
ldi R24,68
out 0x1b,R24
.dbline 567
; 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,1
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 L191
L190:
.dbline 587
.dbline 588
rcall _music_car
.dbline 589
L191:
.dbline 586
rjmp L190
X30:
.dbline -2
.dbline 590
;
; while(1)
; {
; music_car();
; }
; }
L189:
.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
L194:
.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,1
out 0x39,R24
.dbline 609
; SEI(); //re-enable interrupts
sei
.dbline 611
;
; mic_startup(); //等待聲控啟動
rcall _mic_startup
rjmp L196
L195:
.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 L201
cpi R24,64
breq L201
cpi R24,160
brne L198
L201:
.dbline 619
; {//前行
.dbline 620
; forward(); //前行
rcall _forward
.dbline 621
; cny_times = 0x00;
clr R2
sts _cny_times,R2
.dbline 622
; }
L198:
.dbline 623
; if(cny_in == 0x20 || cny_in == 0x60)
lds R24,_cny_in
cpi R24,32
breq L204
cpi R24,96
brne L202
L204:
.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
; }
L202:
.dbline 629
; if(cny_in == 0x80 || cny_in == 0xc0)
lds R24,_cny_in
cpi R24,128
breq L207
cpi R24,192
brne L205
L207:
.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
; }
L205:
.dbline 635
; if(cny_in == 0xe0)
lds R24,_cny_in
cpi R24,224
brne L208
.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 L210
.dbline 641
; {
.dbline 642
; stop(); //停止運動//熄滅指示燈
rcall _stop
.dbline 643
; goto cny_car_start;
rjmp L194
L210:
.dbline 645
; }
; }
L208:
.dbline 646
L196:
.dbline 613
rjmp L195
X31:
.dbline -2
.dbline 647
; }
; }
L193:
.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 658
; CLI(); //disable all interrupts
cli
.dbline 659
; timer0_init();
rcall _timer0_init
.dbline 661
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 662
; GIMSK = 0x00;
out 0x3b,R2
.dbline 663
; TIMSK|=(1<<TOIE0);
in R24,0x39
ori R24,1
out 0x39,R24
.dbline 664
; SEI(); //re-enable interrupts
sei
.dbline 665
; gzsl=0x55;t0_times=0;sound_1 = 0x88;
ldi R24,85
sts _gzsl,R24
.dbline 665
sts _t0_times,R2
.dbline 665
ldi R24,136
sts _sound_1,R24
.dbline 666
; TCCR1A = 0x00;
out 0x2f,R2
.dbline 667
; TCCR1B =(1<<CS11);//8分頻
ldi R24,2
out 0x2e,R24
L213:
.dbline 669
; n01:
; temp=temp1 = 0;
clr R2
sts _temp1,R2
sts _temp,R2
.dbline 670
; sound_add = 0;
clr R3
sts _sound_add+1,R3
sts _sound_add,R2
rjmp L215
L214:
.dbline 673
;
; while(temp1!=0)
; {
.dbline 674
; temp=temp1;
lds R2,_temp1
sts _temp,R2
.dbline 675
; temp&=0x0f;
mov R24,R2
andi R24,15
sts _temp,R24
.dbline 677
cpi R24,1
breq L221
cpi R24,2
breq L221
cpi R24,3
breq L221
cpi R24,4
brne L217
L221:
.dbline 677
; //PA口為音樂燈
; if(temp==1 || temp==2 || temp==3 || temp==4){PORTA = 0xfe;}
.dbline 677
ldi R24,254
out 0x1b,R24
.dbline 677
L217:
.dbline 678
lds R24,_temp
cpi R24,5
breq L224
cpi R24,6
brne L222
L224:
.dbline 678
; if(temp==5 || temp==6){PORTA = 0xfc;}
.dbline 678
ldi R24,252
out 0x1b,R24
.dbline 678
L222:
.dbline 679
lds R24,_temp
cpi R24,7
breq L227
cpi R24,8
brne L225
L227:
.dbline 679
; if(temp==7 || temp==8 ){PORTA = 0xf8;}
.dbline 679
ldi R24,248
out 0x1b,R24
.dbline 679
L225:
.dbline 680
; if(temp==9){PORTA = 0xf0;}
lds R24,_temp
cpi R24,9
brne L228
.dbline 680
.dbline 680
ldi R24,240
out 0x1b,R24
.dbline 680
L228:
.dbline 681
; if(temp==10){PORTA = 0xe0;}
lds R24,_temp
cpi R24,10
brne L230
.dbline 681
.dbline 681
ldi R24,224
out 0x1b,R24
.dbline 681
L230:
.dbline 682
; if(temp==11){PORTA = 0xc0;}
lds R24,_temp
cpi R24,11
brne L232
.dbline 682
.dbline 682
ldi R24,192
out 0x1b,R24
.dbline 682
L232:
.dbline 683
; if(temp==12){PORTA = 0x80;}
lds R24,_temp
cpi R24,12
brne L234
.dbline 683
.dbline 683
ldi R24,128
out 0x1b,R24
.dbline 683
L234:
.dbline 684
lds R24,_temp
cpi R24,13
breq L239
cpi R24,14
breq L239
cpi R24,15
brne L236
L239:
.dbline 684
; if(temp==13||temp==14 || temp==15){PORTA = 0x00;}
.dbline 684
clr R2
out 0x1b,R2
.dbline 684
L236:
.dbline 686
;
; if(temp!=0)
lds R2,_temp
tst R2
breq L240
.dbline 687
; {
.dbline 688
; TIMSK|=(1<<TOIE1);//根據SOUNDTABLE中數據的低四位選擇音調頻率
in R24,0x39
ori R24,4
out 0x39,R24
.dbline 689
; temp--;
mov R24,R2
subi R24,1
sts _temp,R24
.dbline 690
; 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 691
; TCNT1=toneconst;
mov R2,R16
mov R3,R17
sts 76+1,R3
sts 76,R2
.dbline 692
; }
L240:
.dbline 693
; temp=temp1;
lds R2,_temp1
sts _temp,R2
.dbline 694
; temp>>=4;
mov R24,R2
swap R24
andi R24,#0x0F
sts _temp,R24
.dbline 695
; temp&=0x0f;
andi R24,15
sts _temp,R24
.dbline 696
; delay_ms(temp*129);//根據SOUNDTABLE中數據的高四位*5后,為音調持續時間
mov R18,R24
clr R19
ldi R16,129
ldi R17,0
rcall mpy16s
rcall _delay_ms
.dbline 697
; TIMSK&=~(1<<TOIE1);
in R24,0x39
andi R24,251
out 0x39,R24
.dbline 698
; sound_add++;
lds R24,_sound_add
lds R25,_sound_add+1
adiw R24,1
sts _sound_add+1,R25
sts _sound_add,R24
.dbline 701
;
; /******************************************************/
; pd_select = PIND & 0x01;
in R24,0x10
andi R24,1
sts _pd_select,R24
.dbline 702
; if(pd_select == 0x00)//pd0=0,其它為高電平
tst R24
brne L242
.dbline 703
; {
rjmp L245
L244:
.dbline 705
; while(1)
; {
.dbline 706
; delay_ms(500);//消除抖動
ldi R16,500
ldi R17
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -