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

📄 乐曲.asm

📁 AT90S8515 C口输出乐曲声 把你喜爰的乐曲送入单片机
💻 ASM
字号:
;************* 应用笔记  乐曲.asm  ************************
;*
;* 标题:AT90S8515 C口输出乐曲声
;* 版本:		1.0
;*最后更新日期:	2000.08.08
;*
;* 支援 E-mail:	gzsl@sl.com.cn
;*
;* 描述
;*  用SL-AVR 万用下载开发实验器做样机,在C口接喇叭发出乐曲声
;* 请把你喜爰的乐曲送入单片机! 
;* 作者: SL.
;* 程序适用于所有单片机,乐曲产生原理、方法请阅<< AVR单片机的乐曲输入方法>>
;* AVR单片机在儿童智能玩具中的应用--音乐玩具(电脑放音机)一文
;*
;***************************************************************************

.include"8515def.inc"

	rjmp	RESET	;
.def	TEMPDH	=r2
.def	TEMPDL	=r3
.def	CNT	=r10
.def	SCNN	=r11
.def	KEYN	=r12
.def	SCNK	=r13
.def	SCNDP	=r14
.def	KSNI	=r15

.def	TEMP	=r16
.def	TEMP1	=r17
.def	TEMP2	=r18
.def	TEMP3	=r19
.def	SCNTT	=r26	;

.def	MUSN	=r22
.def	TONL	=r21
.def	TONH	=r20

.def	PLYTON	=r25
.def	TONSET	=r24
.def	TONLNG	=r23

 
.cseg
.org	0x06		;timerl
intt1:	RJMP	OUTPM	;

.cseg
.org	0x010		;

;
OUTPM:	OUT	TCNT1H,TONH	;
	OUT	TCNT1L,TONL	;
	SBIS	PORTC,00	;
	RJMP	SETOP1		;
SETOP0:	CBI	PORTC,00	;
	LDI	MUSN,$00	;
	RETI			;

SETOP1:	SBI	PORTC,00	;
	LDI	MUSN,$01	;
	RETI			;

.cseg	
.org	0x020			;

RESET:
	ldi	temp,low(RAMEND)	;
	out	SPL,temp	;

;

	ldi	temp,high(RAMEND)	;
	out	SPL+1,temp	;
	wdr			;
	ldi	temp,$0F	;
	out	WDTCR,temp	;
	LDI	MUSN,$00	;
	ldi	temp,$00	;
	OUT	TCCR1A,TEMP	;
	OUT	TCCR1B,TEMP	;

	LDI	TEMP,$02	;
	STS	$0100,TEMP	;

LEDA:	CLI		;
	ldi	r16,0b10000000	;
	out	timsk,r16	;

	LDI	TEMP,$FF	;
	OUT	DDRA,TEMP	;
	OUT	DDRB,TEMP	
	OUT	DDRC,TEMP 	;PC OUT,
;	OUT	DDRD,TEMP	;
	
	LDI	TEMP,0B11111111	;
	OUT	PORTC,TEMP
	OUT	PORTA,TEMP
	OUT	PORTB,TEMP
	OUT	PORTD,TEMP
	CLR	TEMP2		;
	CLR	TEMP1		;
	CLR	KSNI
	LDI	SCNTT,$02
	CLR	TONLNG

STARTP:	WDR		;
	LDI	ZH,HIGH(PLYTAB*2)	;
	LDI	ZL,LOW(PLYTAB*2)	;
NEXMUT:	LPM
	MOV	PLYTON,R0	;
	LD	R0,Z+		;
	LPM			;
	MOV	TONLNG,R0	;
	OR	R0,PLYTON
	LD	R0,Z+
	BRNE	PLAYM
	LDI	TEMP,$00	;
	OUT	TCCR1B,TEMP	;
	CLI			;
	SBI	PORTD,00
	RJMP	STARTP		;

;
PLAYM:	PUSH	ZH	;
	PUSH	ZL	;
	TST	PLYTON	;
	BREQ	MUSTD	;
	LDI	ZH,HIGH(MUSTAB*2)	;
	LDI	ZL,LOW(MUSTAB*2)	;
	MOV	TEMP,PLYTON		;
	DEC	TEMP		;
	LSL	TEMP		;
	ADD	ZL,TEMP		;
	LDI	TEMP,$00	;
	ADC	ZH,TEMP		;
	LPM		;
	MOV	TONL,R0		;
	OUT	TCNT1L,R0	;
	LD	R0,Z+		;
	LPM
	MOV	TONH,R0
	OUT	TCNT1H,R0	;
	POP	ZL		;
	POP	ZH

	LDS	TEMP,$0100	;
	OUT	TCCR1B,TEMP	;
	SEI
MUSTD:	RCALL	PLYDEL		;
	DEC	TONLNG		;
	BRNE	MUSTD		;
	RJMP	NEXMUT		;

;
PLYDEL:	LDI	TEMP,185	;
DT3:	LDI	TEMP1,03	;
DT2:	LDI	TEMP2,250
DT1:	WDR	;1T
	WDR	;2T
	WDR	;3T
	WDR	;4T
	WDR	;5T
	DEC	TEMP2	;
	BRNE	DT1	;
	DEC	TEMP1	;
	BRNE	DT2	;
	DEC	TEMP	;
	BRNE	DT3	;
	RET		;
	;约定:因为计算机不能表示简谱乐曲,低音为数字后一点表示,
        ; 高音为数字前一点表示,
        ; 半音为#号,'为隔开音符,
	;乐曲节拍应对照简谱查看,音长为节拍,
	;一拍为04,3/4拍为03,1/2(2/4)拍为02,1/4拍为01,
	;00为表示休止符,
	;#为升半度音
;			乐曲低八度音
;	曲码代号 1   2   3   4   5   6   7   8   9   10   11   12     
;	音符代号 1   #1  2   #2  3   4   #4  5   #5   6   #6    7 
;******************************************************************
;			乐曲中音 
;	曲码代号 13  14  15  16  17  18  19  20  21  22   23   24    
;	音符代号 1   #1  2   #2  3   4   #4  5   #5   6   #6    7 
;
;******************************************************************
;;			乐曲高八度音
;	曲码代号 25  26  27  28  29  30  31  32  33   34  35   36     
;	音符代号 1   #1  2   #2  3   4   #4  5   #5    6  #6    7 
;
;******************************************************************
;


.EQU	PLYTAB=0X0100
.EQU	MUSTAB=0X00A0
.cseg
.org	PLYTAB		;"祝你生日快乐" 乐曲 1=C 4/4 乐曲存放起始地址,请查看对照简谱乐曲
;
;|  5           5,    6     5|
	.DB 20,02,00,01,20,01,22,04,20,04
	;| .1     7     -|
	.DB 25,04,24,04,00,04
	;|  5          5,     6     5|
	.DB 20,02,00,01,20,01,22,04,20,04
	;| .2    .1     -|
	.DB 27,04,25,04,00,04
	;|  5           5,   .5    .3|
	.DB 20,02,00,01,20,01,32,04,29,04
	;| .1     7     6|
	.DB 25,04,24,04,22,04
	;| .4          .4    .3    .1|
	.DB 30,02,00,01,30,01,29,04,25,04
	;| .2    .1     - |
	.DB 27,04,25,04,00,04
	;REAGAIN
	;|  5           5,    6     5|
	.DB 20,02,00,01,20,01,22,04,20,04
	;|.1      7     - |
	.DB 25,04,24,04,00,04
	;|  5           5,    6     5|
	.DB 20,02,00,01,20,01,22,04,20,04
	;| .2    .1     - |
	.DB 27,04,25,04,00,04
	;|  5           5,   .5    .3|
	.DB 20,02,00,01,20,01,32,04,29,04
	;| .1     7     6|
	.DB 25,04,24,04,22,04
	;| .4          .4    .3    .1|
	.DB 30,02,00,01,30,01,29,04,25,04
	;| .2    .1     - |
	.DB 27,04,25,04,00,04
	

 ;			万水千山总是情

 .db 17,04,18,04,20,06,20,02,22,04,20,04,17,12,15,04	;

 .db 13,06,17,02,15,04,13,04,10,12,10,04,8,8,13,04	;

 .db 15,04,17,04,20,04,22,04,17,04,15,15,15,04,00,04	;

 .db 17,04,18,04,20,06,20,02,22,04,20,04,17,12,15,04	;

 .db 13,06,17,02,15,04,13,04,10,12,10,04,8,8,13,06	;

 .db 17,02,15,06,13,02,13,04,10,04,13,15,13,8,17,04	;

 .db 20,04,22,12,25,10,22,04,18,04,20,06,22,02,20,12	;

 .db 17,04,20,8,17,04,20,04,22,12,25,04,25,04,22,04	;

; .db 20,04,17,04,15,15,15,08,17,04,18,04,20,06,20,02	;

 .db 22,04,20,04,17,12,15,04,13,06,17,02,15,04,13,04	;

; .db 10,12,10,04,08,08,13,04,17,04,15,06,13,02,10,04

 .db 12,04,13,15,13,15	;


 
	.DB 00,00		;END

.cseg
.org	MUSTAB		;
	;约定:低音为数字后一点表示,高音为数字前一点表示,
        ; 半音为#号,'为隔开音符
	
	;1    2   3    4   5    6   7    8   9  
	;1. '#1. '2. '#2. '3.  '4. '#4. '5. '#5.

	;10  11  12  13   14  15  16  17  18  
	;6. '#6. '7. '1  '#1  '2 '#2  '3  '4 

	.DW 63627,63730,63835,63927
	.DW 64020,64102,64185,64259
	.DW 64330,64399,64463,64523
	.DW 64579,64632,64683,64731
	.DW 64776,64819

	;19  20  21  22  23  24  25   26  27 
	;#4  '5 '#5  '6 '#6  '7 '.1 '#.1 '.2

	;  28  29  30   31  32   33  34   35  36 
	;'#.2 '.3 '.4 '#.4 '.5 '#.5 '.6 '#.6 '.7

	.DW 64859,64897
	.DW 64933,64967,64999,65029
	.DW 65057,65084,65109,65133
	.DW 65156,65177,65197,65216
	.DW 65243,65251,65267,65282
	

⌨️ 快捷键说明

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