专业:电子信息工程 姓名:李昌明 学号:093411128
MOV TL1,#0FFH 部中断。 SETB ET1 SETB ET0
;计数器计数为1,相当于一外
;允许计数器1中断
;允许计数器具0中断
CLR PT0 ;计数器0为低优先级 SETB PT1
;计数器1为高优先级
SETB IT0 SETB PX0
SETB IT1 SETB PX1 SETB EX1 SETB EX0
SETB EA SETB TR1 断用
SETB OUT
;*********************************** CLR F0 的标置位用
MOV 22H,#01H 的歌曲编号
MOV DPTR,#OUT_TAB 号送数码管显视 MOV A,22H MOVC A,@A+DPTR MOV OUT_NUM,A MOV R7,#00H 入口地址
START0:MOV R4,#00H 21
;外部中断0为跳沿触发 ;高优先级 ;外部中断1为跳沿触发 ;高优先级
;允许外部中断1中断 ;允许外部中断定0中断
;开中断总开关 ;定时器1开始工作,作中
;音频输出端口初始化
;设置结束
;设置F0=0,用来作暂停/播放 ;22H单元中存放正在播放 ;将正在播放的歌曲编 ;R7中存放歌曲总信息的
;R4存放当前正在播放歌
专业:电子信息工程 姓名:李昌明 学号:093411128
曲的第几个节拍数 MOV R0,#30H 的入口信息
MOV A,R7 ;将歌曲的节拍表的入口地址送到DPTR ADD A,R0 MOV R0,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4
MOVC A,@A+DPTR ;取出第一节拍数,其实第一个节拍不是歌曲的第一个节拍,而是表示几分音符 ;**************************************************** MOV 26H,A 存在职26H单元中
NEXT: MOV R0,#30H ;开始取出歌曲的第一个数据
MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0 MOV A,R4 INC R4
MOVC A,@A+DPTR
;放在A中
;将取出的音符数+节拍数保
;30H开始的单元中存放歌曲
;**************************************************** JZ END0
;若为0,则表示为休止符,不
22
专业:电子信息工程 姓名:李昌明 学号:093411128
唱,本次音符不唱, MOV R1,A
;不为0,取出节拍数
ANL A,#0FH MOV R2,A MOV A,R1 SWAP A ANL A,#0FH JNZ SING
CLR TR0 SJMP SING1 SING: DEC A 据处理
MOV R3,A RL A
MOV DPH,@R0 INC R0 MOV DPL,@R0 INC R0
MOVC A,@A+DPTR MOV 21H,A MOV TH0,A MOV A,R3 RL A INC A
MOVC A,@A+DPTR MOV 20H,A MOV TL0,A SETB TR0
SING1:LCALL DELAY JB F0,FOR AJMP NEXT FOR: CLR TR0
;音符不为0,唱
;为0,不唱,关频率发生器
;开始唱,进行相应的数 ;开唱
;每个音符唱多久 ;是否暂停,
;没有暂停,继续
;暂停,不唱
23
专业:电子信息工程 姓名:李昌明 学号:093411128
JB F0,$ ;等待播放
AJMP NEXT ;开始播放 END0: CLR TR0 ;不唱
MOV A,22H ;唱完处理 CJNE A,#N,WW
;是不是全部歌曲都唱完
MOV 22H,#01H ;全部唱完,则从第一首
开始再唱 MOV R7,#00H
MOV OUT_NUM,#06H
歌曲编号
AJMP WWW
WW:
MOV A,R7
一首,歌曲的入口信息调整 ADD A,#4 MOV R7,A INC 22H CLR EA PUSH DPH PUSH DPL
MOV A,22H
MOV DPTR,#OUT_TAB MOVC A,@A+DPTR
MOV OUT_NUM,A 歌曲编号 POP DPL
POP DPH
WWW: SETB EA
AJMP START0 F_T0: MOV TH0,21H MOV TL0,20H CPL OUT RETI
24
;数码管显视第一首
;没有全部唱完,唱下
;数码管显视相应的
;开始下一首的演唱 ;定时器0置初值
;频率产生
专业:电子信息工程 姓名:李昌明 学号:093411128
NEXT_SONG: PUSH ACC 理,保护现场 PUSH DPH
PUSH DPL
CLR EA
;下一曲中断程序处
;关中断
MOV A,22H CJNE A,#N,Q
;是最后一首吗?
MOV R7,#00H 向第一首,演唱第一首 MOV 22H,#01H
AJMP BACK
Q: INC 22H
首,R7内容加4,歌曲数加1 MOV A,R7 ADD A,#4
MOV R7,A
BACK: MOV R4,#00H 编号
MOV A,22H MOV DPTR,#OUT_TAB MOVC A,@A+DPTR
MOV OUT_NUM,A
;******************************************** MOV B,R0
几分拍进行调整,同时对R0中的内容进行保护 MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,@R0 INC R0
25
;是最后一首,则R7指
;不是最后一首,唱下一
;数码管显视相应的歌曲
对下首要演唱的歌曲的
;