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

📄 02-8a-9.lst

📁 这里有11个用ICCAVR开发的源代码,经DEMO板调试后已经通过.
💻 LST
字号:
__start:
__text_start:
    016C EFCF      LDI	R28,0xFF
    016D E0D2      LDI	R29,2
    016E BFCD      OUT	0x3D,R28
    016F BFDE      OUT	0x3E,R29
    0170 51C0      SUBI	R28,0x10
    0171 40D0      SBCI	R29,0
    0172 EA0A      LDI	R16,0xAA
    0173 8308      STD	Y+0,R16
    0174 2400      CLR	R0
    0175 E0E0      LDI	R30,0
    0176 E0F1      LDI	R31,1
    0177 E011      LDI	R17,1
    0178 30E2      CPI	R30,2
    0179 07F1      CPC	R31,R17
    017A F011      BEQ	0x017D
    017B 9201      ST	R0,Z+
    017C CFFB      RJMP	0x0178
    017D 8300      STD	Z+0,R16
    017E EDE7      LDI	R30,0xD7
    017F E0F2      LDI	R31,2
    0180 E0A0      LDI	R26,0
    0181 E0B1      LDI	R27,1
    0182 E012      LDI	R17,2
    0183 3DE7      CPI	R30,0xD7
    0184 07F1      CPC	R31,R17
    0185 F021      BEQ	0x018A
    0186 95C8      LPM
    0187 9631      ADIW	R30,1
    0188 920D      ST	R0,X+
    0189 CFF9      RJMP	0x0183
    018A D082      RCALL	_main
_exit:
    018B CFFF      RJMP	_exit
FILE: D:\xij\demo\demo_diy02-8a\1\C语言\02-8A-9\9.c
(0001) 
(0002) 
(0003) #include <iom48v.h>
(0004) #include <macros.h>
(0005) /* 		  音乐数据  	  */
(0006) /* 四分之一拍为0x10, 二分之一拍为0x20, 一拍为0x40*/
(0007) /* 低1-1 2-2 3-3 4-4 5-5 6-6 7-7 */
(0008) /* 中1-8 2-9 3-A 4-B 5-C 6-D 7-E */
(0009) /* 高1-F*/			
(0010) 					  	
(0011) const unsigned char sound[]={ //乐曲数据表
(0012) 	  		   				  0x23,0x24,0x25,0x44,0x45,0x24,0x23,0x22,0x42,0x40,0x40,0x23,0x22,0x21,0x41,0x28,
(0013) 							  0x48,0x23,0x25,0x45,0x40,0x40,0x21,0x21,0x42,0x21,0x21,0x41,0x20,0x28,0x47,0x26,
(0014) 							  0x17,0x16,0x15,0x45,0x40,0x31,0x11,0x21,0x21,0x21,0x22,0x42,0x40,0x20,0x23,0x23,
(0015) 							  0x24,0x25,0x24,0x23,0x24,0x25,0x26,0x23,0x23,0x42,0x42,0x40,0x23,0x22,0x21,0x41,
(0016) 							  0x28,0x28,0x28,0x23,0x25,0x45,0x45,0x40,0x20,0x25,0x46,0x28,0x28,0x48,0x20,0x29,
(0017) 							  0x47,0x26,0x17,0x16,0x15,0x45,0x25,0x25,0x26,0x28,0x18,0x16,0x26,0x28,0x26,0x28,
(0018) 							  0x19,0x19,0x49,0x49,0x20,0x25,0x2a,0x18,0x19,0x29,0x28,0x16,0x17,0x16,0x15,0x25,
(0019) 							  0x25,0x28,0x29,0x2a,0x29,0x48,0x28,0x48,0x2c,0x4c,0x4c,0x40,0x2a,0x2c,0x1c,0x1a,
(0020) 							  0x2a,0x2a,0x29,0x4a,0x2b,0x2a,0x4a,0x4a,0x40,0x2a,0x29,0x29,0x28,0x28,0x26,0x48,
(0021) 							  0x29,0x26,0x45,0x45,0x40,0x25,0x25,0x26,0x21,0x18,0x16,0x26,0x28,0x26,0x28,0x29,
(0022) 							  0x49,0x49,0x20,0x25,0x28,0x29,0x2a,0x29,0x49,0x28,0x48,0x2c,0x4c,0x4c,0x40,0x2a,
(0023) 							  0x2c,0x15,0x1a,0x2a,0x2a,0x29,0x4a,0x2b,0x2a,0x4a,0x4a,0x40,0x2a,0x29,0x29,0x28,
(0024) 							  0x28,0x26,0x28,0x28,0x29,0x26,0x45,0x45,0x40,0x25,0x25,0x26,0x28,0x28,0x26,0x2a,
(0025) 							  0x19,0x18,0x28,0x18,0x19,0x48,0x48,0x40,0x40,0x40,0x40,0x28,0x48,0x29,0x28,0x28,
(0026) 							  0x2a,0x1a,0x1a,0x1a,0x18,0x40,0x20,0x26,0x28,0x28,0x28,0x26,0x28,0x48,0x26,0x25,
(0027) 							  0x45,0x45,0x40,0x40,0x40,0x28,0x48,0x28,0x28,0x1c,0x1d,0x2d,0x2c,0x28,0x28,0x28,
(0028) 							  0x20,0x26,0x19,0x1a,0x29,0x19,0x18,0x28,0x28,0x26,0x21,0x29,0x49,0x49,0x40,0x20,
(0029) 							  0x28,0x29,0x2a,0x4a,0x4a,0x20,0x25,0x28,0x29,0x48,0x48,0x48,0x25,0x25,0x26,0x28,
(0030) 							  0x28,0x26,0x2a,0x19,0x18,0x28,0x18,0x19,0x49,0x49,0x40,0x40,
(0031) 
(0032)                         0x25,0x28,0x2A,0x4A,0x29,0x28,0x48,0x28,        
(0033)                         0x26,0x46,0x28,0x45,0x25,0x28,0x2A,0x4A,
(0034) 						0x29,0x28,0x48,0x28,0x29,0x49,0x2A,0x49,
(0035) 						0x40,0x2A,0x4A,0x2B,0x4C,0x40,0x3D,0x1D,
(0036) 						0x2D,0x2D,0x4C,0x40,0x2A,0x4A,0x2C,0x48,
(0037) 						0x28,0x2A,0x29,0x46,0x25,0x48,0x40,
(0038) 						
(0039) 						0x2a,0x2a,0x4a,0x2a,0x2a,0x4a,0x2a,0x2c,0x28,0x29,
(0040) 	  		   			0x4a,0x4a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,
(0041) 						0x2a,0x29,0x29,0x28,0x49,0x4c,0x2a,0x2a,0x4a,0x2a,
(0042) 						0x2a,0x4a,0x2a,0x2c,0x28,0x29,0x4a,0x4a,0x2b,0x2b,
(0043) 						0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2c,0x2c,0x2b,0x29,
(0044) 						0x48,0x48,
(0045) 						
(0046) 						0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,0x46,0x46,
(0047)                         0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,0x4a,0x4a,
(0048) 						0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,0x2a,0x28,
(0049) 						0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,0x46,0x46,
(0050) 						0x46,0x46,0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,
(0051) 						0x46,0x46,0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,
(0052) 						0x4a,0x4a,0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,
(0053) 						0x2a,0x28,0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,
(0054) 						0x46,0x46,0x46,0x46,
(0055) 						
(0056) 						0x43,0x43,0x45,0x49,0x49,0x49,0x48,0x48,0x45,0x44,
(0057) 	  		            0x44,0x44,0x43,0x43,0x43,0x43,0x44,0x45,0x46,0x46,
(0058) 						0x46,0x45,0x45,0x45,0x43,0x43,0x45,0x49,0x49,0x49,
(0059) 						0x48,0x48,0x45,0x44,0x44,0x44,0x43,0x43,0x45,0x45,
(0060) 						0x46,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,
(0061) 						0x45,0x47,0x46,0x45,0x43,0x43,0x45,0x48,0x48,0x48,
(0062) 						0x46,0x46,0x48,0x49,0x49,0x48,0x47,0x47,0x47,0x45,
(0063) 						0x45,0x45,0x43,0x43,0x45,0x49,0x49,0x49,0x48,0x48,
(0064) 						0x45,0x44,0x44,0x44,0x43,0x43,0x45,0x45,0x46,0x47,
(0065) 						0x48,0x48,0x48,0x48,0x40,0x40,
(0066) 						
(0067) 						0x45,0x48,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x49,0x4a,
(0068) 	  		            0x49,0x48,0x48,0x48,0x48,0x48,0x45,0x48,0x4a,0x4a,
(0069) 						0x48,0x4a,0x4c,0x4c,0x4b,0x4a,0x49,0x49,0x49,0x49,
(0070) 						0x49,0x4c,0x4b,0x4a,0x4a,0x4a,0x49,0x48,0x48,0x49,
(0071) 						0x4a,0x4c,0x4b,0x4b,0x4b,0x4b,0x4b,0x46,0x46,0x45,
(0072) 						0x45,0x45,0x47,0x48,0x49,0x49,0x4a,0x49,0x48,0x48,
(0073) 						0x48,0x48,0x48,0x48,
(0074) 												
(0075) 						0x00,0x00
(0076) 						};
(0077) 
(0078) /*	  		    音阶表				*/	
(0079) const unsigned int TONETABLE[15]={
(0080)          64580,64684,64777,64820,64898,64968,65030,65058,
(0081)          65110,65157,65178,65217,65252,65283,65297
(0082) 						         };
(0083) /*			  音阶重装常数			*/						
(0084) /*	  		    微秒级延时程序			*/	 
(0085) void delay_us(int time)
(0086) {     
(0087)  do
(0088)  {
(0089)   time--;
_delay_us:
  time                 --> R16
    018C 5001      SUBI	R16,1
    018D 4010      SBCI	R17,0
(0090)  }	
(0091)   while (time>1);
    018E E081      LDI	R24,1
    018F E090      LDI	R25,0
    0190 1780      CP	R24,R16
    0191 0791      CPC	R25,R17
    0192 F3CC      BLT	0x018C
    0193 9508      RET
_delay_ms:
  time                 --> R20
    0194 D090      RCALL	push_gset1
    0195 01A8      MOVW	R20,R16
(0092) }	  
(0093) 
(0094) /*	  		    毫秒级延时程序			*/	 
(0095) void delay_ms(unsigned int time)
(0096) {
    0196 C005      RJMP	0x019C
(0097)  while(time!=0)
(0098)  {		
(0099)   delay_us(1000);
    0197 EE08      LDI	R16,0xE8
    0198 E013      LDI	R17,3
    0199 DFF2      RCALL	_delay_us
(0100)   time--;
    019A 5041      SUBI	R20,1
    019B 4050      SBCI	R21,0
    019C 3040      CPI	R20,0
    019D 0745      CPC	R20,R21
    019E F7C1      BNE	0x0197
    019F D088      RCALL	pop_gset1
    01A0 9508      RET
_timer1_ovf_isr:
    01A1 922A      ST	R2,-Y
    01A2 923A      ST	R3,-Y
    01A3 938A      ST	R24,-Y
    01A4 B62F      IN	R2,0x3F
    01A5 922A      ST	R2,-Y
(0101)  }
(0102) }		
(0103) 
(0104) unsigned int toneconst;								  							   						 				 	 	 
(0105) #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
(0106) void timer1_ovf_isr(void)
(0107) 	 {
(0108) 	  TCNT1=toneconst;
    01A6 90200100  LDS	R2,toneconst
    01A8 90300101  LDS	R3,toneconst+1
    01AA 92300085  STS	0x85,R3
    01AC 92200084  STS	0x84,R2
(0109) 	  PORTD^=8;
    01AE E088      LDI	R24,0x8
    01AF B02B      IN	R2,0x0B
    01B0 2628      EOR	R2,R24
    01B1 B82B      OUT	0x0B,R2
    01B2 9029      LD	R2,Y+
    01B3 BE2F      OUT	0x3F,R2
    01B4 9189      LD	R24,Y+
    01B5 9039      LD	R3,Y+
    01B6 9029      LD	R2,Y+
    01B7 9518      RETI
_music:
  sound_add            --> R20
  temp1                --> R22
  temp                 --> R10
    01B8 D068      RCALL	push_gset3
(0110) 	 }	 	 
(0111) void music(void)
(0112)  	 {
(0113) 	  unsigned char temp,temp1;
(0114) 	  unsigned int sound_add=0;
    01B9 2744      CLR	R20
    01BA 2755      CLR	R21
(0115)  	  TCCR1A = 0x00;
    01BB 2422      CLR	R2
    01BC 92200080  STS	0x80,R2
(0116) 	  TCCR1B =(1<<CS11);//8分频
    01BE E082      LDI	R24,2
    01BF 93800081  STS	0x81,R24
(0117) 	  temp1 = sound[sound_add];
    01C1 E384      LDI	R24,0x34
    01C2 E090      LDI	R25,0
    01C3 01FA      MOVW	R30,R20
    01C4 0FE8      ADD	R30,R24
    01C5 1FF9      ADC	R31,R25
    01C6 9164      LPM	R22,0(Z)
    01C7 C036      RJMP	0x01FE
(0118) 	  while(temp1!=0)
(0119)  	  		{
(0120) 			temp=temp1; 
    01C8 2EA6      MOV	R10,R22
(0121) 			temp&=0x0f;
    01C9 2D8A      MOV	R24,R10
    01CA 708F      ANDI	R24,0xF
    01CB 2EA8      MOV	R10,R24
(0122) 			if(temp!=0)
    01CC 2388      TST	R24
    01CD F0C9      BEQ	0x01E7
(0123) 			  {
(0124) 			   TIMSK1|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
    01CE 9180006F  LDS	R24,0x6F
    01D0 6081      ORI	R24,1
    01D1 9380006F  STS	0x6F,R24
(0125) 			   temp--;			   
    01D3 94AA      DEC	R10
(0126)         	   toneconst=TONETABLE[temp];
    01D4 E082      LDI	R24,2
    01D5 9D8A      MUL	R24,R10
    01D6 01F0      MOVW	R30,R0
    01D7 EB89      LDI	R24,0xB9
    01D8 E092      LDI	R25,2
    01D9 0FE8      ADD	R30,R24
    01DA 1FF9      ADC	R31,R25
    01DB 9005      LPM	R0,Z+
    01DC 9014      LPM	R1,0(Z)
    01DD 01F0      MOVW	R30,R0
    01DE 93F00101  STS	toneconst+1,R31
    01E0 93E00100  STS	toneconst,R30
(0127) 			   TCNT1=toneconst;
    01E2 011F      MOVW	R2,R30
    01E3 92300085  STS	0x85,R3
    01E5 92200084  STS	0x84,R2
(0128)  			  }
(0129) 			temp=temp1;
    01E7 2EA6      MOV	R10,R22
(0130) 			temp>>=4;
    01E8 2D8A      MOV	R24,R10
    01E9 9582      SWAP	R24
    01EA 708F      ANDI	R24,0xF
(0131) 			temp&=0x0f;
    01EB 708F      ANDI	R24,0xF
    01EC 2EA8      MOV	R10,R24
(0132) 			delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
    01ED E881      LDI	R24,0x81
    01EE 9D8A      MUL	R24,R10
    01EF 0180      MOVW	R16,R0
    01F0 DFA3      RCALL	_delay_ms
(0133) 			TIMSK1&=~(1<<TOIE1);
    01F1 9180006F  LDS	R24,0x6F
    01F3 7F8E      ANDI	R24,0xFE
    01F4 9380006F  STS	0x6F,R24
(0134) 			sound_add++;
    01F6 5F4F      SUBI	R20,0xFF
    01F7 4F5F      SBCI	R21,0xFF
(0135) 			temp1 = sound[sound_add]; 
    01F8 E384      LDI	R24,0x34
    01F9 E090      LDI	R25,0
    01FA 01FA      MOVW	R30,R20
    01FB 0FE8      ADD	R30,R24
    01FC 1FF9      ADC	R31,R25
    01FD 9164      LPM	R22,0(Z)
    01FE 2366      TST	R22
    01FF F009      BEQ	0x0201
    0200 CFC7      RJMP	0x01C8
(0136) 			}
(0137) 		delay_ms(1000);	                                         	
    0201 EE08      LDI	R16,0xE8
    0202 E013      LDI	R17,3
    0203 DF90      RCALL	_delay_ms
    0204 D016      RCALL	pop_gset3
    0205 9508      RET
(0138) 	 }	 	
(0139) 	 
(0140) void mic_startup()
(0141) {//声控启动程序运行
_mic_startup:
  mic_in               --> R16
    0206 C004      RJMP	0x020B
(0142)  unsigned char mic_in;
(0143)  while(1)	
(0144)    {	  //无键按下等待
(0145)     mic_in=PINC & 0x20;     //pc5=0
    0207 B106      IN	R16,0x06
    0208 7200      ANDI	R16,0x20
(0146)     if(mic_in==0){break;}
    0209 F409      BNE	0x020B
    020A C001      RJMP	0x020C
    020B CFFB      RJMP	0x0207
    020C 9508      RET
(0147)    }//有键按下运行下面的程序
(0148) }	 
(0149) 	  	 	 
(0150) /*	  	   		 主程序 	   	  		*/	  
(0151) void main(void)
(0152) 	 {
(0153) 	  unsigned char i;
(0154) 	  DDRC=0x00;
_main:
  i                    --> Y+1
    020D 2422      CLR	R2
    020E B827      OUT	0x07,R2
(0155) 	  PORTC=0xff;
    020F EF8F      LDI	R24,0xFF
    0210 B988      OUT	0x08,R24
(0156) 	  DDRD=0xfb;
    0211 EF8B      LDI	R24,0xFB
    0212 B98A      OUT	0x0A,R24
(0157) 	  PORTD=0xff;
    0213 EF8F      LDI	R24,0xFF
    0214 B98B      OUT	0x0B,R24
(0158) 	  SEI();
    0215 9478      BSET	7
(0159)    	  			  //等待声控启动	
(0160) 	 mic_startup();
    0216 DFEF      RCALL	_mic_startup
    0217 C001      RJMP	0x0219
(0161) 
(0162) 	  while(1)
(0163) 	   	{
(0164) 	     music();
FILE: <library>
    0218 DF9F      RCALL	_music
    0219 CFFE      RJMP	0x0218
    021A 9508      RET
pop_gset3:
    021B E0E4      LDI	R30,4
    021C C00C      RJMP	pop
push_gset5:
    021D 92FA      ST	R15,-Y
    021E 92EA      ST	R14,-Y
push_gset4:
    021F 92DA      ST	R13,-Y
    0220 92CA      ST	R12,-Y
push_gset3:
    0221 92BA      ST	R11,-Y
    0222 92AA      ST	R10,-Y
push_gset2:
    0223 937A      ST	R23,-Y
    0224 936A      ST	R22,-Y
push_gset1:
    0225 935A      ST	R21,-Y
    0226 934A      ST	R20,-Y
    0227 9508      RET
pop_gset1:
    0228 E0E1      LDI	R30,1
pop:
    0229 9149      LD	R20,Y+
    022A 9159      LD	R21,Y+
    022B FDE0      SBRC	R30,0
    022C 9508      RET
    022D 9169      LD	R22,Y+
    022E 9179      LD	R23,Y+
    022F FDE1      SBRC	R30,1
    0230 9508      RET
    0231 90A9      LD	R10,Y+
    0232 90B9      LD	R11,Y+
    0233 FDE2      SBRC	R30,2
    0234 9508      RET
    0235 90C9      LD	R12,Y+
    0236 90D9      LD	R13,Y+
    0237 FDE3      SBRC	R30,3
    0238 9508      RET
    0239 90E9      LD	R14,Y+
    023A 90F9      LD	R15,Y+
    023B 9508      RET

⌨️ 快捷键说明

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