📄 9.lis
字号:
0034 ; unsigned int toneconst;
0034 ; #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
0034 ; void timer1_ovf_isr(void)
0034 ; {
0034 .dbline 108
0034 ; TCNT1=toneconst;
0034 20900000 lds R2,_toneconst
0038 30900100 lds R3,_toneconst+1
003C 30928500 sts 132+1,R3
0040 20928400 sts 132,R2
0044 .dbline 109
0044 ; PORTD^=8;
0044 88E0 ldi R24,8
0046 2BB0 in R2,0xb
0048 2826 eor R2,R24
004A 2BB8 out 0xb,R2
004C .dbline -2
004C L9:
004C 2990 ld R2,y+
004E 2FBE out 0x3f,R2
0050 8991 ld R24,y+
0052 3990 ld R3,y+
0054 2990 ld R2,y+
0056 .dbline 0 ; func end
0056 1895 reti
0058 .dbend
0058 .dbfunc e music _music fV
0058 ; sound_add -> R20,R21
0058 ; temp1 -> R22
0058 ; temp -> R10
.even
0058 _music::
0058 00D0 rcall push_gset3
005A .dbline -1
005A .dbline 112
005A ; }
005A ; void music(void)
005A ; {
005A .dbline 114
005A ; unsigned char temp,temp1;
005A ; unsigned int sound_add=0;
005A 4427 clr R20
005C 5527 clr R21
005E .dbline 115
005E ; TCCR1A = 0x00;
005E 2224 clr R2
0060 20928000 sts 128,R2
0064 .dbline 116
0064 ; TCCR1B =(1<<CS11);//8分频
0064 82E0 ldi R24,2
0066 80938100 sts 129,R24
006A .dbline 117
006A ; temp1 = sound[sound_add];
006A 80E0 ldi R24,<_sound
006C 90E0 ldi R25,>_sound
006E FA01 movw R30,R20
0070 E80F add R30,R24
0072 F91F adc R31,R25
0074 6491 lpm R22,Z
0076 36C0 rjmp L12
0078 L11:
0078 .dbline 119
0078 ; while(temp1!=0)
0078 ; {
0078 .dbline 120
0078 ; temp=temp1;
0078 A62E mov R10,R22
007A .dbline 121
007A ; temp&=0x0f;
007A 8A2D mov R24,R10
007C 8F70 andi R24,15
007E A82E mov R10,R24
0080 .dbline 122
0080 ; if(temp!=0)
0080 8823 tst R24
0082 C9F0 breq L14
0084 .dbline 123
0084 ; {
0084 .dbline 124
0084 ; TIMSK1|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
0084 80916F00 lds R24,111
0088 8160 ori R24,1
008A 80936F00 sts 111,R24
008E .dbline 125
008E ; temp--;
008E AA94 dec R10
0090 .dbline 126
0090 ; toneconst=TONETABLE[temp];
0090 82E0 ldi R24,2
0092 8A9D mul R24,R10
0094 F001 movw R30,R0
0096 80E0 ldi R24,<_TONETABLE
0098 90E0 ldi R25,>_TONETABLE
009A E80F add R30,R24
009C F91F adc R31,R25
009E 0590 lpm R0,Z+
00A0 1490 lpm R1,Z
00A2 F001 movw R30,R0
00A4 F0930100 sts _toneconst+1,R31
00A8 E0930000 sts _toneconst,R30
00AC .dbline 127
00AC ; TCNT1=toneconst;
00AC 1F01 movw R2,R30
00AE 30928500 sts 132+1,R3
00B2 20928400 sts 132,R2
00B6 .dbline 128
00B6 ; }
00B6 L14:
00B6 .dbline 129
00B6 A62E mov R10,R22
00B8 .dbline 130
00B8 8A2D mov R24,R10
00BA 8295 swap R24
00BC 8F70 andi R24,#0x0F
00BE .dbline 131
00BE 8F70 andi R24,15
00C0 A82E mov R10,R24
00C2 .dbline 132
00C2 81E8 ldi R24,129
00C4 8A9D mul R24,R10
00C6 8001 movw R16,R0
00C8 A3DF rcall _delay_ms
00CA .dbline 133
00CA 80916F00 lds R24,111
00CE 8E7F andi R24,254
00D0 80936F00 sts 111,R24
00D4 .dbline 134
00D4 4F5F subi R20,255 ; offset = 1
00D6 5F4F sbci R21,255
00D8 .dbline 135
00D8 80E0 ldi R24,<_sound
00DA 90E0 ldi R25,>_sound
00DC FA01 movw R30,R20
00DE E80F add R30,R24
00E0 F91F adc R31,R25
00E2 6491 lpm R22,Z
00E4 .dbline 136
00E4 L12:
00E4 .dbline 118
00E4 6623 tst R22
00E6 09F0 breq X1
00E8 C7CF rjmp L11
00EA X1:
00EA .dbline 137
00EA ; temp=temp1;
00EA ; temp>>=4;
00EA ; temp&=0x0f;
00EA ; delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
00EA ; TIMSK1&=~(1<<TOIE1);
00EA ; sound_add++;
00EA ; temp1 = sound[sound_add];
00EA ; }
00EA ; delay_ms(1000);
00EA 08EE ldi R16,1000
00EC 13E0 ldi R17,3
00EE 90DF rcall _delay_ms
00F0 .dbline -2
00F0 L10:
00F0 00D0 rcall pop_gset3
00F2 .dbline 0 ; func end
00F2 0895 ret
00F4 .dbsym r sound_add 20 i
00F4 .dbsym r temp1 22 c
00F4 .dbsym r temp 10 c
00F4 .dbend
00F4 .dbfunc e mic_startup _mic_startup fV
00F4 ; mic_in -> R16
.even
00F4 _mic_startup::
00F4 .dbline -1
00F4 .dbline 141
00F4 ; }
00F4 ;
00F4 ; void mic_startup()
00F4 ; {//声控启动程序运行
00F4 04C0 rjmp L18
00F6 L17:
00F6 .dbline 144
00F6 ; unsigned char mic_in;
00F6 ; while(1)
00F6 ; { //无键按下等待
00F6 .dbline 145
00F6 ; mic_in=PINC & 0x20; //pc5=0
00F6 06B1 in R16,0x6
00F8 0072 andi R16,32
00FA .dbline 146
00FA ; if(mic_in==0){break;}
00FA 09F4 brne L20
00FC .dbline 146
00FC .dbline 146
00FC 01C0 rjmp L19
00FE L20:
00FE .dbline 147
00FE L18:
00FE .dbline 143
00FE FBCF rjmp L17
0100 L19:
0100 .dbline -2
0100 L16:
0100 .dbline 0 ; func end
0100 0895 ret
0102 .dbsym r mic_in 16 c
0102 .dbend
0102 .dbfunc e main _main fV
0102 ; i -> <dead>
.even
0102 _main::
0102 .dbline -1
0102 .dbline 152
0102 ; }//有键按下运行下面的程序
0102 ; }
0102 ;
0102 ; /* 主程序 */
0102 ; void main(void)
0102 ; {
0102 .dbline 154
0102 ; unsigned char i;
0102 ; DDRC=0x00;
0102 2224 clr R2
0104 27B8 out 0x7,R2
0106 .dbline 155
0106 ; PORTC=0xff;
0106 8FEF ldi R24,255
0108 88B9 out 0x8,R24
010A .dbline 156
010A ; DDRD=0xfb;
010A 8BEF ldi R24,251
010C 8AB9 out 0xa,R24
010E .dbline 157
010E ; PORTD=0xff;
010E 8FEF ldi R24,255
0110 8BB9 out 0xb,R24
0112 .dbline 158
0112 ; SEI();
0112 7894 sei
0114 .dbline 160
0114 ; //等待声控启动
0114 ; mic_startup();
0114 EFDF rcall _mic_startup
0116 01C0 rjmp L24
0118 L23:
0118 .dbline 163
0118 .dbline 164
0118 9FDF rcall _music
011A .dbline 165
011A L24:
011A .dbline 162
011A FECF rjmp L23
011C X2:
011C .dbline -2
011C L22:
011C .dbline 0 ; func end
011C 0895 ret
011E .dbsym l i 1 c
011E .dbend
.area bss(ram, con, rel)
0000 .dbfile D:\xij\demo\demo_diy02-8a\1\C语言\02-8A-9\9.c
0000 _toneconst::
0000 .blkb 2
0002 .dbsym e toneconst _toneconst i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -