?? 樂曲.asm
字號:
;************* 應用筆記 樂曲.asm ************************
;*
;* 標題:AT90S8515 C口輸出樂曲聲
;* 版本: 1.0
;*最后更新日期: 2000.08.08
;*
;* 支援 E-mail: gzsl@sl.com.cn
;*
;* 描述
;* 用SL-AVR 萬用下載開發(fā)實驗器做樣機,在C口接喇叭發(fā)出樂曲聲
;* 請把你喜爰的樂曲送入單片機!
;* 作者: SL.
;* 程序適用于所有單片機,樂曲產(chǎn)生原理、方法請閱<< 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 ;
;約定:因為計算機不能表示簡譜樂曲,低音為數(shù)字后一點表示,
; 高音為數(shù)字前一點表示,
; 半音為#號,'為隔開音符,
;樂曲節(jié)拍應對照簡譜查看,音長為節(jié)拍,
;一拍為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 ;
;約定:低音為數(shù)字后一點表示,高音為數(shù)字前一點表示,
; 半音為#號,'為隔開音符
;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 + -