?? diy0206_4.lst
字號:
0550 E090 LDI R25,0
0551 91000060 LDS R16,0x60
0553 91100061 LDS R17,0x61
0555 0F08 ADD R16,R24
0556 1F19 ADC R17,R25
0557 D3BD RCALL _EEPROMread
0558 93000073 STS _temp1,R16
(0393) }
(0394) }
(0395) }
(0396) }
055A D353 RCALL pop_gset1
055B D38E RCALL pop_lset
055C 9518 RETI
(0397)
(0398) void stop_timer0()
(0399) {
(0400) CLI();
_stop_timer0:
055D 94F8 BCLR 7
(0401) TCCR0 = 0x00;//停止timer0
055E 2422 CLR R2
055F BE23 OUT P33,R2
(0402) MCUCR = 0x00;
0560 BE25 OUT P35,R2
(0403) GIMSK = 0x00;
0561 BE2B OUT P3B,R2
(0404) TIMSK = 0x00;
0562 BE29 OUT P39,R2
(0405) SEI();
0563 9478 BSET 7
(0406) }
0564 9508 RET
_timer1_ovf_isr:
0565 922A ST R2,-Y
0566 923A ST R3,-Y
0567 938A ST R24,-Y
0568 B62F IN R2,P3F
0569 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;
056A 90200077 LDS R2,_toneconst
056C 90300078 LDS R3,_toneconst+1
056E 9230004D STS 0x4D,R3
0570 9220004C STS 0x4C,R2
(0423) PORTC^=1;
0572 E081 LDI R24,1
0573 B225 IN R2,P15
0574 2628 EOR R2,R24
0575 BA25 OUT P15,R2
(0424) }
0576 9029 LD R2,Y+
0577 BE2F OUT P3F,R2
0578 9189 LD R24,Y+
0579 9039 LD R3,Y+
057A 9029 LD R2,Y+
057B 9518 RETI
(0425)
(0426) void music_car(void)
(0427) {
(0428) TCCR1A = 0x00;
_music_car:
057C 2422 CLR R2
057D BC2F OUT P2F,R2
(0429) TCCR1B =(1<<CS11);//8分頻
057E E082 LDI R24,2
057F BD8E OUT P2E,R24
(0430) temp1=EEPROMread((int)&sound[sound_add]);
0580 E081 LDI R24,1
0581 E090 LDI R25,0
0582 91000060 LDS R16,0x60
0584 91100061 LDS R17,0x61
0586 0F08 ADD R16,R24
0587 1F19 ADC R17,R25
0588 D38C RCALL _EEPROMread
0589 93000073 STS _temp1,R16
058B C04F RJMP 0x05DB
(0431) while(temp1!=0)
(0432) {
(0433) temp=temp1;
058C 90200073 LDS R2,_temp1
058E 92200074 STS _temp,R2
(0434) temp&=0x0f;
0590 2D82 MOV R24,R2
0591 708F ANDI R24,0xF
0592 93800074 STS _temp,R24
(0435) if(temp!=0)
0594 2E28 MOV R2,R24
0595 2388 TST R24
0596 F0D9 BEQ 0x05B2
(0436) {
(0437) TIMSK|=(1<<TOIE1);//根據SOUNDTABLE中數據的低四位選擇音調頻率
0597 B789 IN R24,P39
0598 6084 ORI R24,4
0599 BF89 OUT P39,R24
(0438) temp--;
059A 2D82 MOV R24,R2
059B 5081 SUBI R24,1
059C 93800074 STS _temp,R24
(0439) toneconst=TONETABLE[temp];
059E E282 LDI R24,0x22
059F E090 LDI R25,0
05A0 91000074 LDS R16,_temp
05A2 2711 CLR R17
05A3 0F00 LSL R16
05A4 1F11 ROL R17
05A5 0F08 ADD R16,R24
05A6 1F19 ADC R17,R25
05A7 D31D RCALL lpm16
05A8 93100078 STS _toneconst+1,R17
05AA 93000077 STS _toneconst,R16
(0440) TCNT1=toneconst;
05AC 2E20 MOV R2,R16
05AD 2E31 MOV R3,R17
05AE 9230004D STS 0x4D,R3
05B0 9220004C STS 0x4C,R2
(0441) }
(0442) temp=temp1;
05B2 90200073 LDS R2,_temp1
05B4 92200074 STS _temp,R2
(0443) temp>>=4;
05B6 2D82 MOV R24,R2
05B7 9582 SWAP R24
05B8 708F ANDI R24,0xF
05B9 93800074 STS _temp,R24
(0444) temp&=0x0f;
05BB 708F ANDI R24,0xF
05BC 93800074 STS _temp,R24
(0445) delay_ms(temp*129);//根據SOUNDTABLE中數據的高四位*5后,為音調持續時間
05BE 2F28 MOV R18,R24
05BF 2733 CLR R19
05C0 E801 LDI R16,0x81
05C1 E010 LDI R17,0
05C2 D33E RCALL mpy16s
05C3 DC1F RCALL _delay_ms
(0446) TIMSK&=~(1<<TOIE1);
05C4 B789 IN R24,P39
05C5 7F8B ANDI R24,0xFB
05C6 BF89 OUT P39,R24
(0447) sound_add++;
05C7 91800060 LDS R24,0x60
05C9 91900061 LDS R25,0x61
05CB 9601 ADIW R24,1
05CC 93900061 STS 0x61,R25
05CE 93800060 STS 0x60,R24
(0448) temp1=EEPROMread((int)&sound[sound_add]);
05D0 E081 LDI R24,1
05D1 E090 LDI R25,0
05D2 91000060 LDS R16,0x60
05D4 91100061 LDS R17,0x61
05D6 0F08 ADD R16,R24
05D7 1F19 ADC R17,R25
05D8 D33C RCALL _EEPROMread
05D9 93000073 STS _temp1,R16
05DB 90200073 LDS R2,_temp1
05DD 2022 TST R2
05DE F009 BEQ 0x05E0
05DF CFAC RJMP 0x058C
(0449) }
(0450) delay_ms(1000);
05E0 EE08 LDI R16,0xE8
05E1 E013 LDI R17,3
(0451) }
05E2 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:
05E3 DBE8 RCALL _port_init
(0467) PORTA = 0xa5;//1010,0101
05E4 EA85 LDI R24,0xA5
05E5 BB8B OUT P1B,R24
(0468) delay_ms(1000);
05E6 EE08 LDI R16,0xE8
05E7 E013 LDI R17,3
05E8 DBFA RCALL _delay_ms
(0469) work_status = 0x20;//置對應的工作狀態標志
05E9 E280 LDI R24,0x20
05EA 9380007D STS _work_status,R24
(0470)
(0471)
(0472) gzsl=0x88;timers=0;t0_times=0;
05EC E888 LDI R24,0x88
05ED 93800067 STS _gzsl,R24
05EF 2422 CLR R2
05F0 9220006D STS _timers,R2
05F2 92200066 STS _t0_times,R2
(0473) CLI(); //disable all interrupts
05F4 94F8 BCLR 7
(0474) timer0_init();
05F5 DD03 RCALL _timer0_init
(0475)
(0476) MCUCR = 0x00;
05F6 2422 CLR R2
05F7 BE25 OUT P35,R2
(0477) GIMSK = 0x00;
05F8 BE2B OUT P3B,R2
(0478) TIMSK|=(1<<TOIE0);
05F9 B789 IN R24,P39
05FA 6081 ORI R24,1
05FB BF89 OUT P39,R24
(0479) SEI(); //re-enable interrupts
05FC 9478 BSET 7
(0480)
(0481) mic_startup();//等待聲控啟動函數
05FD DC75 RCALL _mic_startup
(0482)
(0483) gzsl=0x44;t0_times=0;
05FE E484 LDI R24,0x44
05FF 93800067 STS _gzsl,R24
0601 2422 CLR R2
0602 92200066 STS _t0_times,R2
(0484) TCCR1A = 0x00;
0604 BC2F OUT P2F,R2
(0485) TCCR1B =(1<<CS11);//8分頻
0605 E082 LDI R24,2
0606 BD8E OUT P2E,R24
(0486) xuanya_car_rst:
(0487) temp=temp1 = 0;
0607 2422 CLR R2
0608 92200073 STS _temp1,R2
060A 92200074 STS _temp,R2
(0488) sound_add = 0;
060C 2433 CLR R3
060D 92300061 STS 0x61,R3
060F 92200060 STS 0x60,R2
0611 C044 RJMP 0x0656
(0489) while(temp1!=0)
(0490) {
(0491) temp=temp1;
0612 90200073 LDS R2,_temp1
0614 92200074 STS _temp,R2
(0492) temp&=0x0f;
0616 2D82 MOV R24,R2
0617 708F ANDI R24,0xF
0618 93800074 STS _temp,R24
(0493) if(temp!=0)
061A 2E28 MOV R2,R24
061B 2388 TST R24
061C F0D9 BEQ 0x0638
(0494) {
(0495) TIMSK|=(1<<TOIE1);//根據SOUNDTABLE中數據的低四位選擇音調頻率
061D B789 IN R24,P39
061E 6084 ORI R24,4
061F BF89 OUT P39,R24
(0496) temp--;
0620 2D82 MOV R24,R2
0621 5081 SUBI R24,1
0622 93800074 STS _temp,R24
(0497) toneconst=TONETABLE[temp];
0624 E282 LDI R24,0x22
0625 E090 LDI R25,0
0626 91000074 LDS R16,_temp
0628 2711 CLR R17
0629 0F00 LSL R16
062A 1F11 ROL R17
062B 0F08 ADD R16,R24
062C 1F19 ADC R17,R25
062D D297 RCALL lpm16
062E 93100078 STS _toneconst+1,R17
0630 93000077 STS _toneconst,R16
(0498) TCNT1=toneconst;
0632 2E20 MOV R2,R16
0633 2E31 MOV R3,R17
0634 9230004D STS 0x4D,R3
0636 9220004C STS 0x4C,R2
(0499) }
(0500) temp=temp1;
0638 90200073 LDS R2,_temp1
063A 92200074 STS _temp,R2
(0501) temp>>=4;
063C 2D82 MOV R24,R2
063D 9582 SWAP R24
063E 708F ANDI R24,0xF
063F 93800074 STS _temp,R24
(0502) temp&=0x0f;
0641 708F ANDI R24,0xF
0642 93800074 STS _temp,R24
(0503) delay_ms(temp*129);//根據SOUNDTABLE中數據的高四位*5后,為音調持續時間
0644 2F28 MOV R18,R24
0645 2733 CLR R19
0646 E801 LDI R16,0x81
0647 E010 LDI R17,0
0648 D2B8 RCALL mpy16s
0649 DB99 RCALL _delay_ms
(0504) TIMSK&=~(1<<TOIE1);
064A B789 IN R24,P39
064B 7F8B ANDI R24,0xFB
064C BF89 OUT P39,R24
(0505) sound_add++;
064D 91800060 LDS R24,0x60
064F 91900061 LDS R25,0x61
0651 9601 ADIW R24,1
0652 93900061 STS 0x61,R25
0654 93800060 STS 0x60,R24
0656 90200073 LDS R2,_temp1
0658 2022 TST R2
0659 F009 BEQ 0x065B
065A CFB7 RJMP 0x0612
(0506) }
(0507) goto xuanya_car_rst;
065B CFAB RJMP 0x0607
065C 9508 RET
(0508) }
(0509)
(0510) void remote_car()
(0511) {//遙控車程序
(0512)
(0513) port_init();//調用端口初始化函數
_remote_car:
065D DB6E RCALL _port_init
(0514)
(0515) work_status = 0x60;//置對應的工作狀態標志
065E E680 LDI R24,0x60
065F 9380007D STS _work_status,R24
(0516)
(0517) remote_rst:
(0518) PORTA = 0x0F;
0661 E08F LDI R24,0xF
0662 BB8B OUT P1B,R24
(0519) delay_ms(1000);
0663 EE08 LDI R16,0xE8
0664 E013 LDI R17,3
0665 DB7D RCALL _delay_ms
(0520)
(0521) gzsl=0x88;timers=0;t0_times=0;
0666 E888 LDI R24,0x88
0667 93800067 STS _gzsl,R24
0669 2422 CLR R2
066A 9220006D STS _timers,R2
066C 92200066 STS _t0_times,R2
(0522) CLI(); //disable all interrupts
066E 94F8 BCLR 7
(0523) timer0_init();
066F DC89 RCALL _timer0_init
(0524)
(0525) MCUCR = 0x00;
0670 2422 CLR R2
0671 BE25 OUT P35,R2
(0526) GIMSK = 0x00;
0672 BE2B OUT P3B,R2
(0527) TIMSK|=(1<<TOIE0);
0673 B789 IN R24,P39
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -