程序模块设计Word文件下载.docx
《程序模块设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《程序模块设计Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
SETBEA;
开总中断
SETBET0;
允许T0中断
CLRIT0;
INT0为电平触发
CLRIT1;
INT1为电平触发
SETBEX0;
允许外部中断0
SETBEX1;
允许外部中断1
SETBP3.2
SETBP3.3
START:
MOV30H,#00H
NEXT:
ACALLSON
MOVA,30H
MOVCA,@A+DPTR;
取编码
MOVR2,A
CJNEA,#00H,NEXT1;
若A中内容为#00H,则重复循环
CLRTR0
SJMPSTART
NEXT1:
MOVA,R2
MOVA,#0FH;
取节拍(低四位)
MOVR5,A;
节拍的时间存入R5
MOVA,R2
SWAPA
ANLA,#0FH;
取音频值(高四位)
JNZSING;
是否为0,为0则不发音
SJMPD1
SING:
DECA
CLRC
RLA
MOV22H,A
MOVDPTR,#TABLE1
MOVCA,@A+DPTR;
至TABLE1取码,取T的值
MOVTH0,A;
取到的高位字节存入TH0
MOV21H,A;
取到的高位字节存入(21H)
MOVA,22H;
再载入取到的音符码
ADDA,#1;
加1
MOVCA,@A+DPTR;
至TABLE1取相应的低位字节计数值
MOVTL0,A;
取到的高位字节存入TL0
MOV20H,A;
取到的低位字节存入(20H)
MOVP1,A
SETBTR0;
启动定时器
D1:
LCALLDELAY1
CLRTR0
INC30H;
取简谱码指针加1
SJMPNEXT
SON:
MOVA,SONGSUM
SONO:
CJNEA,#0,SON1
MOVDPTR,#SONG0
RET
SON1:
CJNEA,#01,SON2
MOVDPTR,#SONG1
SON2:
MOVDPTR,#SONG2
TIME:
PUSHACC;
保护现场
PUSHPSW
MOVTL0,20H;
重装计数初值
MOVTH0,1H
CPLP3.0;
将P3.0位取反输出,产生音频方波
POPPSW;
恢复现场
POPACC
SETBTR0
RETI;
返回主程序
DELAY0:
MOVR6,#20;
延时子程序
D4:
MOVR1,#248
D40:
DJNZR6,D40
DJNZR6,D4
RET
DELAY1:
MOVR7,#03
D2:
MOVR4,#250
D3:
MOVR3,#50
D30:
DJNZR3,D30
DJNZR4,D3
DJNZR7,D2
DJNZR5,DELAY1;
节拍控制
RET
生日快乐歌
SONG00:
DB82H,01H,81H,94H
DB84H,0B4H,0A4H,04H
DB82H,01H,81H,94H,84H
DB0C4H,0B4H,04H
DB00H
新年快乐编码表
SONG01:
DB42H,42H,44H,14H,02H
DB62H,62H,64H,44H,04H
DB42H,62H,84H,84H,02H
DB72H,62H,54H,04H
两只蝴蝶
SONGO2:
DB62H,52H,64H,04H
DB52H,62H,52H,44H,04H
DB22H,42H,54H,64H,52H,42H,22H,42H,14H,04H
DB62H,52H,64H,04H
DB22H,42H,54H,64H,52H,42H,22H,42H,54H,04H
TABLE1:
DW6426064400645246458064684647776482064898
DW6496865030650876513665161652006523665269
三、外部中断模块设计
1.外部中断流程框图
图4-4外部中断0流程图
图4-5外部中断1流程图
2.外部中断程序
IN-T0:
CLREX0
PUSHACC;
LCALLDELAY0
JBNEXTSONG,TO1
MOVA,SONGNUM
INCA
MOVSONGNUM,A
CJNEA,#03H,TOEO
MOVSONGNUM,#0
TOEO:
MOV30H,#0
TO1:
SETBEX0
RETI
IN-T1:
CLREX1
LCALLDELAY0;
调用延时子程序
JBP3.3,Return
SETBTR0
SETBEX1
Return:
RETI;
返回主程序
四、定时器模块设计
1.定时器中断流程图
图4-6定时中断流程图
2.定时处理程序
MOVTL0,20H;
MOVTH0,21H
将P3.0位取反输出产生音频方波
POPACC