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

📄 diy0816-11.lst

📁 AVR单片机应用开发指南及实例,包含许多实例,挺不错
💻 LST
字号:
__text_start:
__start:
    017C E5CF      LDI	R28,0x5F
    017D E0D4      LDI	R29,4
    017E BFCD      OUT	0x3D,R28
    017F BFDE      OUT	0x3E,R29
    0180 51C0      SUBI	R28,0x10
    0181 40D0      SBCI	R29,0
    0182 EA0A      LDI	R16,0xAA
    0183 8308      STD	Y+0,R16
    0184 2400      CLR	R0
    0185 E6E0      LDI	R30,0x60
    0186 E0F0      LDI	R31,0
    0187 E010      LDI	R17,0
    0188 36E2      CPI	R30,0x62
    0189 07F1      CPC	R31,R17
    018A F011      BEQ	0x018D
    018B 9201      ST	R0,Z+
    018C CFFB      RJMP	0x0188
    018D 8300      STD	Z+0,R16
    018E EFE7      LDI	R30,0xF7
    018F E0F2      LDI	R31,2
    0190 E6A0      LDI	R26,0x60
    0191 E0B0      LDI	R27,0
    0192 E012      LDI	R17,2
    0193 3FE7      CPI	R30,0xF7
    0194 07F1      CPC	R31,R17
    0195 F021      BEQ	0x019A
    0196 95C8      LPM
    0197 9631      ADIW	R30,1
    0198 920D      ST	R0,X+
    0199 CFF9      RJMP	0x0193
    019A 940E020F  CALL	_main
_exit:
    019C CFFF      RJMP	_exit
FILE: D:\SL-DIY~1\diy0208_16_11\diy0816_11.c
(0001) //11.	I/O端口的又一应用-声音输入处理。
(0002) //请修改以上程序,如何用声控来启动。
(0003) //     www.sl.com.cn
(0004) //     teny@sl.com.cn    05-11-12
(0005) // Target : mega16     Crystal: 8.0000Mhz
(0006) 
(0007) #include <iom16v.h>
(0008) #include <macros.h>
(0009) /* 		  音乐数据  	  */
(0010) /* 四分之一拍为0x10, 二分之一拍为0x20, 一拍为0x40*/
(0011) /* 低1-1 2-2 3-3 4-4 5-5 6-6 7-7 */
(0012) /* 中1-8 2-9 3-A 4-B 5-C 6-D 7-E */
(0013) /* 高1-F*/			
(0014) 					  	
(0015) const unsigned char sound[]={ //乐曲数据表
(0016) 	  		   				  0x23,0x24,0x25,0x44,0x45,0x24,0x23,0x22,0x42,0x40,0x40,0x23,0x22,0x21,0x41,0x28,
(0017) 							  0x48,0x23,0x25,0x45,0x40,0x40,0x21,0x21,0x42,0x21,0x21,0x41,0x20,0x28,0x47,0x26,
(0018) 							  0x17,0x16,0x15,0x45,0x40,0x31,0x11,0x21,0x21,0x21,0x22,0x42,0x40,0x20,0x23,0x23,
(0019) 							  0x24,0x25,0x24,0x23,0x24,0x25,0x26,0x23,0x23,0x42,0x42,0x40,0x23,0x22,0x21,0x41,
(0020) 							  0x28,0x28,0x28,0x23,0x25,0x45,0x45,0x40,0x20,0x25,0x46,0x28,0x28,0x48,0x20,0x29,
(0021) 							  0x47,0x26,0x17,0x16,0x15,0x45,0x25,0x25,0x26,0x28,0x18,0x16,0x26,0x28,0x26,0x28,
(0022) 							  0x19,0x19,0x49,0x49,0x20,0x25,0x2a,0x18,0x19,0x29,0x28,0x16,0x17,0x16,0x15,0x25,
(0023) 							  0x25,0x28,0x29,0x2a,0x29,0x48,0x28,0x48,0x2c,0x4c,0x4c,0x40,0x2a,0x2c,0x1c,0x1a,
(0024) 							  0x2a,0x2a,0x29,0x4a,0x2b,0x2a,0x4a,0x4a,0x40,0x2a,0x29,0x29,0x28,0x28,0x26,0x48,
(0025) 							  0x29,0x26,0x45,0x45,0x40,0x25,0x25,0x26,0x21,0x18,0x16,0x26,0x28,0x26,0x28,0x29,
(0026) 							  0x49,0x49,0x20,0x25,0x28,0x29,0x2a,0x29,0x49,0x28,0x48,0x2c,0x4c,0x4c,0x40,0x2a,
(0027) 							  0x2c,0x15,0x1a,0x2a,0x2a,0x29,0x4a,0x2b,0x2a,0x4a,0x4a,0x40,0x2a,0x29,0x29,0x28,
(0028) 							  0x28,0x26,0x28,0x28,0x29,0x26,0x45,0x45,0x40,0x25,0x25,0x26,0x28,0x28,0x26,0x2a,
(0029) 							  0x19,0x18,0x28,0x18,0x19,0x48,0x48,0x40,0x40,0x40,0x40,0x28,0x48,0x29,0x28,0x28,
(0030) 							  0x2a,0x1a,0x1a,0x1a,0x18,0x40,0x20,0x26,0x28,0x28,0x28,0x26,0x28,0x48,0x26,0x25,
(0031) 							  0x45,0x45,0x40,0x40,0x40,0x28,0x48,0x28,0x28,0x1c,0x1d,0x2d,0x2c,0x28,0x28,0x28,
(0032) 							  0x20,0x26,0x19,0x1a,0x29,0x19,0x18,0x28,0x28,0x26,0x21,0x29,0x49,0x49,0x40,0x20,
(0033) 							  0x28,0x29,0x2a,0x4a,0x4a,0x20,0x25,0x28,0x29,0x48,0x48,0x48,0x25,0x25,0x26,0x28,
(0034) 							  0x28,0x26,0x2a,0x19,0x18,0x28,0x18,0x19,0x49,0x49,0x40,0x40,
(0035) 
(0036)                         0x25,0x28,0x2A,0x4A,0x29,0x28,0x48,0x28,        
(0037)                         0x26,0x46,0x28,0x45,0x25,0x28,0x2A,0x4A,
(0038) 						0x29,0x28,0x48,0x28,0x29,0x49,0x2A,0x49,
(0039) 						0x40,0x2A,0x4A,0x2B,0x4C,0x40,0x3D,0x1D,
(0040) 						0x2D,0x2D,0x4C,0x40,0x2A,0x4A,0x2C,0x48,
(0041) 						0x28,0x2A,0x29,0x46,0x25,0x48,0x40,
(0042) 						
(0043) 						0x2a,0x2a,0x4a,0x2a,0x2a,0x4a,0x2a,0x2c,0x28,0x29,
(0044) 	  		   			0x4a,0x4a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,
(0045) 						0x2a,0x29,0x29,0x28,0x49,0x4c,0x2a,0x2a,0x4a,0x2a,
(0046) 						0x2a,0x4a,0x2a,0x2c,0x28,0x29,0x4a,0x4a,0x2b,0x2b,
(0047) 						0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2c,0x2c,0x2b,0x29,
(0048) 						0x48,0x48,
(0049) 						
(0050) 						0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,0x46,0x46,
(0051)                         0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,0x4a,0x4a,
(0052) 						0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,0x2a,0x28,
(0053) 						0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,0x46,0x46,
(0054) 						0x46,0x46,0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,
(0055) 						0x46,0x46,0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,
(0056) 						0x4a,0x4a,0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,
(0057) 						0x2a,0x28,0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,
(0058) 						0x46,0x46,0x46,0x46,
(0059) 						
(0060) 						0x43,0x43,0x45,0x49,0x49,0x49,0x48,0x48,0x45,0x44,
(0061) 	  		            0x44,0x44,0x43,0x43,0x43,0x43,0x44,0x45,0x46,0x46,
(0062) 						0x46,0x45,0x45,0x45,0x43,0x43,0x45,0x49,0x49,0x49,
(0063) 						0x48,0x48,0x45,0x44,0x44,0x44,0x43,0x43,0x45,0x45,
(0064) 						0x46,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,
(0065) 						0x45,0x47,0x46,0x45,0x43,0x43,0x45,0x48,0x48,0x48,
(0066) 						0x46,0x46,0x48,0x49,0x49,0x48,0x47,0x47,0x47,0x45,
(0067) 						0x45,0x45,0x43,0x43,0x45,0x49,0x49,0x49,0x48,0x48,
(0068) 						0x45,0x44,0x44,0x44,0x43,0x43,0x45,0x45,0x46,0x47,
(0069) 						0x48,0x48,0x48,0x48,0x40,0x40,
(0070) 						
(0071) 						0x45,0x48,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x49,0x4a,
(0072) 	  		            0x49,0x48,0x48,0x48,0x48,0x48,0x45,0x48,0x4a,0x4a,
(0073) 						0x48,0x4a,0x4c,0x4c,0x4b,0x4a,0x49,0x49,0x49,0x49,
(0074) 						0x49,0x4c,0x4b,0x4a,0x4a,0x4a,0x49,0x48,0x48,0x49,
(0075) 						0x4a,0x4c,0x4b,0x4b,0x4b,0x4b,0x4b,0x46,0x46,0x45,
(0076) 						0x45,0x45,0x47,0x48,0x49,0x49,0x4a,0x49,0x48,0x48,
(0077) 						0x48,0x48,0x48,0x48,
(0078) 												
(0079) 						0x00,0x00
(0080) 						};
(0081) 
(0082) /*	  		    音阶表				*/	
(0083) const unsigned int TONETABLE[15]={
(0084)          64580,64684,64777,64820,64898,64968,65030,65058,
(0085)          65110,65157,65178,65217,65252,65283,65297
(0086) 						         };
(0087) /*			  音阶重装常数			*/						
(0088) /*	  		    微秒级延时程序			*/	 
(0089) void delay_us(int time)
(0090) {     
(0091)  do
(0092)  {
(0093)   time--;
_delay_us:
  time                 --> R16
    019D 5001      SUBI	R16,1
    019E 4010      SBCI	R17,0
(0094)  }	
(0095)   while (time>1);
    019F E081      LDI	R24,1
    01A0 E090      LDI	R25,0
    01A1 1780      CP	R24,R16
    01A2 0791      CPC	R25,R17
    01A3 F3CC      BLT	0x019D
    01A4 9508      RET
_delay_ms:
  time                 --> R20
    01A5 940E0229  CALL	push_gset1
    01A7 01A8      MOVW	R20,R16
(0096) }	  
(0097) 
(0098) /*	  		    毫秒级延时程序			*/	 
(0099) void delay_ms(unsigned int time)
(0100) {
    01A8 C005      RJMP	0x01AE
(0101)  while(time!=0)
(0102)  {		
(0103)   delay_us(1000);
    01A9 EE08      LDI	R16,0xE8
    01AA E013      LDI	R17,3
    01AB DFF1      RCALL	_delay_us
(0104)   time--;
    01AC 5041      SUBI	R20,1
    01AD 4050      SBCI	R21,0
    01AE 3040      CPI	R20,0
    01AF 0745      CPC	R20,R21
    01B0 F7C1      BNE	0x01A9
    01B1 940E022C  CALL	pop_gset1
    01B3 9508      RET
_timer1_ovf_isr:
    01B4 922A      ST	R2,-Y
    01B5 923A      ST	R3,-Y
    01B6 938A      ST	R24,-Y
    01B7 B62F      IN	R2,0x3F
    01B8 922A      ST	R2,-Y
(0105)  }
(0106) }		
(0107) 
(0108) unsigned int toneconst;								  							   						 				 	 	 
(0109) #pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
(0110) void timer1_ovf_isr(void)
(0111) 	 {
(0112) 	  TCNT1=toneconst;
    01B9 90200060  LDS	R2,toneconst
    01BB 90300061  LDS	R3,toneconst+1
    01BD BC3D      OUT	0x2D,R3
    01BE BC2C      OUT	0x2C,R2
(0113) 	  PORTC^=1;
    01BF E081      LDI	R24,1
    01C0 B225      IN	R2,0x15
    01C1 2628      EOR	R2,R24
    01C2 BA25      OUT	0x15,R2
    01C3 9029      LD	R2,Y+
    01C4 BE2F      OUT	0x3F,R2
    01C5 9189      LD	R24,Y+
    01C6 9039      LD	R3,Y+
    01C7 9029      LD	R2,Y+
    01C8 9518      RETI
_music:
  sound_add            --> R20
  temp1                --> R22
  temp                 --> R10
    01C9 940E0225  CALL	push_gset3
(0114) 	 }	 	 
(0115) void music(void)
(0116)  	 {
(0117) 	  unsigned char temp,temp1;
(0118) 	  unsigned int sound_add=0;
    01CB 2744      CLR	R20
    01CC 2755      CLR	R21
(0119)  	  TCCR1A = 0x00;
    01CD 2422      CLR	R2
    01CE BC2F      OUT	0x2F,R2
(0120) 	  TCCR1B =(1<<CS11);//8分频
    01CF E082      LDI	R24,2
    01D0 BD8E      OUT	0x2E,R24
(0121) 	  temp1 = sound[sound_add];
    01D1 E584      LDI	R24,0x54
    01D2 E090      LDI	R25,0
    01D3 01FA      MOVW	R30,R20
    01D4 0FE8      ADD	R30,R24
    01D5 1FF9      ADC	R31,R25
    01D6 9164      LPM	R22,0(Z)
    01D7 C02F      RJMP	0x0207
(0122) 	  while(temp1!=0)
(0123)  	  		{
(0124) 			temp=temp1; 
    01D8 2EA6      MOV	R10,R22
(0125) 			temp&=0x0f;
    01D9 2D8A      MOV	R24,R10
    01DA 708F      ANDI	R24,0xF
    01DB 2EA8      MOV	R10,R24
(0126) 			if(temp!=0)
    01DC 2388      TST	R24
    01DD F0A1      BEQ	0x01F2
(0127) 			  {
(0128) 			   TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
    01DE B789      IN	R24,0x39
    01DF 6084      ORI	R24,4
    01E0 BF89      OUT	0x39,R24
(0129) 			   temp--;			   
    01E1 94AA      DEC	R10
(0130)         	   toneconst=TONETABLE[temp];
    01E2 E082      LDI	R24,2
    01E3 9D8A      MUL	R24,R10
    01E4 01F0      MOVW	R30,R0
    01E5 ED89      LDI	R24,0xD9
    01E6 E092      LDI	R25,2
    01E7 0FE8      ADD	R30,R24
    01E8 1FF9      ADC	R31,R25
    01E9 9005      LPM	R0,Z+
    01EA 9014      LPM	R1,0(Z)
    01EB 01F0      MOVW	R30,R0
    01EC 93F00061  STS	toneconst+1,R31
    01EE 93E00060  STS	toneconst,R30
(0131) 			   TCNT1=toneconst;
    01F0 BDFD      OUT	0x2D,R31
    01F1 BDEC      OUT	0x2C,R30
(0132)  			  }
(0133) 			temp=temp1;
    01F2 2EA6      MOV	R10,R22
(0134) 			temp>>=4;
    01F3 2D8A      MOV	R24,R10
    01F4 9582      SWAP	R24
    01F5 708F      ANDI	R24,0xF
(0135) 			temp&=0x0f;
    01F6 708F      ANDI	R24,0xF
    01F7 2EA8      MOV	R10,R24
(0136) 			delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
    01F8 E881      LDI	R24,0x81
    01F9 9D8A      MUL	R24,R10
    01FA 0180      MOVW	R16,R0
    01FB DFA9      RCALL	_delay_ms
(0137) 			TIMSK&=~(1<<TOIE1);
    01FC B789      IN	R24,0x39
    01FD 7F8B      ANDI	R24,0xFB
    01FE BF89      OUT	0x39,R24
(0138) 			sound_add++;
    01FF 5F4F      SUBI	R20,0xFF
    0200 4F5F      SBCI	R21,0xFF
(0139) 			temp1 = sound[sound_add]; 
    0201 E584      LDI	R24,0x54
    0202 E090      LDI	R25,0
    0203 01FA      MOVW	R30,R20
    0204 0FE8      ADD	R30,R24
    0205 1FF9      ADC	R31,R25
    0206 9164      LPM	R22,0(Z)
    0207 2366      TST	R22
    0208 F679      BNE	0x01D8
(0140) 			}
(0141) 		delay_ms(1000);	                                         	
    0209 EE08      LDI	R16,0xE8
    020A E013      LDI	R17,3
    020B DF99      RCALL	_delay_ms
    020C 940E021E  CALL	pop_gset3
    020E 9508      RET
(0142) 	 }	 	 	 	 
(0143) /*	  	   		 主程序 	   	  		*/	  
(0144) void main(void)
(0145) 	 {
(0146) 	  DDRB=0x00;
_main:
    020F 2422      CLR	R2
    0210 BA27      OUT	0x17,R2
(0147) 	  PORTB=0xff;
    0211 EF8F      LDI	R24,0xFF
    0212 BB88      OUT	0x18,R24
(0148) 	  DDRC=0x01;
    0213 E081      LDI	R24,1
    0214 BB84      OUT	0x14,R24
(0149) 	  PORTC=0xff;
    0215 EF8F      LDI	R24,0xFF
    0216 BB85      OUT	0x15,R24
(0150) 	  SEI();
    0217 9478      BSET	7
(0151)       
(0152) 	  while(PINB & 0x04);//等待声控(PB2)启动	
    0218 99B2      SBIC	0x16,2
    0219 CFFE      RJMP	0x0218
    021A C001      RJMP	0x021C
(0153) 	  
(0154) 	  while(1)
(0155) 	   	{
(0156) 	     music();
FILE: <library>
    021B DFAD      RCALL	_music
    021C CFFE      RJMP	0x021B
    021D 9508      RET
pop_gset3:
    021E E0E4      LDI	R30,4
    021F 940C022D  JMP	pop
push_gset5:
    0221 92FA      ST	R15,-Y
    0222 92EA      ST	R14,-Y
push_gset4:
    0223 92DA      ST	R13,-Y
    0224 92CA      ST	R12,-Y
push_gset3:
    0225 92BA      ST	R11,-Y
    0226 92AA      ST	R10,-Y
push_gset2:
    0227 937A      ST	R23,-Y
    0228 936A      ST	R22,-Y
push_gset1:
    0229 935A      ST	R21,-Y
    022A 934A      ST	R20,-Y
    022B 9508      RET
pop_gset1:
    022C E0E1      LDI	R30,1
pop:
    022D 9149      LD	R20,Y+
    022E 9159      LD	R21,Y+
    022F FDE0      SBRC	R30,0
    0230 9508      RET
    0231 9169      LD	R22,Y+
    0232 9179      LD	R23,Y+
    0233 FDE1      SBRC	R30,1
    0234 9508      RET
    0235 90A9      LD	R10,Y+
    0236 90B9      LD	R11,Y+
    0237 FDE2      SBRC	R30,2
    0238 9508      RET
    0239 90C9      LD	R12,Y+
    023A 90D9      LD	R13,Y+
    023B FDE3      SBRC	R30,3
    023C 9508      RET
    023D 90E9      LD	R14,Y+
    023E 90F9      LD	R15,Y+
    023F 9508      RET

⌨️ 快捷键说明

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