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

📄 音乐.s

📁 用AVR 音乐合成: 1.音乐数据存放于芯片的flash存贮器中2.PA口显示不同的音阶变化。 3.音乐数据的低四位选择音调频率
💻 S
字号:
	.module _音乐.c
	.area text(rom, con, rel)
	.dbfile 音乐.c
	.dbfunc e delay_us _delay_us fV
;           time -> R16,R17
	.even
_delay_us::
	.dbline -1
	.dbline 32
; /*******************************************************************
;         实验名称:音乐合成演示实验
; 		    作者:王晓波
; 			晶振:内部    8M
; 		接线方法:
; 		        1.PC0和PD7分别接扬声器的两个输入端子。
; 		        2.PA0-PA3分别接I/O输出的O0-O3。
;         使用说明:
; 			    1.音乐数据存放于芯片的flash存贮器中。
; 				2.PA口显示不同的音阶变化。
; 				3.音乐数据的低四位选择音调频率,
; 				高四位*5后,为音调持续时间。
; ********************************************************************/
; #include <iom16v.h>
; #include <macros.h>
; #define DO	63622	//523
; #define RE	63831	//587
; #define	MI	64017	//659
; #define FA	64102	//698
; #define	SO	64259	//784
; #define LA	64398	//880
; #define	TI	64522	//988                	                        	
; #define DO_H	64578	//1046
; #define RE_H	64683	//1174
; #define MI_H	64776	//1318
; #define FA_H	64819	//1397
; #define SO_H	64897	//1568
; #define LA_H	64966	//1760
; #define TI_H	65028	//1976
; #define DO_HH	65057	//2093
; void delay_us(int time)
; {//微秒级延时程序     
L2:
	.dbline 34
;  	do
;  	{
	.dbline 35
;   	   time--;
	subi R16,1
	sbci R17,0
	.dbline 36
;  	}	
L3:
	.dbline 37
;     while (time>1);
	ldi R24,1
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlt L2
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 I
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;           time -> R20,R21
	.even
_delay_ms::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 40
; }
; void delay_ms(unsigned int time)
; {//毫秒级延时程序
	xjmp L7
L6:
	.dbline 42
	.dbline 43
	ldi R16,1000
	ldi R17,3
	xcall _delay_us
	.dbline 44
	subi R20,1
	sbci R21,0
	.dbline 45
L7:
	.dbline 41
;  	while  (time!=0)
	cpi R20,0
	cpc R20,R21
	brne L6
X0:
	.dbline -2
L5:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r time 20 i
	.dbend
	.area lit(rom, con, rel)
_sound::
	.byte 64,'L
	.byte 'J,'I
	.byte 200,'I
	.byte 'G,'F
	.byte 229,'N
	.byte 'M,'N
	.byte 'l,45
	.byte 'N,'M
	.byte 44,45
	.byte 46,45
	.byte 'o,45
	.byte 44,45
	.byte 44,41
	.byte 42,43
	.byte 42,41
	.byte 200,'L
	.byte 'N,'I
	.byte 'F,'H
	.byte 197,38
	.byte 40,229
	.byte 131,'e
	.byte 38,'h
	.byte 41,38
	.byte 40,'E
	.byte 'l,47
	.byte 61,28
	.byte 42,44
	.byte 233,'i
	.byte 42,'G
	.byte 'F,'e
	.byte 38,'H
	.byte 'I,'C
	.byte 'H,54
	.byte 21,38
	.byte 24,229
	.byte 'j,44
	.byte 'G,'I
	.byte 38,40
	.byte 133,51
	.byte 21,'C
	.byte 37,38
	.byte 39,41
	.byte 198,37
	.byte 38,'h
	.byte 41,'L
	.byte 'J,'I
	.byte 42,41
	.byte 'I,38
	.byte 37,131
	.byte 136,38
	.byte 40,38
	.byte 37,35
	.byte 37,38
	.byte 40,197
	.byte 4,4
	.byte 'I,'J
	.byte 'J,'j
	.byte 41,'H
	.byte 'F,'h
	.byte 41,200
	.byte 'I,'J
	.byte 'J,'j
	.byte 44,'J
	.byte 'J,'I
	.byte 'J,202
	.byte 'L,'M
	.byte 'M,'m
	.byte 44,'J
	.byte 'J,'L
	.byte 'M,204
	.byte 'I,'J
	.byte 'J,'i
	.byte 42,'J
	.byte 'I,'J
	.byte 'F,24
	.byte 230,41
	.byte 41,41
	.byte 40,'F
	.byte 41,41
	.byte 41,40
	.byte 'F,'I
	.byte 'J,'H
	.byte 'i,42
	.byte 'L,45
	.byte 45,45
	.byte 44,'J
	.byte 41,41
	.byte 41,40
	.byte 'F,'F
	.byte 'E,'F
	.byte 230,0
	.dbsym e sound _sound A[182:182]kc
_TONETABLE::
	.word 63622
	.word 63831
	.word 64017
	.word 64102
	.word 64259
	.word 64398
	.word 64522
	.word 64578
	.word 64683
	.word 64776
	.word 64819
	.word 64897
	.word 64966
	.word 65028
	.word 65057
	.dbsym e TONETABLE _TONETABLE A[30:15]ki
	.area vector(rom, abs)
	.org 32
	jmp _timer1_ovf_isr
	.area lit(rom, con, rel)
	.area text(rom, con, rel)
	.dbfile 音乐.c
	.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
	.even
_timer1_ovf_isr::
	st -y,R2
	st -y,R3
	st -y,R24
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 84
;     {		
;   		delay_us(1000);
;   		time--;
;      }
; }						  	
; const unsigned char sound[]={ //乐曲数据表
;                         /*************梁祝****************/
; 						0x40,0x4c,0x4a,0x49,0xc8,0x49,0x47,0x46,
; 						0xe5,0x4e,0x4d,0x4e,0x6c,0x2d,0x4e,
; 						0x4d,0x2c,0x2d,0x2e,0x2d,0x6f,0x2d,
; 						0x2c,0x2d,0x2c,0x29,0x2a,0x2b,
; 						0x2a,0x29,0xc8,0x4c,0x4e,0x49,0x46,0x48,
; 						0xc5,0x26,0x28,0xe5,0x83,0x65,0x26,
; 						0x68,0x29,0x26,0x28,0x45,0x6c,0x2f,0x3d,
; 						0x1c,0x2a,0x2c,0xe9,0x69,0x2a,0x47,0x46,
; 						0x65,0x26,0x48,0x49,0x43,0x48,0x36,0x15,
; 						0x26,0x18,0xe5,0x6a,0x2c,0x47,0x49,0x26,
; 						0x28,0x85,0x33,0x15,0x43,0x25,0x26,0x27,
; 						0x29,0xc6,0x25,0x26,0x68,0x29,0x4c,0x4a,
; 						0x49,0x2a,0x29,0x49,0x26,0x25,0x83,0x88,
; 						0x26,0x28,0x26,0x25,0x23,0x25,0x26,0x28,
; 						0xc5,0x04,0x04,
; 						/*************希望*****************/	
; 						0x49,0x4a,0x4a,0x6a,0x29,0x48,0x46,0x68,
; 						0x29,0xc8,0x49,0x4a,0x4a,0x6a,0x2c,0x4a,
; 						0x4a,0x49,0x4a,0xca,0x4c,0x4d,0x4d,0x6d,
; 						0x2c,0x4a,0x4a,0x4c,0x4d,0xcc,0x49,0x4a,
; 						0x4a,0x69,0x2a,0x4a,0x49,0x4a,0x46,
; 						0x18,0xe6,0x29,0x29,0x29,0x28,0x46,
; 						0x29,0x29,0x29,0x28,0x46,0x49,0x4a,
; 						0x48,0x69,0x2a,0x4c,0x2d,0x2d,0x2d,
; 						0x2c,0x4a,0x29,0x29,0x29,0x28,0x46,
; 						0x46,0x45,0x46,0xe6,
; 						0x00};			  		  						  
; /*	  		    音阶表				*/	
; const unsigned int TONETABLE[15]={DO,RE,MI,FA,SO,LA,TI,DO_H,
; 			    	 	RE_H,MI_H,FA_H,SO_H,LA_H,TI_H,DO_HH};
; 			    	 	
; /*			  音阶重装常数			*/						
; unsigned int toneconst;								  							   						 				 	 	 
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void)
; {
	.dbline 85
; 	  TCNT1=toneconst;
	lds R2,_toneconst
	lds R3,_toneconst+1
	out 0x2d,R3
	out 0x2c,R2
	.dbline 86
; 	  PORTC^=1;
	ldi R24,1
	in R2,0x15
	eor R2,R24
	out 0x15,R2
	.dbline -2
L9:
	ld R2,y+
	out 0x3f,R2
	ld R24,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e music _music fV
;      sound_add -> R20,R21
;          temp1 -> R22
;           temp -> R10
	.even
_music::
	xcall push_gset3
	.dbline -1
	.dbline 89
; }	 	 
; void music(void)
;  {
	.dbline 90
; 	  unsigned char temp=0,temp1=0;
	clr R10
	.dbline 90
	clr R22
	.dbline 91
; 	  unsigned int sound_add=0;
	clr R20
	clr R21
	.dbline 92
; 	  TCCR1A = 0x00;
	clr R2
	out 0x2f,R2
	.dbline 93
; 	  TCCR1B =(1<<CS11);//8分频
	ldi R24,2
	out 0x2e,R24
	.dbline 94
; 	  temp1=sound[sound_add];
	ldi R24,<_sound
	ldi R25,>_sound
	movw R30,R20
	add R30,R24
	adc R31,R25
	lpm R22,Z
	xjmp L12
L11:
	.dbline 97
; 	 
; 	  while(temp1!=0)
;  	  		{
	.dbline 98
; 			 temp=temp1; 
	mov R10,R22
	.dbline 99
; 			 temp&=0x0f;
	mov R24,R10
	andi R24,15
	mov R10,R24
	.dbline 100
; 			 if(temp!=0)
	tst R24
	breq L14
	.dbline 101
; 			   {
	.dbline 102
; 			    TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
	in R24,0x39
	ori R24,4
	out 0x39,R24
	.dbline 103
; 			    temp--;			   
	dec R10
	.dbline 104
;         	    toneconst=TONETABLE[temp];
	ldi R24,2
	mul R24,R10
	movw R30,R0
	ldi R24,<_TONETABLE
	ldi R25,>_TONETABLE
	add R30,R24
	adc R31,R25
	lpm R0,Z+
	lpm R1,Z
	movw R30,R0
	sts _toneconst+1,R31
	sts _toneconst,R30
	.dbline 105
; 			    TCNT1=toneconst;
	out 0x2d,R31
	out 0x2c,R30
	.dbline 106
; 				PORTA=toneconst;
	out 0x1b,R30
	.dbline 107
;  			   }
L14:
	.dbline 108
	mov R10,R22
	.dbline 109
	mov R24,R10
	swap R24
	andi R24,#0x0F
	.dbline 110
	andi R24,15
	mov R10,R24
	.dbline 111
	ldi R24,129
	mul R24,R10
	movw R16,R0
	xcall _delay_ms
	.dbline 112
	in R24,0x39
	andi R24,251
	out 0x39,R24
	.dbline 113
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 114
	ldi R24,<_sound
	ldi R25,>_sound
	movw R30,R20
	add R30,R24
	adc R31,R25
	lpm R22,Z
	.dbline 116
L12:
	.dbline 96
	tst R22
	brne L11
	.dbline 117
; 			 temp=temp1;
; 			 temp>>=4;
; 			 temp&=0x0f;
; 			 delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
; 			 TIMSK&=~(1<<TOIE1);
; 			 sound_add++;
; 			 temp1=sound[sound_add];
; 			
; 			}
; 		PORTC = 0xFF;	                                         	
	ldi R24,255
	out 0x15,R24
	.dbline -2
L10:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r sound_add 20 i
	.dbsym r temp1 22 c
	.dbsym r temp 10 c
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 121
; }	 	 	 	 
; /*	  	   		 主程序 	   	  		*/	  
; void main(void)
; 	 {
	.dbline 123
; 	  
; 	DDRC=0x01; 
	ldi R24,1
	out 0x14,R24
	.dbline 124
; 	DDRD=0x80;
	ldi R24,128
	out 0x11,R24
	.dbline 125
; 	DDRA=0x0f;
	ldi R24,15
	out 0x1a,R24
	.dbline 126
;     SREG=0x80;
	ldi R24,128
	out 0x3f,R24
	xjmp L18
L17:
	.dbline 128
	.dbline 129
	xcall _music
	.dbline 130
L18:
	.dbline 127
	xjmp L17
X1:
	.dbline -2
L16:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile 音乐.c
_toneconst::
	.blkb 2
	.dbsym e toneconst _toneconst i

⌨️ 快捷键说明

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