单片机演奏音乐原理与模拟实验
;标题 '八月桂花香'发声程序
ORG0000H
LJMPSTART
ORG000BH
INC20H ;中断服务,中断计数器加1
MOVTH0,#0D8H
MOVTL0,#0EFH ;12M晶振,形成10毫秒中断
RETI
START:
MOVSP,#50H
MOVTH0,#0D8H
MOVTL0,#0EFH
MOVTMOD,#01H
MOVIE,#82H
MUSIC0:
NOP
MOVDPTR,#DAT;表头地址送DPTR
MOV20H,#00H ;中断计数器清0
MUSIC1:
NOP
CLRA;A清零
MOVCA,@A+DPTR;查表取代码
JZEND0;是00H,则结束
CJNEA,#0FFH,MUSIC5;如果是休止符,往下执行
LJMPMUSIC3
MUSIC5:
NOP
MOVR6,A;R6=18H音符的频率
INCDPTR;DPTR加一
MOVA,#0
MOVCA,@A+DPTR;取节拍代码送R7
MOVR7,A;R7=30H音符发音的时间
SETBTR0 ;启动计数
MUSIC2:
NOP
CPLP2.5 ;P2.5是音乐输出引脚
MOVA,R6
MOVR3,A;R3=R6=18H
LCALLDEL
MOVA,R7
CJNEA,20H,MUSIC2;中断计数器(20H)=R7否?
;不等,则继续循环
MOV20H,#00H ;等于,则取下一代码
INCDPTR
LJMPMUSIC1
MUSIC3:
NOP;休止100毫秒
CLRTR0
MOVR2,#0DH ;R2=13
MUSIC4:
NOP
MOVR3,#0FFH ;R3=255
LCALLDEL
DJNZR2,MUSIC4
INCDPTR
LJMPMUSIC1
END0:
NOP
MOVR2,#0FFH ;歌曲结束,延时1秒后继续
MUSIC6:
MOVR3,#00H
LCALLDEL
DJNZR2,MUSIC6
LJMPMUSIC0
DEL:
NOP
DEL3:
MOVR4,#02H
DEL4:
NOP
DJNZR4,DEL4
NOP
DJNZR3,DEL3
RET
NOP
DAT:
DB18H, 30H, 1CH, 10H
DB20H, 40H, 1CH, 10H
DB18H, 10H, 20H, 10H
DB1CH, 10H, 18H, 40H
DB1CH, 20H, 20H, 20H
DB1CH, 20H, 18H, 20H
DB20H, 80H, 0FFH, 20H
DB30H, 1CH, 10H , 18H
DB20H, 15H, 20H , 1CH
DB20H, 20H, 20H , 26H
DB40H, 20H , 20H , 2BH
DB20H, 26H, 20H , 20H
DB20H, 30H , 80H , 0FFH
DB20H, 20H, 1CH , 10H
DB18H, 10H, 20H , 20H
DB26H, 20H , 2BH , 20H
DB30H, 20H , 2BH , 40H
DB20H, 20H , 1CH , 10H
DB18H, 10H, 20H, 20H
DB26H, 20H , 2BH, 20H
DB30H, 20H, 2BH , 40H
DB20H, 30H, 1CH , 10H
DB18H, 20H , 15H , 20H
DB1CH, 20H , 20H , 20H
DB26H, 40H, 20H , 20H
DB2BH, 20H, 26H , 20H
DB20H, 20H, 30H , 80H
DB20H, 30H, 1CH , 10H
DB20H, 10H, 1CH , 10H
DB20H, 20H, 26H , 20H
DB2BH, 20H, 30H , 20H
DB2BH, 40H, 20H , 15H
DB1FH, 05H, 20H , 10H
DB1CH, 10H, 20H , 20H
DB26H, 20H, 2BH , 20H
DB30H, 20H, 2BH , 40H
DB20H, 30H, 1CH , 10H
DB18H, 20H , 15H , 20H
DB1CH, 20H , 20H , 20H
DB26H, 40H, 20H , 20H
DB2BH, 20H, 26H , 20H
DB20H, 20H, 30H, 30H
DB20H, 30H, 1CH, 10H
DB18H, 40H, 1CH, 20H
DB20H, 20H, 26H, 40H
DB13H, 60H, 18H , 20H
DB15H, 40H, 13H , 40H
DB18H, 80H, 00H
END
评论