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

📄 music1.lst

📁 avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用usb口
💻 LST
字号:
__text_start:
__start:
    009E E5CF      LDI	R28,0x5F
    009F E0D4      LDI	R29,4
    00A0 BFCD      OUT	0x3D,R28
    00A1 BFDE      OUT	0x3E,R29
    00A2 51C0      SUBI	R28,0x10
    00A3 40D0      SBCI	R29,0
    00A4 EA0A      LDI	R16,0xAA
    00A5 8308      STD	Y+0,R16
    00A6 2400      CLR	R0
    00A7 E6E0      LDI	R30,0x60
    00A8 E0F0      LDI	R31,0
    00A9 E010      LDI	R17,0
    00AA 36E0      CPI	R30,0x60
    00AB 07F1      CPC	R31,R17
    00AC F011      BEQ	0x00AF
    00AD 9201      ST	R0,Z+
    00AE CFFB      RJMP	0x00AA
    00AF 8300      STD	Z+0,R16
    00B0 E3EC      LDI	R30,0x3C
    00B1 E0F1      LDI	R31,1
    00B2 E6A0      LDI	R26,0x60
    00B3 E0B0      LDI	R27,0
    00B4 E011      LDI	R17,1
    00B5 33EC      CPI	R30,0x3C
    00B6 07F1      CPC	R31,R17
    00B7 F021      BEQ	0x00BC
    00B8 95C8      LPM
    00B9 9631      ADIW	R30,1
    00BA 920D      ST	R0,X+
    00BB CFF9      RJMP	0x00B5
    00BC 940E00FE  CALL	_main
_exit:
    00BE CFFF      RJMP	_exit
_delay_ms:
  a                    --> R20
  i                    --> R16
    00BF 940E01A8  CALL	push_gset1
FILE: E:\ICCAVR-M16学习板\基础实验\模拟音乐\卡秋莎\music.c
(0001) /*****************************************
(0002) *      用M16单片机I/O口生成模拟音乐    	 *
(0003) * 功    能:用I/O口生成模拟音乐			 *
(0004) * 时钟频率:内部1M 						 *
(0005) * 设    计:tonghe						 *
(0006) * 修改日期:2007年04月13日				 *
(0007) * 编译环境:ICC-AVR6.31					 *
(0008) * 实验环境:本站M16学习板				 *
(0009) * 发    声:无源蜂鸣器					 *
(0010) * 结    果:试验通过					 *
(0011) * 要    求:插上JP1、JP2、LED_EN短路块	 *
(0012) *****************************************/
(0013) #include <iom16v.h> 
(0014) #include <macros.h>
(0015) 
(0016) #define uchar unsigned char
(0017) #define uint unsigned int
(0018) 
(0019) /****************************************
(0020) *     定义音乐数据二维数组{x,y}			*
(0021) *  x:对应音符音阶(频率),0表示休止符	*
(0022) *  y:对应音符节拍,0表示音乐结束		*
(0023) *  此数据取自《ICC AVR应用实例》		*
(0024) ****************************************/
(0025) //以下音乐数据为《卡秋莎》,位于程序区
(0026) flash uint music_data[][2]=
(0027)     {
(0028) 	{440,600},{494,200},{523,600},{443,200},{523,400},{494,200},
(0029) 	{440,200},{494,400},{330,400},{494,600},{523,200},{578,600},
(0030) 	{494,200},{578,400},{523,200},{494,200},{440,800},{659,400},
(0031) 	{880,400},{784,400},{880,200},{784,200},{698,400},{659,200},
(0032) 	{578,200},{659,400},{440,400},{  0,200},{698,400},{578,200},
(0033) 	{659,600},{523,200},{494,200},{330,200},{523,200},{494,200},
(0034) 	{440,800},{659,400},{880,400},{784,400},{880,200},{784,200},
(0035) 	{698,400},{659,200},{578,200},{659,400},{440,400},{  0,200},
(0036) 	{698,400},{578,200},{659,600},{523,200},{494,200},{330,200},
(0037) 	{523,200},{494,200},{440,800},{  0,  0}
(0038) 	};
(0039) 	
(0040) #pragma data:data					 //设置回到数据存储器区
(0041) 
(0042) /************************************
(0043) *     延时函数:1M时钟时为MS	    *
(0044) ************************************/
(0045) void delay_ms(uint i)
(0046)     {
(0047) 	uchar a;
(0048) 	for(;i;i--) 
    00C1 C007      RJMP	0x00C9
(0049) 	    {
(0050) 		for (a = 220; a; a--) 
    00C2 ED4C      LDI	R20,0xDC
    00C3 C001      RJMP	0x00C5
    00C4 954A      DEC	R20
    00C5 2344      TST	R20
    00C6 F7E9      BNE	0x00C4
    00C7 5001      SUBI	R16,1
    00C8 4010      SBCI	R17,0
    00C9 3000      CPI	R16,0
    00CA 0701      CPC	R16,R17
    00CB F7B1      BNE	0x00C2
    00CC 940E01AB  CALL	pop_gset1
    00CE 9508      RET
(0051) 		    {
(0052) 			;
(0053) 			}
(0054) 		}
(0055) 	}
(0056) 
(0057) /************************************
(0058) *         端口初始化函数			*
(0059) ************************************/
(0060) void port_init(void)
(0061)     {
(0062) 	DDRD=0xff;						 //D口配置为输出,驱动蜂鸣器
_port_init:
    00CF EF8F      LDI	R24,0xFF
    00D0 BB81      OUT	0x11,R24
(0063) 	DDRB=0xff;						 //B口配置为输出,驱动LED
    00D1 BB87      OUT	0x17,R24
(0064) 	PORTB=0xff;						 //LED初值为灭
    00D2 BB88      OUT	0x18,R24
    00D3 9508      RET
_sound:
  x                    --> R10
  i                    --> R10
    00D4 940E01A4  CALL	push_gset3
    00D6 2EA0      MOV	R10,R16
(0065) 	}
(0066) 
(0067) /***********************************
(0068) *           音乐产生函数		   *
(0069) * 功能:输出频率为x的方波,延时y MS*
(0070) * 范围:x:100-20000Hz,0:不发声   *
(0071) * 	    y:0-65536 MS			   *
(0072) ***********************************/
(0073) void sound(uchar i)
(0074)     {
(0075) 	uint x;
(0076) 	x=music_data[i][0];				//取音乐的频率数据
    00D7 E084      LDI	R24,4
    00D8 9D8A      MUL	R24,R10
    00D9 01F0      MOVW	R30,R0
    00DA E584      LDI	R24,0x54
    00DB E090      LDI	R25,0
    00DC 0FE8      ADD	R30,R24
    00DD 1FF9      ADC	R31,R25
    00DE 90A5      LPM	R10,Z+
    00DF 90B4      LPM	R11,0(Z)
(0077) 	if(x!=0)
    00E0 20AA      TST	R10
    00E1 F411      BNE	0x00E4
    00E2 20BB      TST	R11
    00E3 F0A9      BEQ	0x00F9
(0078) 	    {
(0079) 		x=500000/x;					//1M时钟数据计算
    00E4 0115      MOVW	R2,R10
    00E5 2444      CLR	R4
    00E6 2455      CLR	R5
    00E7 E240      LDI	R20,0x20
    00E8 EA51      LDI	R21,0xA1
    00E9 E067      LDI	R22,7
    00EA E070      LDI	R23,0
    00EB 925A      ST	R5,-Y
    00EC 924A      ST	R4,-Y
    00ED 923A      ST	R3,-Y
    00EE 922A      ST	R2,-Y
    00EF 018A      MOVW	R16,R20
    00F0 019B      MOVW	R18,R22
    00F1 940E0132  CALL	div32s
    00F3 0158      MOVW	R10,R16
(0080) 		OCR1A=x;					//比较值赋值
    00F4 BD1B      OUT	0x2B,R17
    00F5 BD0A      OUT	0x2A,R16
(0081) 		TCCR1A = 0x40;				//允许比较反转输出
    00F6 E480      LDI	R24,0x40
    00F7 BD8F      OUT	0x2F,R24
(0082) 		}
    00F8 C002      RJMP	0x00FB
(0083) 	else
(0084) 		{
(0085) 		TCCR1A = 0x00;				//频率为0,休止符,不发声
    00F9 2422      CLR	R2
    00FA BC2F      OUT	0x2F,R2
(0086) 		}
    00FB 940E019D  CALL	pop_gset3
    00FD 9508      RET
(0087) 	}
(0088) /*******************************
(0089) *             主函数		   *
(0090) *******************************/
(0091) void main(void)
(0092) 	{
(0093) 	uchar i=0;
_main:
  i                    --> R20
    00FE 2744      CLR	R20
(0094) 	port_init();					//端口初始化
    00FF DFCF      RCALL	_port_init
(0095) 	TCCR1A = 0x40;					//将T/C1配置为比较匹配,OC1A取反
    0100 E480      LDI	R24,0x40
    0101 BD8F      OUT	0x2F,R24
(0096) 	TCCR1B = 0x09;
    0102 E089      LDI	R24,0x9
    0103 BD8E      OUT	0x2E,R24
    0104 C025      RJMP	0x012A
(0097) 	while(1)
(0098) 	    {
(0099) 		while(music_data[i][1]!=0)	//等待最后一个音符到来
(0100) 		    {
(0101) 			sound(i);				//输出音符
    0105 2F04      MOV	R16,R20
    0106 DFCD      RCALL	_sound
(0102) 			delay_ms(music_data[i][1]);//节拍延时
    0107 E084      LDI	R24,4
    0108 9F84      MUL	R24,R20
    0109 01F0      MOVW	R30,R0
    010A E586      LDI	R24,0x56
    010B E090      LDI	R25,0
    010C 0FE8      ADD	R30,R24
    010D 1FF9      ADC	R31,R25
    010E 9105      LPM	R16,Z+
    010F 9114      LPM	R17,0(Z)
    0110 DFAE      RCALL	_delay_ms
(0103) 			TCCR1A = 0x00;			//奏完一个音符停止
    0111 2422      CLR	R2
    0112 BC2F      OUT	0x2F,R2
(0104) 			PORTB^=1<<5;			//音符节拍由LD5闪亮显示
    0113 E280      LDI	R24,0x20
    0114 B228      IN	R2,0x18
    0115 2628      EOR	R2,R24
    0116 BA28      OUT	0x18,R2
(0105) 			PORTD|=1<<5;
    0117 9A95      SBI	0x12,5
(0106) 			i++;					//准备一下个音符
    0118 9543      INC	R20
    0119 E084      LDI	R24,4
    011A 9F84      MUL	R24,R20
    011B 01F0      MOVW	R30,R0
    011C E586      LDI	R24,0x56
    011D E090      LDI	R25,0
    011E 0FE8      ADD	R30,R24
    011F 1FF9      ADC	R31,R25
    0120 9005      LPM	R0,Z+
    0121 9014      LPM	R1,0(Z)
    0122 01F0      MOVW	R30,R0
    0123 30E0      CPI	R30,0
    0124 07EF      CPC	R30,R31
    0125 F6F9      BNE	0x0105
(0107) 			}
(0108) 		delay_ms(1000);
    0126 EE08      LDI	R16,0xE8
    0127 E013      LDI	R17,3
    0128 DF96      RCALL	_delay_ms
(0109) 		i=0; 						//一遍结束,停1秒,从头开始
FILE: <library>
    0129 2744      CLR	R20
    012A CFEE      RJMP	0x0119
    012B 9508      RET
div32u:
    012C 94E8      BCLR	6
    012D C001      RJMP	0x012F
mod32u:
    012E 9468      BSET	6
    012F D02F      RCALL	long_div_prolog
    0130 24CC      CLR	R12
    0131 C008      RJMP	0x013A
div32s:
    0132 94E8      BCLR	6
    0133 C001      RJMP	0x0135
mod32s:
    0134 9468      BSET	6
    0135 D029      RCALL	long_div_prolog
    0136 FD37      SBRC	R19,7
    0137 D053      RCALL	neg_R16_R19
    0138 FDB7      SBRC	R27,7
    0139 D05A      RCALL	neg_R24_R27
    013A 2477      CLR	R7
    013B 2488      CLR	R8
    013C 2499      CLR	R9
    013D 24AA      CLR	R10
    013E 24BB      CLR	R11
    013F D041      RCALL	tst_R16_R19
    0140 F0C1      BEQ	0x0159
    0141 D044      RCALL	tst_R24_R27
    0142 F0B1      BEQ	0x0159
    0143 E2E8      LDI	R30,0x28
    0144 0F00      LSL	R16
    0145 1F11      ROL	R17
    0146 1F22      ROL	R18
    0147 1F33      ROL	R19
    0148 1C77      ROL	R7
    0149 1C88      ROL	R8
    014A 1C99      ROL	R9
    014B 1CAA      ROL	R10
    014C 1CBB      ROL	R11
    014D 1688      CP	R8,R24
    014E 0699      CPC	R9,R25
    014F 06AA      CPC	R10,R26
    0150 06BB      CPC	R11,R27
    0151 F028      BCS	0x0157
    0152 1A88      SUB	R8,R24
    0153 0A99      SBC	R9,R25
    0154 0AAA      SBC	R10,R26
    0155 0ABB      SBC	R11,R27
    0156 9503      INC	R16
    0157 95EA      DEC	R30
    0158 F759      BNE	0x0144
    0159 F426      BRTC	0x015E
    015A 2D08      MOV	R16,R8
    015B 2D19      MOV	R17,R9
    015C 2D2A      MOV	R18,R10
    015D 2D3B      MOV	R19,R11
    015E C013      RJMP	long_div_epilog
long_div_prolog:
    015F 927A      ST	R7,-Y
    0160 928A      ST	R8,-Y
    0161 929A      ST	R9,-Y
    0162 92AA      ST	R10,-Y
    0163 92BA      ST	R11,-Y
    0164 92CA      ST	R12,-Y
    0165 93EA      ST	R30,-Y
    0166 938A      ST	R24,-Y
    0167 939A      ST	R25,-Y
    0168 93AA      ST	R26,-Y
    0169 93BA      ST	R27,-Y
    016A 858B      LDD	R24,Y+11
    016B 859C      LDD	R25,Y+12
    016C 85AD      LDD	R26,Y+13
    016D 85BE      LDD	R27,Y+14
    016E 2EC3      MOV	R12,R19
    016F F00E      BRTS	0x0171
    0170 26CB      EOR	R12,R27
    0171 9508      RET
long_div_epilog:
    0172 FCC7      SBRC	R12,7
    0173 D017      RCALL	neg_R16_R19
    0174 91B9      LD	R27,Y+
    0175 91A9      LD	R26,Y+
    0176 9199      LD	R25,Y+
    0177 9189      LD	R24,Y+
    0178 91E9      LD	R30,Y+
    0179 90C9      LD	R12,Y+
    017A 90B9      LD	R11,Y+
    017B 90A9      LD	R10,Y+
    017C 9099      LD	R9,Y+
    017D 9089      LD	R8,Y+
    017E 9079      LD	R7,Y+
    017F 9624      ADIW	R28,4
    0180 9508      RET
tst_R16_R19:
    0181 2FE0      MOV	R30,R16
    0182 2BE1      OR	R30,R17
    0183 2BE2      OR	R30,R18
    0184 2BE3      OR	R30,R19
    0185 9508      RET
tst_R24_R27:
    0186 2FE8      MOV	R30,R24
    0187 2BE9      OR	R30,R25
    0188 2BEA      OR	R30,R26
    0189 2BEB      OR	R30,R27
    018A 9508      RET
neg_R16_R19:
    018B 9500      COM	R16
    018C 9510      COM	R17
    018D 9520      COM	R18
    018E 9530      COM	R19
    018F 5F0F      SUBI	R16,0xFF
    0190 4F1F      SBCI	R17,0xFF
    0191 4F2F      SBCI	R18,0xFF
    0192 4F3F      SBCI	R19,0xFF
    0193 9508      RET
neg_R24_R27:
    0194 9580      COM	R24
    0195 9590      COM	R25
    0196 95A0      COM	R26
    0197 95B0      COM	R27
    0198 5F8F      SUBI	R24,0xFF
    0199 4F9F      SBCI	R25,0xFF
    019A 4FAF      SBCI	R26,0xFF
    019B 4FBF      SBCI	R27,0xFF
    019C 9508      RET
pop_gset3:
    019D E0E4      LDI	R30,4
    019E 940C01AC  JMP	pop
push_gset5:
    01A0 92FA      ST	R15,-Y
    01A1 92EA      ST	R14,-Y
push_gset4:
    01A2 92DA      ST	R13,-Y
    01A3 92CA      ST	R12,-Y
push_gset3:
    01A4 92BA      ST	R11,-Y
    01A5 92AA      ST	R10,-Y
push_gset2:
    01A6 937A      ST	R23,-Y
    01A7 936A      ST	R22,-Y
push_gset1:
    01A8 935A      ST	R21,-Y
    01A9 934A      ST	R20,-Y
    01AA 9508      RET
pop_gset1:
    01AB E0E1      LDI	R30,1
pop:
    01AC 9149      LD	R20,Y+
    01AD 9159      LD	R21,Y+
    01AE FDE0      SBRC	R30,0
    01AF 9508      RET
    01B0 9169      LD	R22,Y+
    01B1 9179      LD	R23,Y+
    01B2 FDE1      SBRC	R30,1
    01B3 9508      RET
    01B4 90A9      LD	R10,Y+
    01B5 90B9      LD	R11,Y+
    01B6 FDE2      SBRC	R30,2
    01B7 9508      RET
    01B8 90C9      LD	R12,Y+
    01B9 90D9      LD	R13,Y+
    01BA FDE3      SBRC	R30,3
    01BB 9508      RET
    01BC 90E9      LD	R14,Y+
    01BD 90F9      LD	R15,Y+
    01BE 9508      RET

⌨️ 快捷键说明

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