⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 music.lst

📁 利用单片机编写的音乐程序。音乐为俄罗斯歌曲《喀秋莎》。
💻 LST
字号:
__text_start:
__start:
    0082 E5CF      LDI	R28,0x5F
    0083 E0D2      LDI	R29,2
    0084 BFCD      OUT	P3D,R28
    0085 BFDE      OUT	P3E,R29
    0086 51C0      SUBI	R28,0x10
    0087 40D0      SBCI	R29,0
    0088 EA0A      LDI	R16,0xAA
    0089 8308      STD	R16,0+Y
    008A 2400      CLR	R0
    008B E6E2      LDI	R30,0x62
    008C E0F0      LDI	R31,0
    008D E010      LDI	R17,0
    008E 36E2      CPI	R30,0x62
    008F 07F1      CPC	R31,R17
    0090 F011      BEQ	0x0093
    0091 9201      ST	R0,Z+
    0092 CFFB      RJMP	0x008E
    0093 8300      STD	R16,0+Z
    0094 E0E2      LDI	R30,2
    0095 E0F1      LDI	R31,1
    0096 E6A0      LDI	R26,0x60
    0097 E0B0      LDI	R27,0
    0098 E011      LDI	R17,1
    0099 30E4      CPI	R30,4
    009A 07F1      CPC	R31,R17
    009B F021      BEQ	0x00A0
    009C 95C8      LPM
    009D 9631      ADIW	R30,1
    009E 920D      ST	R0,X+
    009F CFF9      RJMP	0x0099
    00A0 D078      RCALL	_main
_exit:
    00A1 CFFF      RJMP	_exit
FILE: D:\ICC-AVR\examples.sl\music\sound.c
(0001) /**********************************************
(0002)              http://www.sl.com.cn
(0003)       双龙电子公司----电脑音乐演示程序(ICCAVR)
(0004) 	             作者:詹卫前
(0005) 		  1、学习定时器T0溢出中断的使用
(0006) 		  2、学习定时器T1比较中断的使用
(0007) 		  3、学习电脑音乐的产生
(0008) **********************************************/
(0009) #include <io8515.h>
(0010) #include <macros.h>
(0011) #pragma interrupt_handler timer0:IT_TIMER0_OVF
(0012) #pragma interrupt_handler timer1:IT_TIMER1_COMPA
(0013) const unsigned int music_data[][2]=
(0014) /*******************************************
(0015)        卡秋莎音乐数据{x,y}
(0016) 	   x:对应音符音阶(频率),0表示休止符
(0017) 	   y:对应音符节拍
(0018) ********************************************/
(0019) {
(0020) {440,600} ,{494,200} ,{523,600} ,{440,200},
(0021) {523,400} ,{494,200} ,{440,200} ,{494,400},
(0022) {330,400} ,{494,600} ,{523,200} ,{578,600},
(0023) {494,200} ,{578,400} ,{523,200} ,{494,200},
(0024) {440,800} ,{659,400} ,{880,400} ,{784,400},
(0025) {880,200} ,{784,200} ,{698,400} ,{659,200},
(0026) {578,200} ,{659,400} ,{440,400} ,{  0,200},//休止符
(0027) {698,400} ,{578,200} ,{659,600} ,{523,200},
(0028) {494,200} ,{330,200} ,{523,200} ,{494,200},
(0029) {440,800} ,{659,400} ,{880,400} ,{784,400},
(0030) {880,200} ,{784,200} ,{698,400} ,{659,200},
(0031) {578,200} ,{659,400} ,{440,400} ,{  0,200},//休止符
(0032) {698,400} ,{578,200}, {659,600} ,{523,200},
(0033) {494,200} ,{330,200}, {523,200} ,{494,200},
(0034) {440,800} ,
(0035) {0,0}};
(0036) #pragma data:data
(0037) unsigned int delay=0;
(0038) /*******************************
(0039)        MCU初始化
(0040) *******************************/
(0041) void music_init(void)
(0042)  {
(0043)   MCUCR=0x00;
_music_init:
    00A2 2422      CLR	R2
    00A3 BE25      OUT	P35,R2
(0044)   DDRC=0x01;
    00A4 E081      LDI	R24,1
    00A5 BB84      OUT	P14,R24
(0045)   TCCR1A=0x00;
    00A6 BC2F      OUT	P2F,R2
(0046)   TCCR1B=0x09;
    00A7 E089      LDI	R24,0x9
    00A8 BD8E      OUT	P2E,R24
(0047)   TCCR0=0x03;
    00A9 E083      LDI	R24,3
    00AA BF83      OUT	P33,R24
(0048)   TCNT0=0x19;
    00AB E189      LDI	R24,0x19
    00AC BF82      OUT	P32,R24
(0049)   TIMSK=(1<<OCIE1A)|(1<<TOIE0);
    00AD E482      LDI	R24,0x42
    00AE BF89      OUT	P39,R24
(0050)   }
    00AF 9508      RET
_timer0:
    00B0 938A      ST	R24,-Y
    00B1 939A      ST	R25,-Y
    00B2 B78F      IN	R24,P3F
    00B3 938A      ST	R24,-Y
(0051) /**************************************************
(0052)       T0中断程序,产生音乐节拍
(0053) **************************************************/  
(0054) void timer0(void) 
(0055)     {
(0056)      delay++;
    00B4 91800060  LDS	R24,0x60
    00B6 91900061  LDS	R25,0x61
    00B8 9601      ADIW	R24,1
    00B9 93900061  STS	R25,0x61
    00BB 93800060  STS	R24,0x60
(0057)      TCNT0=0x19;
    00BD E189      LDI	R24,0x19
    00BE BF82      OUT	P32,R24
(0058)     }
    00BF 9189      LD	R24,Y+
    00C0 BF8F      OUT	P3F,R24
    00C1 9199      LD	R25,Y+
    00C2 9189      LD	R24,Y+
    00C3 9518      RETI
_timer1:
    00C4 922A      ST	R2,-Y
    00C5 938A      ST	R24,-Y
    00C6 B62F      IN	R2,P3F
    00C7 922A      ST	R2,-Y
(0059) /**************************************************
(0060)       T1中断程序,根据SOUND函数输出一定频率的方波
(0061) **************************************************/  
(0062) void timer1(void) 
(0063)     {
(0064)      PORTC^=0x01;
    00C8 E081      LDI	R24,1
    00C9 B225      IN	R2,P15
    00CA 2628      EOR	R2,R24
    00CB BA25      OUT	P15,R2
(0065)     }
    00CC 9029      LD	R2,Y+
    00CD BE2F      OUT	P3F,R2
    00CE 9189      LD	R24,Y+
    00CF 9029      LD	R2,Y+
    00D0 9518      RETI
_sound:
  y                    --> R10
  x                    --> R12
    00D1 D090      RCALL	push_gset4
    00D2 2EA2      MOV	R10,R18
    00D3 2EB3      MOV	R11,R19
    00D4 2EC0      MOV	R12,R16
    00D5 2ED1      MOV	R13,R17
(0066) /*****************************************************
(0067)       SOUND程序,输出频率为 x HZ的方波,延时 y MS
(0068)        x:100~20000 HZ, 0表示不发声
(0069)        y:0~65536 MS
(0070) *****************************************************/     
(0071) void sound(unsigned int x,unsigned int y)
(0072)     {
(0073)        SEI(); 
    00D6 9478      BSET	7
(0074)        delay=0; 
    00D7 2422      CLR	R2
    00D8 2433      CLR	R3
    00D9 92300061  STS	R3,0x61
    00DB 92200060  STS	R2,0x60
(0075)        if (x!=0)
    00DD 20CC      TST	R12
    00DE F411      BNE	0x00E1
    00DF 20DD      TST	R13
    00E0 F159      BEQ	0x010C
(0076)         {         
(0077)          x=4000000/x; 
    00E1 2C2C      MOV	R2,R12
    00E2 2C3D      MOV	R3,R13
    00E3 2444      CLR	R4
    00E4 2455      CLR	R5
    00E5 E040      LDI	R20,0
    00E6 E059      LDI	R21,0x9
    00E7 E36D      LDI	R22,0x3D
    00E8 E070      LDI	R23,0
    00E9 925A      ST	R5,-Y
    00EA 924A      ST	R4,-Y
    00EB 923A      ST	R3,-Y
    00EC 922A      ST	R2,-Y
    00ED 2F04      MOV	R16,R20
    00EE 2F15      MOV	R17,R21
    00EF 2F26      MOV	R18,R22
    00F0 2F37      MOV	R19,R23
    00F1 D0BF      RCALL	div32s
    00F2 2EC0      MOV	R12,R16
    00F3 2ED1      MOV	R13,R17
(0078)          OCR1A=x;   
    00F4 92D0004B  STS	R13,0x4B
    00F6 92C0004A  STS	R12,0x4A
(0079)          TCNT1=0x00;
    00F8 2422      CLR	R2
    00F9 2433      CLR	R3
    00FA 9230004D  STS	R3,0x4D
    00FC 9220004C  STS	R2,0x4C
(0080)          TIMSK|=(1<<OCIE1A);
    00FE B789      IN	R24,P39
    00FF 6480      ORI	R24,0x40
    0100 BF89      OUT	P39,R24
(0081)           while(delay<y)
(0082)           ;
    0101 90200060  LDS	R2,0x60
    0103 90300061  LDS	R3,0x61
    0105 142A      CP	R2,R10
    0106 043B      CPC	R3,R11
    0107 F3C8      BCS	0x0101
(0083)           TIMSK&=~(1<<OCIE1A);      
    0108 B789      IN	R24,P39
    0109 7B8F      ANDI	R24,0xBF
    010A BF89      OUT	P39,R24
(0084)          }
    010B C00A      RJMP	0x0116
(0085)       else
(0086)          {
(0087)           TIMSK&=~(1<<OCIE1A);
    010C B789      IN	R24,P39
    010D 7B8F      ANDI	R24,0xBF
    010E BF89      OUT	P39,R24
(0088)           while(delay<y)
(0089)           ;
    010F 90200060  LDS	R2,0x60
    0111 90300061  LDS	R3,0x61
    0113 142A      CP	R2,R10
    0114 043B      CPC	R3,R11
    0115 F3C8      BCS	0x010F
(0090)           }
(0091)       CLI(); 
    0116 94F8      BCLR	7
(0092)              
(0093)     }
    0117 D04D      RCALL	pop_gset4
    0118 9508      RET
(0094) /*******************************
(0095)           主程序
(0096) *******************************/  
(0097) void main(void)
(0098)   {
(0099)    unsigned char i=0;
_main:
  i                    --> R20
    0119 2744      CLR	R20
(0100)    music_init();  
    011A DF87      RCALL	_music_init
    011B C027      RJMP	0x0143
(0101)    while(1)
(0102)       { 
(0103)        while(music_data[i][1]!=0)
(0104)            {
(0105)             sound(music_data[i][0],music_data[i][1]);
    011C 2E24      MOV	R2,R20
    011D 2433      CLR	R3
    011E 0C22      LSL	R2
    011F 1C33      ROL	R3
    0120 0C22      LSL	R2
    0121 1C33      ROL	R3
    0122 E18C      LDI	R24,0x1C
    0123 E090      LDI	R25,0
    0124 2D02      MOV	R16,R2
    0125 2D13      MOV	R17,R3
    0126 0F08      ADD	R16,R24
    0127 1F19      ADC	R17,R25
    0128 D03E      RCALL	lpm16
    0129 2F20      MOV	R18,R16
    012A 2F31      MOV	R19,R17
    012B E18A      LDI	R24,0x1A
    012C E090      LDI	R25,0
    012D 2D02      MOV	R16,R2
    012E 2D13      MOV	R17,R3
    012F 0F08      ADD	R16,R24
    0130 1F19      ADC	R17,R25
    0131 D035      RCALL	lpm16
    0132 DF9E      RCALL	_sound
(0106)             i++;
    0133 9543      INC	R20
(0107)             }
    0134 E18C      LDI	R24,0x1C
    0135 E090      LDI	R25,0
    0136 2F04      MOV	R16,R20
    0137 2711      CLR	R17
    0138 0F00      LSL	R16
    0139 1F11      ROL	R17
    013A 0F00      LSL	R16
    013B 1F11      ROL	R17
    013C 0F08      ADD	R16,R24
    013D 1F19      ADC	R17,R25
    013E D028      RCALL	lpm16
    013F 3000      CPI	R16,0
    0140 0701      CPC	R16,R17
    0141 F6D1      BNE	0x011C
(0108)        i=0;     
    0142 2744      CLR	R20
(0109)        }
    0143 CFF0      RJMP	0x0134
(0110)    }FILE: <library>
    0144 9508      RET
push_gset1:
    0145 935A      ST	R21,-Y
    0146 934A      ST	R20,-Y
    0147 9508      RET
pop_gset1:
    0148 E0E1      LDI	R30,1
pop:
    0149 9149      LD	R20,Y+
    014A 9159      LD	R21,Y+
    014B FDE0      SBRC	R30,0
    014C 9508      RET
    014D 9169      LD	R22,Y+
    014E 9179      LD	R23,Y+
    014F FDE1      SBRC	R30,1
    0150 9508      RET
    0151 90A9      LD	R10,Y+
    0152 90B9      LD	R11,Y+
    0153 FDE2      SBRC	R30,2
    0154 9508      RET
    0155 90C9      LD	R12,Y+
    0156 90D9      LD	R13,Y+
    0157 FDE3      SBRC	R30,3
    0158 9508      RET
    0159 90E9      LD	R14,Y+
    015A 90F9      LD	R15,Y+
    015B 9508      RET
push_gset2:
    015C 937A      ST	R23,-Y
    015D 936A      ST	R22,-Y
    015E CFE6      RJMP	push_gset1
push_gset3:
    015F 92BA      ST	R11,-Y
    0160 92AA      ST	R10,-Y
    0161 CFFA      RJMP	push_gset2
push_gset4:
    0162 92DA      ST	R13,-Y
    0163 92CA      ST	R12,-Y
    0164 CFFA      RJMP	push_gset3
pop_gset4:
    0165 E0E8      LDI	R30,0x8
    0166 CFE2      RJMP	pop
lpm16:
    0167 93EA      ST	R30,-Y
    0168 93FA      ST	R31,-Y
    0169 920A      ST	R0,-Y
    016A 2FE0      MOV	R30,R16
    016B 2FF1      MOV	R31,R17
    016C 95C8      LPM
    016D 2D00      MOV	R16,R0
    016E 9631      ADIW	R30,1
    016F 95C8      LPM
    0170 2D10      MOV	R17,R0
    0171 9009      LD	R0,Y+
    0172 91F9      LD	R31,Y+
    0173 91E9      LD	R30,Y+
    0174 9508      RET
neg32:
    0175 9500      COM	R16
    0176 9510      COM	R17
    0177 9520      COM	R18
    0178 9530      COM	R19
    0179 5F0F      SUBI	R16,0xFF
    017A 4F1F      SBCI	R17,0xFF
    017B 4F2F      SBCI	R18,0xFF
    017C 4F3F      SBCI	R19,0xFF
    017D 9508      RET
long_prolog:
    017E 928A      ST	R8,-Y
    017F 929A      ST	R9,-Y
    0180 92AA      ST	R10,-Y
    0181 92BA      ST	R11,-Y
    0182 93EA      ST	R30,-Y
    0183 938A      ST	R24,-Y
    0184 939A      ST	R25,-Y
    0185 93AA      ST	R26,-Y
    0186 93BA      ST	R27,-Y
    0187 8589      LDD	R24,9+Y
    0188 859A      LDD	R25,10+Y
    0189 85AB      LDD	R26,11+Y
    018A 85BC      LDD	R27,12+Y
    018B 9508      RET
long_epilog:
    018C 91B9      LD	R27,Y+
    018D 91A9      LD	R26,Y+
    018E 9199      LD	R25,Y+
    018F 9189      LD	R24,Y+
    0190 91E9      LD	R30,Y+
    0191 90B9      LD	R11,Y+
    0192 90A9      LD	R10,Y+
    0193 9099      LD	R9,Y+
    0194 9089      LD	R8,Y+
    0195 9624      ADIW	R28,4
    0196 9508      RET
tstzero1:
    0197 27EE      CLR	R30
    0198 2BE0      OR	R30,R16
    0199 2BE1      OR	R30,R17
    019A 2BE2      OR	R30,R18
    019B 2BE3      OR	R30,R19
    019C 9508      RET
tstzero2:
    019D 27EE      CLR	R30
    019E 2BE8      OR	R30,R24
    019F 2BE9      OR	R30,R25
    01A0 2BEA      OR	R30,R26
    01A1 2BEB      OR	R30,R27
    01A2 9508      RET
NEGMANT2:
    01A3 9580      COM	R24
    01A4 9590      COM	R25
    01A5 95A0      COM	R26
    01A6 95B0      COM	R27
    01A7 5F8F      SUBI	R24,0xFF
    01A8 4F9F      SBCI	R25,0xFF
    01A9 4FAF      SBCI	R26,0xFF
    01AA 4FBF      SBCI	R27,0xFF
    01AB 9508      RET
    01AC 2D08      MOV	R16,R8
    01AD 2D19      MOV	R17,R9
    01AE 2D2A      MOV	R18,R10
    01AF 2D3B      MOV	R19,R11
    01B0 9508      RET
div32s:
    01B1 DFCC      RCALL	long_prolog
    01B2 D00C      RCALL	0x01BF
    01B3 CFD8      RJMP	long_epilog
div32u:
    01B4 DFC9      RCALL	long_prolog
    01B5 D014      RCALL	UDIV
    01B6 CFD5      RJMP	long_epilog
mod32s:
    01B7 DFC6      RCALL	long_prolog
    01B8 D006      RCALL	0x01BF
    01B9 DFF2      RCALL	0x01AC
    01BA CFD1      RJMP	long_epilog
mod32u:
    01BB DFC2      RCALL	long_prolog
    01BC D00D      RCALL	UDIV
    01BD DFEE      RCALL	0x01AC
    01BE CFCD      RJMP	long_epilog
    01BF 2333      TST	R19
    01C0 F02A      BMI	0x01C6
    01C1 23BB      TST	R27
    01C2 F43A      BPL	0x01CA
    01C3 DFDF      RCALL	NEGMANT2
    01C4 D005      RCALL	UDIV
    01C5 CFAF      RJMP	neg32
    01C6 DFAE      RCALL	neg32
    01C7 23BB      TST	R27
    01C8 F7DA      BPL	0x01C4
    01C9 DFD9      RCALL	NEGMANT2
UDIV:
    01CA DFD2      RCALL	tstzero2
    01CB F0D9      BEQ	0x01E7
    01CC 2488      CLR	R8
    01CD 2499      CLR	R9
    01CE 24AA      CLR	R10
    01CF 24BB      CLR	R11
    01D0 DFC6      RCALL	tstzero1
    01D1 F0A9      BEQ	0x01E7
    01D2 E2E0      LDI	R30,0x20
    01D3 0F00      LSL	R16
    01D4 1F11      ROL	R17
    01D5 1F22      ROL	R18
    01D6 1F33      ROL	R19
    01D7 1C88      ROL	R8
    01D8 1C99      ROL	R9
    01D9 1CAA      ROL	R10
    01DA 1CBB      ROL	R11
    01DB 1688      CP	R8,R24
    01DC 0699      CPC	R9,R25
    01DD 06AA      CPC	R10,R26
    01DE 06BB      CPC	R11,R27
    01DF F028      BCS	0x01E5
    01E0 1A88      SUB	R8,R24
    01E1 0A99      SBC	R9,R25
    01E2 0AAA      SBC	R10,R26
    01E3 0ABB      SBC	R11,R27
    01E4 9503      INC	R16
    01E5 95EA      DEC	R30
    01E6 F761      BNE	0x01D3
    01E7 9508      RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -