📄 music.lis
字号:
003A 8991 ld R24,y+
003C 8FBF out 0x3f,R24
003E 9991 ld R25,y+
0040 8991 ld R24,y+
0042 .dbline 0 ; func end
0042 1895 reti
0044 .dbend
0044 .dbfunc e timer1 _timer1 fV
.even
0044 _timer1::
0044 2A92 st -y,R2
0046 8A93 st -y,R24
0048 2FB6 in R2,0x3f
004A 2A92 st -y,R2
004C .dbline -1
004C .dbline 63
004C ; /**************************************************
004C ; T1中断程序,根据SOUND函数输出一定频率的方波
004C ; **************************************************/
004C ; void timer1(void)
004C ; {
004C .dbline 64
004C ; PORTC^=0x01;
004C 81E0 ldi R24,1
004E 25B2 in R2,0x15
0050 2826 eor R2,R24
0052 25BA out 0x15,R2
0054 .dbline -2
0054 .dbline 65
0054 ; }
0054 L3:
0054 2990 ld R2,y+
0056 2FBE out 0x3f,R2
0058 8991 ld R24,y+
005A 2990 ld R2,y+
005C .dbline 0 ; func end
005C 1895 reti
005E .dbend
005E .dbfunc e sound _sound fV
005E ; y -> R10,R11
005E ; x -> R12,R13
.even
005E _sound::
005E 0E940000 xcall push_gset4
0062 5901 movw R10,R18
0064 6801 movw R12,R16
0066 .dbline -1
0066 .dbline 72
0066 ; /*****************************************************
0066 ; SOUND程序,输出频率为 x HZ的方波,延时 y MS
0066 ; x:100~20000 HZ, 0表示不发声
0066 ; y:0~65536 MS
0066 ; *****************************************************/
0066 ; void sound(unsigned int x,unsigned int y)
0066 ; {
0066 .dbline 73
0066 ; SEI();
0066 7894 sei
0068 .dbline 74
0068 ; delay=0;
0068 2224 clr R2
006A 3324 clr R3
006C 30920100 sts _delay+1,R3
0070 20920000 sts _delay,R2
0074 .dbline 75
0074 ; if (x!=0)
0074 CC20 tst R12
0076 11F4 brne X0
0078 DD20 tst R13
007A 21F1 breq L5
007C X0:
007C .dbline 76
007C ; {
007C .dbline 77
007C ; x=4000000/x;
007C 1601 movw R2,R12
007E 4424 clr R4
0080 5524 clr R5
0082 40E0 ldi R20,0
0084 59E0 ldi R21,9
0086 6DE3 ldi R22,61
0088 70E0 ldi R23,0
008A 5A92 st -y,R5
008C 4A92 st -y,R4
008E 3A92 st -y,R3
0090 2A92 st -y,R2
0092 8A01 movw R16,R20
0094 9B01 movw R18,R22
0096 0E940000 xcall div32s
009A 6801 movw R12,R16
009C .dbline 78
009C ; OCR1A=x;
009C 1BBD out 0x2b,R17
009E 0ABD out 0x2a,R16
00A0 .dbline 79
00A0 ; TCNT1=0x00;
00A0 2224 clr R2
00A2 3324 clr R3
00A4 3DBC out 0x2d,R3
00A6 2CBC out 0x2c,R2
00A8 .dbline 80
00A8 ; TIMSK|=(1<<OCIE1A);
00A8 89B7 in R24,0x39
00AA 8061 ori R24,16
00AC 89BF out 0x39,R24
00AE L7:
00AE .dbline 82
00AE L8:
00AE .dbline 81
00AE ; while(delay<y)
00AE 20900000 lds R2,_delay
00B2 30900100 lds R3,_delay+1
00B6 2A14 cp R2,R10
00B8 3B04 cpc R3,R11
00BA C8F3 brlo L7
00BC .dbline 83
00BC ; ;
00BC ; TIMSK&=~(1<<OCIE1A);
00BC 89B7 in R24,0x39
00BE 8F7E andi R24,239
00C0 89BF out 0x39,R24
00C2 .dbline 84
00C2 ; }
00C2 0AC0 xjmp L6
00C4 L5:
00C4 .dbline 86
00C4 ; else
00C4 ; {
00C4 .dbline 87
00C4 ; TIMSK&=~(1<<OCIE1A);
00C4 89B7 in R24,0x39
00C6 8F7E andi R24,239
00C8 89BF out 0x39,R24
00CA L10:
00CA .dbline 89
00CA L11:
00CA .dbline 88
00CA ; while(delay<y)
00CA 20900000 lds R2,_delay
00CE 30900100 lds R3,_delay+1
00D2 2A14 cp R2,R10
00D4 3B04 cpc R3,R11
00D6 C8F3 brlo L10
00D8 .dbline 90
00D8 ; ;
00D8 ; }
00D8 L6:
00D8 .dbline 91
00D8 ; CLI();
00D8 F894 cli
00DA .dbline -2
00DA .dbline 93
00DA ;
00DA ; }
00DA L4:
00DA 0E940000 xcall pop_gset4
00DE .dbline 0 ; func end
00DE 0895 ret
00E0 .dbsym r y 10 i
00E0 .dbsym r x 12 i
00E0 .dbend
00E0 .dbfunc e main _main fV
00E0 ; i -> R20
.even
00E0 _main::
00E0 .dbline -1
00E0 .dbline 98
00E0 ; /*******************************
00E0 ; 主程序
00E0 ; *******************************/
00E0 ; void main(void)
00E0 ; {
00E0 .dbline 99
00E0 ; unsigned char i=0;
00E0 4427 clr R20
00E2 .dbline 100
00E2 ; music_init();
00E2 8EDF xcall _music_init
00E4 21C0 xjmp L15
00E6 X1:
00E6 .dbline 102
00E6 ; while(1)
00E6 ; {
00E6 L17:
00E6 .dbline 104
00E6 .dbline 105
00E6 84E0 ldi R24,4
00E8 849F mul R24,R20
00EA 1001 movw R2,R0
00EC 80E0 ldi R24,<_music_data+2
00EE 90E0 ldi R25,>_music_data+2
00F0 F101 movw R30,R2
00F2 E80F add R30,R24
00F4 F91F adc R31,R25
00F6 2591 lpm R18,Z+
00F8 3491 lpm R19,Z
00FA 80E0 ldi R24,<_music_data
00FC 90E0 ldi R25,>_music_data
00FE F101 movw R30,R2
0100 E80F add R30,R24
0102 F91F adc R31,R25
0104 0591 lpm R16,Z+
0106 1491 lpm R17,Z
0108 AADF xcall _sound
010A .dbline 106
010A 4395 inc R20
010C .dbline 107
010C L18:
010C .dbline 103
010C 84E0 ldi R24,4
010E 849F mul R24,R20
0110 F001 movw R30,R0
0112 80E0 ldi R24,<_music_data+2
0114 90E0 ldi R25,>_music_data+2
0116 E80F add R30,R24
0118 F91F adc R31,R25
011A 0590 lpm R0,Z+
011C 1490 lpm R1,Z
011E F001 movw R30,R0
0120 E030 cpi R30,0
0122 EF07 cpc R30,R31
0124 01F7 brne L17
0126 X2:
0126 .dbline 108
0126 4427 clr R20
0128 .dbline 109
0128 L15:
0128 .dbline 101
0128 F1CF xjmp L18
012A X3:
012A .dbline -2
012A .dbline 110
012A ; while(music_data[i][1]!=0)
012A ; {
012A ; sound(music_data[i][0],music_data[i][1]);
012A ; i++;
012A ; }
012A ; i=0;
012A ; }
012A ; }
012A L13:
012A .dbline 0 ; func end
012A 0895 ret
012C .dbsym r i 20 c
012C .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -