?? diy0206_4.lst
字號:
054C E090 LDI R25,0
054D 91000060 LDS R16,0x60
054F 91100061 LDS R17,0x61
0551 0F08 ADD R16,R24
0552 1F19 ADC R17,R25
0553 D3BD RCALL _EEPROMread
0554 93000073 STS _temp1,R16
(0393) }
(0394) }
(0395) }
(0396) }
0556 D353 RCALL pop_gset1
0557 D38E RCALL pop_lset
0558 9518 RETI
(0397)
(0398) void stop_timer0()
(0399) {
(0400) CLI();
_stop_timer0:
0559 94F8 BCLR 7
(0401) TCCR0 = 0x00;//停止timer0
055A 2422 CLR R2
055B BE23 OUT P33,R2
(0402) MCUCR = 0x00;
055C BE25 OUT P35,R2
(0403) GIMSK = 0x00;
055D BE2B OUT P3B,R2
(0404) TIMSK = 0x00;
055E BE29 OUT P39,R2
(0405) SEI();
055F 9478 BSET 7
(0406) }
0560 9508 RET
_timer1_ovf_isr:
0561 922A ST R2,-Y
0562 923A ST R3,-Y
0563 938A ST R24,-Y
0564 B62F IN R2,P3F
0565 922A ST R2,-Y
(0407)
(0408) /*******************************************/
(0409) /* 電子音樂演示程序 */
(0410) /*******************************************/
(0411) //使用說明:音樂輸出端口:PORTC.0,音樂數據存放
(0412) //于AT90S8515 的EEPROM存貯器中。
(0413) // 可以用并口下載軟件寫入新的音樂文件
(0414)
(0415) //聲控起動音樂機器人程序,未起動時,PA口的8 LED 呈廣告燈效果(霓虹燈)
(0416) //聲控起動后,機器人開始演奏音樂
(0417) //按遙控器上不同的鍵后可改變機器人演奏的樂曲。
(0418)
(0419) #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
(0420) void timer1_ovf_isr(void)
(0421) {
(0422) TCNT1=toneconst;
0566 90200077 LDS R2,_toneconst
0568 90300078 LDS R3,_toneconst+1
056A 9230004D STS 0x4D,R3
056C 9220004C STS 0x4C,R2
(0423) PORTC^=1;
056E E081 LDI R24,1
056F B225 IN R2,P15
0570 2628 EOR R2,R24
0571 BA25 OUT P15,R2
(0424) }
0572 9029 LD R2,Y+
0573 BE2F OUT P3F,R2
0574 9189 LD R24,Y+
0575 9039 LD R3,Y+
0576 9029 LD R2,Y+
0577 9518 RETI
(0425)
(0426) void music_car(void)
(0427) {
(0428) TCCR1A = 0x00;
_music_car:
0578 2422 CLR R2
0579 BC2F OUT P2F,R2
(0429) TCCR1B =(1<<CS11);//8分頻
057A E082 LDI R24,2
057B BD8E OUT P2E,R24
(0430) temp1=EEPROMread((int)&sound[sound_add]);
057C E081 LDI R24,1
057D E090 LDI R25,0
057E 91000060 LDS R16,0x60
0580 91100061 LDS R17,0x61
0582 0F08 ADD R16,R24
0583 1F19 ADC R17,R25
0584 D38C RCALL _EEPROMread
0585 93000073 STS _temp1,R16
0587 C04F RJMP 0x05D7
(0431) while(temp1!=0)
(0432) {
(0433) temp=temp1;
0588 90200073 LDS R2,_temp1
058A 92200074 STS _temp,R2
(0434) temp&=0x0f;
058C 2D82 MOV R24,R2
058D 708F ANDI R24,0xF
058E 93800074 STS _temp,R24
(0435) if(temp!=0)
0590 2E28 MOV R2,R24
0591 2388 TST R24
0592 F0D9 BEQ 0x05AE
(0436) {
(0437) TIMSK|=(1<<TOIE1);//根據SOUNDTABLE中數據的低四位選擇音調頻率
0593 B789 IN R24,P39
0594 6880 ORI R24,0x80
0595 BF89 OUT P39,R24
(0438) temp--;
0596 2D82 MOV R24,R2
0597 5081 SUBI R24,1
0598 93800074 STS _temp,R24
(0439) toneconst=TONETABLE[temp];
059A E18A LDI R24,0x1A
059B E090 LDI R25,0
059C 91000074 LDS R16,_temp
059E 2711 CLR R17
059F 0F00 LSL R16
05A0 1F11 ROL R17
05A1 0F08 ADD R16,R24
05A2 1F19 ADC R17,R25
05A3 D31D RCALL lpm16
05A4 93100078 STS _toneconst+1,R17
05A6 93000077 STS _toneconst,R16
(0440) TCNT1=toneconst;
05A8 2E20 MOV R2,R16
05A9 2E31 MOV R3,R17
05AA 9230004D STS 0x4D,R3
05AC 9220004C STS 0x4C,R2
(0441) }
(0442) temp=temp1;
05AE 90200073 LDS R2,_temp1
05B0 92200074 STS _temp,R2
(0443) temp>>=4;
05B2 2D82 MOV R24,R2
05B3 9582 SWAP R24
05B4 708F ANDI R24,0xF
05B5 93800074 STS _temp,R24
(0444) temp&=0x0f;
05B7 708F ANDI R24,0xF
05B8 93800074 STS _temp,R24
(0445) delay_ms(temp*129);//根據SOUNDTABLE中數據的高四位*5后,為音調持續時間
05BA 2F28 MOV R18,R24
05BB 2733 CLR R19
05BC E801 LDI R16,0x81
05BD E010 LDI R17,0
05BE D33E RCALL mpy16s
05BF DC1F RCALL _delay_ms
(0446) TIMSK&=~(1<<TOIE1);
05C0 B789 IN R24,P39
05C1 778F ANDI R24,0x7F
05C2 BF89 OUT P39,R24
(0447) sound_add++;
05C3 91800060 LDS R24,0x60
05C5 91900061 LDS R25,0x61
05C7 9601 ADIW R24,1
05C8 93900061 STS 0x61,R25
05CA 93800060 STS 0x60,R24
(0448) temp1=EEPROMread((int)&sound[sound_add]);
05CC E081 LDI R24,1
05CD E090 LDI R25,0
05CE 91000060 LDS R16,0x60
05D0 91100061 LDS R17,0x61
05D2 0F08 ADD R16,R24
05D3 1F19 ADC R17,R25
05D4 D33C RCALL _EEPROMread
05D5 93000073 STS _temp1,R16
05D7 90200073 LDS R2,_temp1
05D9 2022 TST R2
05DA F009 BEQ 0x05DC
05DB CFAC RJMP 0x0588
(0449) }
(0450) delay_ms(1000);
05DC EE08 LDI R16,0xE8
05DD E013 LDI R17,3
(0451) }
05DE CC00 RJMP _delay_ms
(0452)
(0453) // 電機驅動信號 led燈指示電機狀態
(0454) //PORTD = 0xA0;//前行 //1010 0000//PORTA = 0xC3;//1100,0011
(0455) //PORTD = 0x60;//快速左轉//0110 0000//PORTA = 0x33;//0011,0011
(0456) //PORTD = 0x20;//慢速左轉//0010 0000//PORTA = 0xF3;//1111,0011
(0457) //PORTD = 0x90;//快速右轉//1001 0000//PORTA = 0xCC;//1100,1100
(0458) //PORTD = 0x80;//慢速右轉//1000 0000//PORTA = 0xCF;//1100,1111
(0459) //PORTD = 0x50;//后退 //0101 0000//PORTA = 0x3C;//0011,1100
(0460)
(0461) //PB2聲控啟動
(0462) // 用PD7~PD4來作為電機驅動端
(0463)
(0464) void xuanya_car(void)
(0465) {
(0466) port_init(); //PA,PB,PC,PD 初始化
_xuanya_car:
05DF DBE8 RCALL _port_init
(0467) PORTA = 0xa5;//1010,0101
05E0 EA85 LDI R24,0xA5
05E1 BB8B OUT P1B,R24
(0468) delay_ms(1000);
05E2 EE08 LDI R16,0xE8
05E3 E013 LDI R17,3
05E4 DBFA RCALL _delay_ms
(0469) work_status = 0x20;//置對應的工作狀態標志
05E5 E280 LDI R24,0x20
05E6 9380007D STS _work_status,R24
(0470)
(0471)
(0472) gzsl=0x88;timers=0;t0_times=0;
05E8 E888 LDI R24,0x88
05E9 93800067 STS _gzsl,R24
05EB 2422 CLR R2
05EC 9220006D STS _timers,R2
05EE 92200066 STS _t0_times,R2
(0473) CLI(); //disable all interrupts
05F0 94F8 BCLR 7
(0474) timer0_init();
05F1 DD03 RCALL _timer0_init
(0475)
(0476) MCUCR = 0x00;
05F2 2422 CLR R2
05F3 BE25 OUT P35,R2
(0477) GIMSK = 0x00;
05F4 BE2B OUT P3B,R2
(0478) TIMSK|=(1<<TOIE0);
05F5 B789 IN R24,P39
05F6 6082 ORI R24,2
05F7 BF89 OUT P39,R24
(0479) SEI(); //re-enable interrupts
05F8 9478 BSET 7
(0480)
(0481) mic_startup();//等待聲控啟動函數
05F9 DC75 RCALL _mic_startup
(0482)
(0483) gzsl=0x44;t0_times=0;
05FA E484 LDI R24,0x44
05FB 93800067 STS _gzsl,R24
05FD 2422 CLR R2
05FE 92200066 STS _t0_times,R2
(0484) TCCR1A = 0x00;
0600 BC2F OUT P2F,R2
(0485) TCCR1B =(1<<CS11);//8分頻
0601 E082 LDI R24,2
0602 BD8E OUT P2E,R24
(0486) xuanya_car_rst:
(0487) temp=temp1 = 0;
0603 2422 CLR R2
0604 92200073 STS _temp1,R2
0606 92200074 STS _temp,R2
(0488) sound_add = 0;
0608 2433 CLR R3
0609 92300061 STS 0x61,R3
060B 92200060 STS 0x60,R2
060D C044 RJMP 0x0652
(0489) while(temp1!=0)
(0490) {
(0491) temp=temp1;
060E 90200073 LDS R2,_temp1
0610 92200074 STS _temp,R2
(0492) temp&=0x0f;
0612 2D82 MOV R24,R2
0613 708F ANDI R24,0xF
0614 93800074 STS _temp,R24
(0493) if(temp!=0)
0616 2E28 MOV R2,R24
0617 2388 TST R24
0618 F0D9 BEQ 0x0634
(0494) {
(0495) TIMSK|=(1<<TOIE1);//根據SOUNDTABLE中數據的低四位選擇音調頻率
0619 B789 IN R24,P39
061A 6880 ORI R24,0x80
061B BF89 OUT P39,R24
(0496) temp--;
061C 2D82 MOV R24,R2
061D 5081 SUBI R24,1
061E 93800074 STS _temp,R24
(0497) toneconst=TONETABLE[temp];
0620 E18A LDI R24,0x1A
0621 E090 LDI R25,0
0622 91000074 LDS R16,_temp
0624 2711 CLR R17
0625 0F00 LSL R16
0626 1F11 ROL R17
0627 0F08 ADD R16,R24
0628 1F19 ADC R17,R25
0629 D297 RCALL lpm16
062A 93100078 STS _toneconst+1,R17
062C 93000077 STS _toneconst,R16
(0498) TCNT1=toneconst;
062E 2E20 MOV R2,R16
062F 2E31 MOV R3,R17
0630 9230004D STS 0x4D,R3
0632 9220004C STS 0x4C,R2
(0499) }
(0500) temp=temp1;
0634 90200073 LDS R2,_temp1
0636 92200074 STS _temp,R2
(0501) temp>>=4;
0638 2D82 MOV R24,R2
0639 9582 SWAP R24
063A 708F ANDI R24,0xF
063B 93800074 STS _temp,R24
(0502) temp&=0x0f;
063D 708F ANDI R24,0xF
063E 93800074 STS _temp,R24
(0503) delay_ms(temp*129);//根據SOUNDTABLE中數據的高四位*5后,為音調持續時間
0640 2F28 MOV R18,R24
0641 2733 CLR R19
0642 E801 LDI R16,0x81
0643 E010 LDI R17,0
0644 D2B8 RCALL mpy16s
0645 DB99 RCALL _delay_ms
(0504) TIMSK&=~(1<<TOIE1);
0646 B789 IN R24,P39
0647 778F ANDI R24,0x7F
0648 BF89 OUT P39,R24
(0505) sound_add++;
0649 91800060 LDS R24,0x60
064B 91900061 LDS R25,0x61
064D 9601 ADIW R24,1
064E 93900061 STS 0x61,R25
0650 93800060 STS 0x60,R24
0652 90200073 LDS R2,_temp1
0654 2022 TST R2
0655 F009 BEQ 0x0657
0656 CFB7 RJMP 0x060E
(0506) }
(0507) goto xuanya_car_rst;
0657 CFAB RJMP 0x0603
0658 9508 RET
(0508) }
(0509)
(0510) void remote_car()
(0511) {//遙控車程序
(0512)
(0513) port_init();//調用端口初始化函數
_remote_car:
0659 DB6E RCALL _port_init
(0514)
(0515) work_status = 0x60;//置對應的工作狀態標志
065A E680 LDI R24,0x60
065B 9380007D STS _work_status,R24
(0516)
(0517) remote_rst:
(0518) PORTA = 0x0F;
065D E08F LDI R24,0xF
065E BB8B OUT P1B,R24
(0519) delay_ms(1000);
065F EE08 LDI R16,0xE8
0660 E013 LDI R17,3
0661 DB7D RCALL _delay_ms
(0520)
(0521) gzsl=0x88;timers=0;t0_times=0;
0662 E888 LDI R24,0x88
0663 93800067 STS _gzsl,R24
0665 2422 CLR R2
0666 9220006D STS _timers,R2
0668 92200066 STS _t0_times,R2
(0522) CLI(); //disable all interrupts
066A 94F8 BCLR 7
(0523) timer0_init();
066B DC89 RCALL _timer0_init
(0524)
(0525) MCUCR = 0x00;
066C 2422 CLR R2
066D BE25 OUT P35,R2
(0526) GIMSK = 0x00;
066E BE2B OUT P3B,R2
(0527) TIMSK|=(1<<TOIE0);
066F B789 IN R24,P39
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -