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

📄 music.s

📁 avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用usb口
💻 S
字号:
	.module music.c
	.area lit(rom, con, rel)
_music_data::
	.word 440
	.word 600
	.word 494
	.word 200
	.word 523
	.word 600
	.word 443
	.word 200
	.word 523
	.word 400
	.word 494
	.word 200
	.word 440
	.word 200
	.word 494
	.word 400
	.word 330
	.word 400
	.word 494
	.word 600
	.word 523
	.word 200
	.word 578
	.word 600
	.word 494
	.word 200
	.word 578
	.word 400
	.word 523
	.word 200
	.word 494
	.word 200
	.word 440
	.word 800
	.word 659
	.word 400
	.word 880
	.word 400
	.word 784
	.word 400
	.word 880
	.word 200
	.word 784
	.word 200
	.word 698
	.word 400
	.word 659
	.word 200
	.word 578
	.word 200
	.word 659
	.word 400
	.word 440
	.word 400
	.word 0
	.word 200
	.word 698
	.word 400
	.word 578
	.word 200
	.word 659
	.word 600
	.word 523
	.word 200
	.word 494
	.word 200
	.word 330
	.word 200
	.word 523
	.word 200
	.word 494
	.word 200
	.word 440
	.word 800
	.word 659
	.word 400
	.word 880
	.word 400
	.word 784
	.word 400
	.word 880
	.word 200
	.word 784
	.word 200
	.word 698
	.word 400
	.word 659
	.word 200
	.word 578
	.word 200
	.word 659
	.word 400
	.word 440
	.word 400
	.word 0
	.word 200
	.word 698
	.word 400
	.word 578
	.word 200
	.word 659
	.word 600
	.word 523
	.word 200
	.word 494
	.word 200
	.word 330
	.word 200
	.word 523
	.word 200
	.word 494
	.word 200
	.word 440
	.word 800
	.word 0
	.word 0
	.dbfile E:\ICCAVR-M16学习板\基础实验\模拟音乐\卡秋莎\music.c
	.dbsym e music_data _music_data A[232:58:2]ki
	.area data(ram, con, rel)
	.dbfile E:\ICCAVR-M16学习板\基础实验\模拟音乐\卡秋莎\music.c
	.area text(rom, con, rel)
	.dbfile E:\ICCAVR-M16学习板\基础实验\模拟音乐\卡秋莎\music.c
	.dbfunc e delay_ms _delay_ms fV
;              a -> R20
;              i -> R16,R17
	.even
_delay_ms::
	xcall push_gset1
	.dbline -1
	.dbline 46
; /*****************************************
; *      用M16单片机I/O口生成模拟音乐    	 *
; * 功    能:用I/O口生成模拟音乐			 *
; * 时钟频率:内部1M 						 *
; * 设    计:tonghe						 *
; * 修改日期:2007年04月13日				 *
; * 编译环境:ICC-AVR6.31					 *
; * 实验环境:本站M16学习板				 *
; * 发    声:无源蜂鸣器					 *
; * 结    果:试验通过					 *
; * 要    求:插上JP1、JP2、LED_EN短路块	 *
; *****************************************/
; #include <iom16v.h> 
; #include <macros.h>
; 
; #define uchar unsigned char
; #define uint unsigned int
; 
; /****************************************
; *     定义音乐数据二维数组{x,y}			*
; *  x:对应音符音阶(频率),0表示休止符	*
; *  y:对应音符节拍,0表示音乐结束		*
; *  此数据取自《ICC AVR应用实例》		*
; ****************************************/
; //以下音乐数据为《卡秋莎》,位于程序区
; flash uint music_data[][2]=
;     {
; 	{440,600},{494,200},{523,600},{443,200},{523,400},{494,200},
; 	{440,200},{494,400},{330,400},{494,600},{523,200},{578,600},
; 	{494,200},{578,400},{523,200},{494,200},{440,800},{659,400},
; 	{880,400},{784,400},{880,200},{784,200},{698,400},{659,200},
; 	{578,200},{659,400},{440,400},{  0,200},{698,400},{578,200},
; 	{659,600},{523,200},{494,200},{330,200},{523,200},{494,200},
; 	{440,800},{659,400},{880,400},{784,400},{880,200},{784,200},
; 	{698,400},{659,200},{578,200},{659,400},{440,400},{  0,200},
; 	{698,400},{578,200},{659,600},{523,200},{494,200},{330,200},
; 	{523,200},{494,200},{440,800},{  0,  0}
; 	};
; 	
; #pragma data:data					 //设置回到数据存储器区
; 
; /************************************
; *     延时函数:1M时钟时为MS	    *
; ************************************/
; void delay_ms(uint i)
;     {
	.dbline 48
; 	uchar a;
; 	for(;i;i--) 
	xjmp L5
L2:
	.dbline 49
; 	    {
	.dbline 50
; 		for (a = 220; a; a--) 
	ldi R20,220
	xjmp L9
L6:
	.dbline 51
	.dbline 52
	.dbline 53
L7:
	.dbline 50
	dec R20
L9:
	.dbline 50
	tst R20
	brne L6
	.dbline 54
L3:
	.dbline 48
	subi R16,1
	sbci R17,0
L5:
	.dbline 48
	cpi R16,0
	cpc R16,R17
	brne L2
X0:
	.dbline -2
L1:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r a 20 c
	.dbsym r i 16 i
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 61
; 		    {
; 			;
; 			}
; 		}
; 	}
; 
; /************************************
; *         端口初始化函数			*
; ************************************/
; void port_init(void)
;     {
	.dbline 62
; 	DDRD=0xff;						 //D口配置为输出,驱动蜂鸣器
	ldi R24,255
	out 0x11,R24
	.dbline 63
; 	DDRB=0xff;						 //B口配置为输出,驱动LED
	out 0x17,R24
	.dbline 64
; 	PORTB=0xff;						 //LED初值为灭
	out 0x18,R24
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e sound _sound fV
;              x -> R10,R11
;              i -> R10
	.even
_sound::
	xcall push_gset3
	mov R10,R16
	.dbline -1
	.dbline 74
; 	}
; 
; /***********************************
; *           音乐产生函数		   *
; * 功能:输出频率为x的方波,延时y MS*
; * 范围:x:100-20000Hz,0:不发声   *
; * 	    y:0-65536 MS			   *
; ***********************************/
; void sound(uchar i)
;     {
	.dbline 76
; 	uint x;
; 	x=music_data[i][0];				//取音乐的频率数据
	ldi R24,4
	mul R24,R10
	movw R30,R0
	ldi R24,<_music_data
	ldi R25,>_music_data
	add R30,R24
	adc R31,R25
	lpm R10,Z+
	lpm R11,Z
	.dbline 77
; 	if(x!=0)
	tst R10
	brne X1
	tst R11
	breq L12
X1:
	.dbline 78
; 	    {
	.dbline 79
; 		x=500000/x;					//1M时钟数据计算
	movw R2,R10
	clr R4
	clr R5
	ldi R20,32
	ldi R21,161
	ldi R22,7
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall div32s
	movw R10,R16
	.dbline 80
; 		OCR1A=x;					//比较值赋值
	out 0x2b,R17
	out 0x2a,R16
	.dbline 81
; 		TCCR1A = 0x40;				//允许比较反转输出
	ldi R24,64
	out 0x2f,R24
	.dbline 82
; 		}
	xjmp L13
L12:
	.dbline 84
	.dbline 85
	clr R2
	out 0x2f,R2
	.dbline 86
L13:
	.dbline -2
L11:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r x 10 i
	.dbsym r i 10 c
	.dbend
	.dbfunc e main _main fV
;              i -> R20
	.even
_main::
	.dbline -1
	.dbline 92
; 	else
; 		{
; 		TCCR1A = 0x00;				//频率为0,休止符,不发声
; 		}
; 	}
; /*******************************
; *             主函数		   *
; *******************************/
; void main(void)
; 	{
	.dbline 93
; 	uchar i=0;
	clr R20
	.dbline 94
; 	port_init();					//端口初始化
	xcall _port_init
	.dbline 95
; 	TCCR1A = 0x40;					//将T/C1配置为比较匹配,OC1A取反
	ldi R24,64
	out 0x2f,R24
	.dbline 96
; 	TCCR1B = 0x09;
	ldi R24,9
	out 0x2e,R24
	xjmp L16
X2:
	.dbline 98
; 	while(1)
; 	    {
L18:
	.dbline 100
	.dbline 101
	mov R16,R20
	xcall _sound
	.dbline 102
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_music_data+2
	ldi R25,>_music_data+2
	add R30,R24
	adc R31,R25
	lpm R16,Z+
	lpm R17,Z
	xcall _delay_ms
	.dbline 103
	clr R2
	out 0x2f,R2
	.dbline 104
	ldi R24,32
	in R2,0x18
	eor R2,R24
	out 0x18,R2
	.dbline 105
	sbi 0x12,5
	.dbline 106
	inc R20
	.dbline 107
L19:
	.dbline 99
	ldi R24,4
	mul R24,R20
	movw R30,R0
	ldi R24,<_music_data+2
	ldi R25,>_music_data+2
	add R30,R24
	adc R31,R25
	lpm R0,Z+
	lpm R1,Z
	movw R30,R0
	cpi R30,0
	cpc R30,R31
	brne L18
X3:
	.dbline 108
	ldi R16,1000
	ldi R17,3
	xcall _delay_ms
	.dbline 109
	clr R20
	.dbline 110
L16:
	.dbline 97
	xjmp L19
X4:
	.dbline -2
L14:
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend

⌨️ 快捷键说明

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