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

📄 音乐.lst

📁 AVR之ATMega16
💻 LST
字号:
__text_start:
__start:
    00C4 E5CF      LDI	R28,0x5F
    00C5 E0D4      LDI	R29,4
    00C6 BFCD      OUT	0x3D,R28
    00C7 BFDE      OUT	0x3E,R29
    00C8 51C0      SUBI	R28,0x10
    00C9 40D0      SBCI	R29,0
    00CA EA0A      LDI	R16,0xAA
    00CB 8308      STD	Y+0,R16
    00CC 2400      CLR	R0
    00CD E6E0      LDI	R30,0x60
    00CE E0F0      LDI	R31,0
    00CF E010      LDI	R17,0
    00D0 36E2      CPI	R30,0x62
    00D1 07F1      CPC	R31,R17
    00D2 F011      BEQ	0x00D5
    00D3 9201      ST	R0,Z+
    00D4 CFFB      RJMP	0x00D0
    00D5 8300      STD	Z+0,R16
    00D6 E8E8      LDI	R30,0x88
    00D7 E0F1      LDI	R31,1
    00D8 E6A0      LDI	R26,0x60
    00D9 E0B0      LDI	R27,0
    00DA E011      LDI	R17,1
    00DB 38E8      CPI	R30,0x88
    00DC 07F1      CPC	R31,R17
    00DD F021      BEQ	0x00E2
    00DE 95C8      LPM
    00DF 9631      ADIW	R30,1
    00E0 920D      ST	R0,X+
    00E1 CFF9      RJMP	0x00DB
    00E2 940E0177  CALL	_main
_exit:
    00E4 CFFF      RJMP	_exit
FILE: C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\音乐\delay.h
(0001) #define xtal  8                      //8MS
(0002) /************************************************************
(0003) *   函数名称:void DelayUS(unsigned int time)
(0004) *   功    能:软件延时1.1Us 
(0005) *   入口参数:time 延时时间
(0006) *   出口参数:无
(0007) ************************************************************/
(0008) void DelayUS(unsigned int time)
(0009) {   
_DelayUS:
  time                 --> R16
    00E5 C002      RJMP	0x00E8
(0010)      while(time>1)
(0011) 	    time--; 
    00E6 5001      SUBI	R16,1
    00E7 4010      SBCI	R17,0
    00E8 E081      LDI	R24,1
    00E9 E090      LDI	R25,0
    00EA 1780      CP	R24,R16
    00EB 0791      CPC	R25,R17
    00EC F3C8      BCS	0x00E6
    00ED 9508      RET
_DelayMS:
  i                    --> R20
  time                 --> R16
    00EE 940E0187  CALL	push_gset1
(0012) }
(0013) /************************************************************
(0014) *   函数名称:void DelayMS(unsigned int time)
(0015) *   功    能:软件延时  1/1000s
(0016) *   入口参数:time 延时时间 MS  
(0017) *   出口参数:无
(0018) ************************************************************/
(0019) void DelayMS (unsigned int time)
(0020) {
    00F0 C009      RJMP	0x00FA
(0021)     unsigned int i;
(0022)     while(time--)	
(0023) 	{
(0024) 	  for(i=1;i<(unsigned int)(xtal*143-2);i++)
    00F1 E041      LDI	R20,1
    00F2 E050      LDI	R21,0
    00F3 C002      RJMP	0x00F6
    00F4 5F4F      SUBI	R20,0xFF
    00F5 4F5F      SBCI	R21,0xFF
    00F6 3746      CPI	R20,0x76
    00F7 E0E4      LDI	R30,4
    00F8 075E      CPC	R21,R30
    00F9 F3D0      BCS	0x00F4
    00FA 0118      MOVW	R2,R16
    00FB 5001      SUBI	R16,1
    00FC 4010      SBCI	R17,0
    00FD 2022      TST	R2
    00FE F791      BNE	0x00F1
    00FF 2033      TST	R3
    0100 F781      BNE	0x00F1
    0101 940E018A  CALL	pop_gset1
    0103 9508      RET
FILE: C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\音乐\音乐.c
(0001) //内部晶振 8M
(0002) #include <iom16v.h>
(0003) #include <macros.h>
(0004) #include"delay.h"
(0005) 
(0006) /*------宏定义------*/
(0007) #define uchar	unsigned char
(0008) #define uint	unsigned int
(0009) #define DO	64580	//523
(0010) #define RE	64684	//587
(0011) #define	MI	64777	//659
(0012) #define FA	64820	//698
(0013) #define	SO	64898	//784
(0014) #define LA	64968	//880
(0015) #define	XI	65030	//988                	                        	
(0016) #define DO_H	65058	//1046
(0017) #define RE_H	65110	//1174
(0018) #define MI_H	65157	//1318
(0019) #define FA_H	65178	//1397
(0020) #define SO_H	65217	//1568
(0021) #define LA_H	65252	//1760
(0022) #define XI_H	65283	//1976
(0023) #define DO_HH	65297	//2093
(0024) 					  	
(0025) const unsigned char sound[]={ //乐曲数据表
(0026)                         /****************两只老虎**********************/
(0027) 						0x48,0x49,0x4a,0x48,0x48,0x49,0x4a,0x48,0x4a,0x4b,0x8c,
(0028) 						0x4a,0x4b,0x8c,0x2c,0x2d,0x2c,0x2b,0x4a,0x48,
(0029) 					    0x2c,0x2d,0x2c,0x2b,0x4a,0x48,0x48,0x45,0x88,0x48,0x45,0x88,
(0030) 						/*************梁祝****************/
(0031) 						0x40,0x4c,0x4a,0x49,0xc8,0x49,0x47,0x46,
(0032) 						0xe5,0x4e,0x4d,0x4e,0x6c,0x2d,0x4e,
(0033) 						0x4d,0x2c,0x2d,0x2e,0x2d,0x6f,0x2d,
(0034) 						0x2c,0x2d,0x2c,0x29,0x2a,0x2b,
(0035) 						0x2a,0x29,0xc8,0x4c,0x4e,0x49,0x46,0x48,
(0036) 						0xc5,0x26,0x28,0xe5,0x83,0x65,0x26,
(0037) 						0x68,0x29,0x26,0x28,0x45,0x6c,0x2f,0x3d,
(0038) 						0x1c,0x2a,0x2c,0xe9,0x69,0x2a,0x47,0x46,
(0039) 						0x65,0x26,0x48,0x49,0x43,0x48,0x36,0x15,
(0040) 						0x26,0x18,0xe5,0x6a,0x2c,0x47,0x49,0x26,
(0041) 						0x28,0x85,0x33,0x15,0x43,0x25,0x26,0x27,
(0042) 						0x29,0xc6,0x25,0x26,0x68,0x29,0x4c,0x4a,
(0043) 						0x49,0x2a,0x29,0x49,0x26,0x25,0x83,0x88,
(0044) 						0x26,0x28,0x26,0x25,0x23,0x25,0x26,0x28,
(0045) 						0xc5,0x04,0x04,
(0046) 						/*************希望*****************/	
(0047) 						0x49,0x4a,0x4a,0x6a,0x29,0x48,0x46,0x68,
(0048) 						0x29,0xc8,0x49,0x4a,0x4a,0x6a,0x2c,0x4a,
(0049) 						0x4a,0x49,0x4a,0xca,0x4c,0x4d,0x4d,0x6d,
(0050) 						0x2c,0x4a,0x4a,0x4c,0x4d,0xcc,0x49,0x4a,
(0051) 						0x4a,0x69,0x2a,0x4a,0x49,0x4a,0x46,
(0052) 						0x18,0xe6,0x29,0x29,0x29,0x28,0x46,
(0053) 						0x29,0x29,0x29,0x28,0x46,0x49,0x4a,
(0054) 						0x48,0x69,0x2a,0x4c,0x2d,0x2d,0x2d,
(0055) 						0x2c,0x4a,0x29,0x29,0x29,0x28,0x46,
(0056) 						0x46,0x45,0x46,0xe6,
(0057) 						/***************喀秋莎********************/
(0058) 						0x66,0x27,0x68,0x26,0x28,0x28,0x27,0x26,0x47,0x43,
(0059) 						0x67,0x28,0x69,0x27,0x29,0x29,0x28,0x27,0x46,0x46,
(0060) 						0x4a,0x4d,0x4c,0x2d,0x2c,0x2b,0x2b,0x2a,0x29,0x4a,
(0061) 						0x46,0x20,0x4b,0x29,0x6a,0x28,0x27,0x23,0x28,0x27,
(0062) 						0x46,0x46,0x4a,0x4d,0x4c,0x2d,0x2c,0x2b,0x2b,0x2a,
(0063) 						0x29,0x4a,0x46,0x20,0x4b,0x29,0x6a,0x28,0x27,0x23,
(0064) 						0x28,0x27,0x46,0x46,
(0065) 
(0066) 						0x00};			  		  						  
(0067) /*	  		    音阶表				*/	
(0068) const unsigned int TONETABLE[15]={DO,RE,MI,FA,SO,LA,XI,DO_H,
(0069) 			    	 	RE_H,MI_H,FA_H,SO_H,LA_H,XI_H,DO_HH};
(0070) 			    	 	
(0071) /*			  音阶重装常数			*/						
(0072) unsigned int toneconst;								  							   						 				 	 	 
(0073) //端口初始化
(0074) void port_init(void)
(0075) {
(0076)  PORTA = 0x00;//设置端口方向、数据
_port_init:
    0104 2422      CLR	R2
    0105 BA2B      OUT	0x1B,R2
(0077)  DDRA  = 0x03;
    0106 E083      LDI	R24,3
    0107 BB8A      OUT	0x1A,R24
(0078)  PORTB = 0x00;
    0108 BA28      OUT	0x18,R2
(0079)  DDRB  = 0x00;
    0109 BA27      OUT	0x17,R2
(0080)  PORTC = 0x00;
    010A BA25      OUT	0x15,R2
(0081)  DDRC  = 0x00;
    010B BA24      OUT	0x14,R2
(0082)  PORTD = 0x00;
    010C BA22      OUT	0x12,R2
(0083)  DDRD  = 0x00;
    010D BA21      OUT	0x11,R2
    010E 9508      RET
(0084) }
(0085) 
(0086) 
(0087) //定时器T0初始化
(0088) void timer0_init(void)
(0089) {
(0090)  TCCR0  = 0x00;//停止定时器
_timer0_init:
    010F 2422      CLR	R2
    0110 BE23      OUT	0x33,R2
(0091)  TCNT0  = 0xFF;//初始值
    0111 EF8F      LDI	R24,0xFF
    0112 BF82      OUT	0x32,R24
(0092)  OCR0   = 0xFE;//匹配值
    0113 EF8E      LDI	R24,0xFE
    0114 BF8C      OUT	0x3C,R24
(0093)  TIMSK |= 0x00;//溢出中断不允许
    0115 B629      IN	R2,0x39
    0116 BE29      OUT	0x39,R2
(0094)  TCCR0  = 0x02;//启动定时器
    0117 E082      LDI	R24,2
    0118 BF83      OUT	0x33,R24
    0119 9508      RET
(0095) }
(0096) 
(0097) void init_devices(void)
(0098) {
(0099)  CLI(); //禁止所有中断
_init_devices:
    011A 94F8      BCLR	7
(0100)  MCUCR  = 0x00;//外部中断触发方式
    011B 2422      CLR	R2
    011C BE25      OUT	0x35,R2
(0101)  MCUCSR = 0x80;//禁止JTAG
    011D E880      LDI	R24,0x80
    011E BF84      OUT	0x34,R24
(0102)  GICR   = 0x00;//外部中断使能
    011F BE2B      OUT	0x3B,R2
(0103)  port_init();
    0120 DFE3      RCALL	_port_init
(0104)  timer0_init();
    0121 DFED      RCALL	_timer0_init
(0105)  SEI();//开全局中断
    0122 9478      BSET	7
    0123 9508      RET
_timer0_ovf_isr:
    0124 922A      ST	R2,-Y
    0125 923A      ST	R3,-Y
    0126 938A      ST	R24,-Y
    0127 B62F      IN	R2,0x3F
    0128 922A      ST	R2,-Y
(0106) }
(0107) //T0溢出中断服务程序
(0108) #pragma interrupt_handler timer0_ovf_isr:10
(0109) void timer0_ovf_isr(void)
(0110) {
(0111) 	  TCNT0=toneconst;
    0129 90200060  LDS	R2,toneconst
    012B 90300061  LDS	R3,toneconst+1
    012D BE22      OUT	0x32,R2
(0112) 	  PORTA^=BIT(PA0);
    012E E081      LDI	R24,1
    012F B22B      IN	R2,0x1B
    0130 2628      EOR	R2,R24
    0131 BA2B      OUT	0x1B,R2
    0132 9029      LD	R2,Y+
    0133 BE2F      OUT	0x3F,R2
    0134 9189      LD	R24,Y+
    0135 9039      LD	R3,Y+
    0136 9029      LD	R2,Y+
    0137 9518      RETI
_music:
  sound_add            --> R20
  temp1                --> R22
  temp                 --> R10
    0138 940E0183  CALL	push_gset3
(0113) } 	 
(0114) void music(void)
(0115)  {
(0116) 	  unsigned char temp=0,temp1=0;
    013A 24AA      CLR	R10
    013B 2766      CLR	R22
(0117) 	  unsigned int sound_add=0;
    013C 2744      CLR	R20
    013D 2755      CLR	R21
(0118) 	  temp1=sound[sound_add];
    013E E584      LDI	R24,0x54
    013F E090      LDI	R25,0
    0140 01FA      MOVW	R30,R20
    0141 0FE8      ADD	R30,R24
    0142 1FF9      ADC	R31,R25
    0143 9164      LPM	R22,0(Z)
    0144 C02D      RJMP	0x0172
(0119) 	 	  while(temp1!=0)
(0120)  	  		{
(0121) 			 temp=temp1; 
    0145 2EA6      MOV	R10,R22
(0122) 			 temp&=0x0f;
    0146 2D8A      MOV	R24,R10
    0147 708F      ANDI	R24,0xF
    0148 2EA8      MOV	R10,R24
(0123) 			 if(temp!=0)
    0149 2388      TST	R24
    014A F099      BEQ	0x015E
(0124) 			   {
(0125) 			    TIMSK|=(1<<TOIE0);//根据SOUNDTABLE中数据的低四位选择音调频率
    014B B789      IN	R24,0x39
    014C 6081      ORI	R24,1
    014D BF89      OUT	0x39,R24
(0126) 			    temp--;			   
    014E 94AA      DEC	R10
(0127)         	    toneconst=TONETABLE[temp];
    014F E082      LDI	R24,2
    0150 9D8A      MUL	R24,R10
    0151 01F0      MOVW	R30,R0
    0152 E68A      LDI	R24,0x6A
    0153 E091      LDI	R25,1
    0154 0FE8      ADD	R30,R24
    0155 1FF9      ADC	R31,R25
    0156 9005      LPM	R0,Z+
    0157 9014      LPM	R1,0(Z)
    0158 01F0      MOVW	R30,R0
    0159 93F00061  STS	toneconst+1,R31
    015B 93E00060  STS	toneconst,R30
(0128) 			    TCNT0=toneconst;
    015D BFE2      OUT	0x32,R30
(0129)  			   }
(0130) 			 temp=temp1;
    015E 2EA6      MOV	R10,R22
(0131) 			 temp>>=4;
    015F 2D8A      MOV	R24,R10
    0160 9582      SWAP	R24
    0161 708F      ANDI	R24,0xF
(0132) 			 temp&=0x0f;
    0162 708F      ANDI	R24,0xF
    0163 2EA8      MOV	R10,R24
(0133) 			 DelayMS(temp);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
    0164 2F08      MOV	R16,R24
    0165 2711      CLR	R17
    0166 DF87      RCALL	_DelayMS
(0134) 			 TIMSK&=~(1<<TOIE0);
    0167 B789      IN	R24,0x39
    0168 7F8E      ANDI	R24,0xFE
    0169 BF89      OUT	0x39,R24
(0135) 			 sound_add++;
    016A 5F4F      SUBI	R20,0xFF
    016B 4F5F      SBCI	R21,0xFF
(0136) 			 temp1=sound[sound_add];
    016C E584      LDI	R24,0x54
    016D E090      LDI	R25,0
    016E 01FA      MOVW	R30,R20
    016F 0FE8      ADD	R30,R24
    0170 1FF9      ADC	R31,R25
    0171 9164      LPM	R22,0(Z)
    0172 2366      TST	R22
    0173 F689      BNE	0x0145
    0174 940E017C  CALL	pop_gset3
    0176 9508      RET
(0137) 			
(0138) 			}
(0139) }	 	 	 	 
(0140) 
(0141) 
(0142) 
(0143) 
(0144) 
(0145) //主函数
(0146) void main(void)
(0147) {
(0148)  init_devices();
_main:
    0177 DFA2      RCALL	_init_devices
    0178 C001      RJMP	0x017A
(0149)  //在这继续添加你的代码
(0150)  while(1)
(0151)  {
(0152)   music();
FILE: <library>
    0179 DFBE      RCALL	_music
    017A CFFE      RJMP	0x0179
    017B 9508      RET
pop_gset3:
    017C E0E4      LDI	R30,4
    017D 940C018B  JMP	pop
push_gset5:
    017F 92FA      ST	R15,-Y
    0180 92EA      ST	R14,-Y
push_gset4:
    0181 92DA      ST	R13,-Y
    0182 92CA      ST	R12,-Y
push_gset3:
    0183 92BA      ST	R11,-Y
    0184 92AA      ST	R10,-Y
push_gset2:
    0185 937A      ST	R23,-Y
    0186 936A      ST	R22,-Y
push_gset1:
    0187 935A      ST	R21,-Y
    0188 934A      ST	R20,-Y
    0189 9508      RET
pop_gset1:
    018A E0E1      LDI	R30,1
pop:
    018B 9149      LD	R20,Y+
    018C 9159      LD	R21,Y+
    018D FDE0      SBRC	R30,0
    018E 9508      RET
    018F 9169      LD	R22,Y+
    0190 9179      LD	R23,Y+
    0191 FDE1      SBRC	R30,1
    0192 9508      RET
    0193 90A9      LD	R10,Y+
    0194 90B9      LD	R11,Y+
    0195 FDE2      SBRC	R30,2
    0196 9508      RET
    0197 90C9      LD	R12,Y+
    0198 90D9      LD	R13,Y+
    0199 FDE3      SBRC	R30,3
    019A 9508      RET
    019B 90E9      LD	R14,Y+
    019C 90F9      LD	R15,Y+
    019D 9508      RET

⌨️ 快捷键说明

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