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

📄 音乐.lst

📁 用AVR 音乐合成: 1.音乐数据存放于芯片的flash存贮器中2.PA口显示不同的音阶变化。 3.音乐数据的低四位选择音调频率
💻 LST
字号:
__text_start:
__start:
    0094 E5CF      LDI	R28,0x5F
    0095 E0D4      LDI	R29,4
    0096 BFCD      OUT	0x3D,R28
    0097 BFDE      OUT	0x3E,R29
    0098 51C0      SUBI	R28,0x10
    0099 40D0      SBCI	R29,0
    009A EA0A      LDI	R16,0xAA
    009B 8308      STD	Y+0,R16
    009C 2400      CLR	R0
    009D E6E0      LDI	R30,0x60
    009E E0F0      LDI	R31,0
    009F E010      LDI	R17,0
    00A0 36E2      CPI	R30,0x62
    00A1 07F1      CPC	R31,R17
    00A2 F011      BEQ	0x00A5
    00A3 9201      ST	R0,Z+
    00A4 CFFB      RJMP	0x00A0
    00A5 8300      STD	Z+0,R16
    00A6 E2E8      LDI	R30,0x28
    00A7 E0F1      LDI	R31,1
    00A8 E6A0      LDI	R26,0x60
    00A9 E0B0      LDI	R27,0
    00AA E011      LDI	R17,1
    00AB 32E8      CPI	R30,0x28
    00AC 07F1      CPC	R31,R17
    00AD F021      BEQ	0x00B2
    00AE 95C8      LPM
    00AF 9631      ADIW	R30,1
    00B0 920D      ST	R0,X+
    00B1 CFF9      RJMP	0x00AB
    00B2 940E0129  CALL	_main
_exit:
    00B4 CFFF      RJMP	_exit
FILE: 音乐.c
(0001) /*******************************************************************
(0002)         实验名称:音乐合成演示实验
(0003) 		    作者:王晓波
(0004) 			晶振:内部    8M
(0005) 		接线方法:
(0006) 		        1.PC0和PD7分别接扬声器的两个输入端子。
(0007) 		        2.PA0-PA3分别接I/O输出的O0-O3。
(0008)         使用说明:
(0009) 			    1.音乐数据存放于芯片的flash存贮器中。
(0010) 				2.PA口显示不同的音阶变化。
(0011) 				3.音乐数据的低四位选择音调频率,
(0012) 				高四位*5后,为音调持续时间。
(0013) ********************************************************************/
(0014) #include <iom16v.h>
(0015) #include <macros.h>
(0016) #define DO	63622	//523
(0017) #define RE	63831	//587
(0018) #define	MI	64017	//659
(0019) #define FA	64102	//698
(0020) #define	SO	64259	//784
(0021) #define LA	64398	//880
(0022) #define	TI	64522	//988                	                        	
(0023) #define DO_H	64578	//1046
(0024) #define RE_H	64683	//1174
(0025) #define MI_H	64776	//1318
(0026) #define FA_H	64819	//1397
(0027) #define SO_H	64897	//1568
(0028) #define LA_H	64966	//1760
(0029) #define TI_H	65028	//1976
(0030) #define DO_HH	65057	//2093
(0031) void delay_us(int time)
(0032) {//微秒级延时程序     
(0033)  	do
(0034)  	{
(0035)   	   time--;
_delay_us:
  time                 --> R16
    00B5 5001      SUBI	R16,1
    00B6 4010      SBCI	R17,0
(0036)  	}	
(0037)     while (time>1);
    00B7 E081      LDI	R24,1
    00B8 E090      LDI	R25,0
    00B9 1780      CP	R24,R16
    00BA 0791      CPC	R25,R17
    00BB F3CC      BLT	0x00B5
    00BC 9508      RET
_delay_ms:
  time                 --> R20
    00BD 940E0140  CALL	push_gset1
    00BF 01A8      MOVW	R20,R16
(0038) }
(0039) void delay_ms(unsigned int time)
(0040) {//毫秒级延时程序
    00C0 C005      RJMP	0x00C6
(0041)  	while  (time!=0)
(0042)     {		
(0043)   		delay_us(1000);
    00C1 EE08      LDI	R16,0xE8
    00C2 E013      LDI	R17,3
    00C3 DFF1      RCALL	_delay_us
(0044)   		time--;
    00C4 5041      SUBI	R20,1
    00C5 4050      SBCI	R21,0
    00C6 3040      CPI	R20,0
    00C7 0745      CPC	R20,R21
    00C8 F7C1      BNE	0x00C1
    00C9 940E0143  CALL	pop_gset1
    00CB 9508      RET
_timer1_ovf_isr:
    00CC 922A      ST	R2,-Y
    00CD 923A      ST	R3,-Y
    00CE 938A      ST	R24,-Y
    00CF B62F      IN	R2,0x3F
    00D0 922A      ST	R2,-Y
(0045)      }
(0046) }						  	
(0047) const unsigned char sound[]={ //乐曲数据表
(0048)                         /*************梁祝****************/
(0049) 						0x40,0x4c,0x4a,0x49,0xc8,0x49,0x47,0x46,
(0050) 						0xe5,0x4e,0x4d,0x4e,0x6c,0x2d,0x4e,
(0051) 						0x4d,0x2c,0x2d,0x2e,0x2d,0x6f,0x2d,
(0052) 						0x2c,0x2d,0x2c,0x29,0x2a,0x2b,
(0053) 						0x2a,0x29,0xc8,0x4c,0x4e,0x49,0x46,0x48,
(0054) 						0xc5,0x26,0x28,0xe5,0x83,0x65,0x26,
(0055) 						0x68,0x29,0x26,0x28,0x45,0x6c,0x2f,0x3d,
(0056) 						0x1c,0x2a,0x2c,0xe9,0x69,0x2a,0x47,0x46,
(0057) 						0x65,0x26,0x48,0x49,0x43,0x48,0x36,0x15,
(0058) 						0x26,0x18,0xe5,0x6a,0x2c,0x47,0x49,0x26,
(0059) 						0x28,0x85,0x33,0x15,0x43,0x25,0x26,0x27,
(0060) 						0x29,0xc6,0x25,0x26,0x68,0x29,0x4c,0x4a,
(0061) 						0x49,0x2a,0x29,0x49,0x26,0x25,0x83,0x88,
(0062) 						0x26,0x28,0x26,0x25,0x23,0x25,0x26,0x28,
(0063) 						0xc5,0x04,0x04,
(0064) 						/*************希望*****************/	
(0065) 						0x49,0x4a,0x4a,0x6a,0x29,0x48,0x46,0x68,
(0066) 						0x29,0xc8,0x49,0x4a,0x4a,0x6a,0x2c,0x4a,
(0067) 						0x4a,0x49,0x4a,0xca,0x4c,0x4d,0x4d,0x6d,
(0068) 						0x2c,0x4a,0x4a,0x4c,0x4d,0xcc,0x49,0x4a,
(0069) 						0x4a,0x69,0x2a,0x4a,0x49,0x4a,0x46,
(0070) 						0x18,0xe6,0x29,0x29,0x29,0x28,0x46,
(0071) 						0x29,0x29,0x29,0x28,0x46,0x49,0x4a,
(0072) 						0x48,0x69,0x2a,0x4c,0x2d,0x2d,0x2d,
(0073) 						0x2c,0x4a,0x29,0x29,0x29,0x28,0x46,
(0074) 						0x46,0x45,0x46,0xe6,
(0075) 						0x00};			  		  						  
(0076) /*	  		    音阶表				*/	
(0077) const unsigned int TONETABLE[15]={DO,RE,MI,FA,SO,LA,TI,DO_H,
(0078) 			    	 	RE_H,MI_H,FA_H,SO_H,LA_H,TI_H,DO_HH};
(0079) 			    	 	
(0080) /*			  音阶重装常数			*/						
(0081) unsigned int toneconst;								  							   						 				 	 	 
(0082) #pragma interrupt_handler timer1_ovf_isr:9
(0083) void timer1_ovf_isr(void)
(0084) {
(0085) 	  TCNT1=toneconst;
    00D1 90200060  LDS	R2,toneconst
    00D3 90300061  LDS	R3,toneconst+1
    00D5 BC3D      OUT	0x2D,R3
    00D6 BC2C      OUT	0x2C,R2
(0086) 	  PORTC^=1;
    00D7 E081      LDI	R24,1
    00D8 B225      IN	R2,0x15
    00D9 2628      EOR	R2,R24
    00DA BA25      OUT	0x15,R2
    00DB 9029      LD	R2,Y+
    00DC BE2F      OUT	0x3F,R2
    00DD 9189      LD	R24,Y+
    00DE 9039      LD	R3,Y+
    00DF 9029      LD	R2,Y+
    00E0 9518      RETI
_music:
  sound_add            --> R20
  temp1                --> R22
  temp                 --> R10
    00E1 940E013C  CALL	push_gset3
(0087) }	 	 
(0088) void music(void)
(0089)  {
(0090) 	  unsigned char temp=0,temp1=0;
    00E3 24AA      CLR	R10
    00E4 2766      CLR	R22
(0091) 	  unsigned int sound_add=0;
    00E5 2744      CLR	R20
    00E6 2755      CLR	R21
(0092) 	  TCCR1A = 0x00;
    00E7 2422      CLR	R2
    00E8 BC2F      OUT	0x2F,R2
(0093) 	  TCCR1B =(1<<CS11);//8分频
    00E9 E082      LDI	R24,2
    00EA BD8E      OUT	0x2E,R24
(0094) 	  temp1=sound[sound_add];
    00EB E584      LDI	R24,0x54
    00EC E090      LDI	R25,0
    00ED 01FA      MOVW	R30,R20
    00EE 0FE8      ADD	R30,R24
    00EF 1FF9      ADC	R31,R25
    00F0 9164      LPM	R22,0(Z)
    00F1 C030      RJMP	0x0122
(0095) 	 
(0096) 	  while(temp1!=0)
(0097)  	  		{
(0098) 			 temp=temp1; 
    00F2 2EA6      MOV	R10,R22
(0099) 			 temp&=0x0f;
    00F3 2D8A      MOV	R24,R10
    00F4 708F      ANDI	R24,0xF
    00F5 2EA8      MOV	R10,R24
(0100) 			 if(temp!=0)
    00F6 2388      TST	R24
    00F7 F0A9      BEQ	0x010D
(0101) 			   {
(0102) 			    TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
    00F8 B789      IN	R24,0x39
    00F9 6084      ORI	R24,4
    00FA BF89      OUT	0x39,R24
(0103) 			    temp--;			   
    00FB 94AA      DEC	R10
(0104)         	    toneconst=TONETABLE[temp];
    00FC E082      LDI	R24,2
    00FD 9D8A      MUL	R24,R10
    00FE 01F0      MOVW	R30,R0
    00FF E08A      LDI	R24,0xA
    0100 E091      LDI	R25,1
    0101 0FE8      ADD	R30,R24
    0102 1FF9      ADC	R31,R25
    0103 9005      LPM	R0,Z+
    0104 9014      LPM	R1,0(Z)
    0105 01F0      MOVW	R30,R0
    0106 93F00061  STS	toneconst+1,R31
    0108 93E00060  STS	toneconst,R30
(0105) 			    TCNT1=toneconst;
    010A BDFD      OUT	0x2D,R31
    010B BDEC      OUT	0x2C,R30
(0106) 				PORTA=toneconst;
    010C BBEB      OUT	0x1B,R30
(0107)  			   }
(0108) 			 temp=temp1;
    010D 2EA6      MOV	R10,R22
(0109) 			 temp>>=4;
    010E 2D8A      MOV	R24,R10
    010F 9582      SWAP	R24
    0110 708F      ANDI	R24,0xF
(0110) 			 temp&=0x0f;
    0111 708F      ANDI	R24,0xF
    0112 2EA8      MOV	R10,R24
(0111) 			 delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
    0113 E881      LDI	R24,0x81
    0114 9D8A      MUL	R24,R10
    0115 0180      MOVW	R16,R0
    0116 DFA6      RCALL	_delay_ms
(0112) 			 TIMSK&=~(1<<TOIE1);
    0117 B789      IN	R24,0x39
    0118 7F8B      ANDI	R24,0xFB
    0119 BF89      OUT	0x39,R24
(0113) 			 sound_add++;
    011A 5F4F      SUBI	R20,0xFF
    011B 4F5F      SBCI	R21,0xFF
(0114) 			 temp1=sound[sound_add];
    011C E584      LDI	R24,0x54
    011D E090      LDI	R25,0
    011E 01FA      MOVW	R30,R20
    011F 0FE8      ADD	R30,R24
    0120 1FF9      ADC	R31,R25
    0121 9164      LPM	R22,0(Z)
    0122 2366      TST	R22
    0123 F671      BNE	0x00F2
(0115) 			
(0116) 			}
(0117) 		PORTC = 0xFF;	                                         	
    0124 EF8F      LDI	R24,0xFF
    0125 BB85      OUT	0x15,R24
    0126 940E0135  CALL	pop_gset3
    0128 9508      RET
(0118) }	 	 	 	 
(0119) /*	  	   		 主程序 	   	  		*/	  
(0120) void main(void)
(0121) 	 {
(0122) 	  
(0123) 	DDRC=0x01; 
_main:
    0129 E081      LDI	R24,1
    012A BB84      OUT	0x14,R24
(0124) 	DDRD=0x80;
    012B E880      LDI	R24,0x80
    012C BB81      OUT	0x11,R24
(0125) 	DDRA=0x0f;
    012D E08F      LDI	R24,0xF
    012E BB8A      OUT	0x1A,R24
(0126)     SREG=0x80;
    012F E880      LDI	R24,0x80
    0130 BF8F      OUT	0x3F,R24
    0131 C001      RJMP	0x0133
(0127) 	  while(1)
(0128) 	   	{
(0129) 	     music();
FILE: <library>
    0132 DFAE      RCALL	_music
    0133 CFFE      RJMP	0x0132
    0134 9508      RET
pop_gset3:
    0135 E0E4      LDI	R30,4
    0136 940C0144  JMP	pop
push_gset5:
    0138 92FA      ST	R15,-Y
    0139 92EA      ST	R14,-Y
push_gset4:
    013A 92DA      ST	R13,-Y
    013B 92CA      ST	R12,-Y
push_gset3:
    013C 92BA      ST	R11,-Y
    013D 92AA      ST	R10,-Y
push_gset2:
    013E 937A      ST	R23,-Y
    013F 936A      ST	R22,-Y
push_gset1:
    0140 935A      ST	R21,-Y
    0141 934A      ST	R20,-Y
    0142 9508      RET
pop_gset1:
    0143 E0E1      LDI	R30,1
pop:
    0144 9149      LD	R20,Y+
    0145 9159      LD	R21,Y+
    0146 FDE0      SBRC	R30,0
    0147 9508      RET
    0148 9169      LD	R22,Y+
    0149 9179      LD	R23,Y+
    014A FDE1      SBRC	R30,1
    014B 9508      RET
    014C 90A9      LD	R10,Y+
    014D 90B9      LD	R11,Y+
    014E FDE2      SBRC	R30,2
    014F 9508      RET
    0150 90C9      LD	R12,Y+
    0151 90D9      LD	R13,Y+
    0152 FDE3      SBRC	R30,3
    0153 9508      RET
    0154 90E9      LD	R14,Y+
    0155 90F9      LD	R15,Y+
    0156 9508      RET

⌨️ 快捷键说明

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