《汇编语言程序设计》课程设计音乐乐曲演奏程序

上传人:枫** 文档编号:394910649 上传时间:2022-08-02 格式:DOC 页数:25 大小:251.50KB
返回 下载 相关 举报
《汇编语言程序设计》课程设计音乐乐曲演奏程序_第1页
第1页 / 共25页
《汇编语言程序设计》课程设计音乐乐曲演奏程序_第2页
第2页 / 共25页
《汇编语言程序设计》课程设计音乐乐曲演奏程序_第3页
第3页 / 共25页
《汇编语言程序设计》课程设计音乐乐曲演奏程序_第4页
第4页 / 共25页
《汇编语言程序设计》课程设计音乐乐曲演奏程序_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《《汇编语言程序设计》课程设计音乐乐曲演奏程序》由会员分享,可在线阅读,更多相关《《汇编语言程序设计》课程设计音乐乐曲演奏程序(25页珍藏版)》请在金锄头文库上搜索。

1、黄石理工学院汇编语言程序设计课程设计目 录1、问题定义21.1设计目的21.2设计内容22、需求分析32.1流程图32.2通用发声程序设计原理43、详细设计63.1主要的宏和过程的实现63.1.1DISPLAY显示宏63.1.2ADDRESS音乐地址宏63.1.3MUSIC宏73.1.4通用发生程序GENSOUND83.1.5WAITF延时程序93.1.6CLEAR清屏程序103.1.7RETU退出113.2主程序实现113.2.1数据段定义113.2.2堆栈段定义123.2.3初始化133.2.4程序执行过程134、系统调试145、收获体会176、附录187、参考文献251、问题定义1.1设

2、计目的1使学生能够较全面地巩固和应用课堂中所学的基本理论和程序设计方法,能够较熟练地完成汇编语言程序的设计和调试。2培养学生综合运用所学知识独立完成汇编程序课题的能力。3培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。4提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。5培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。6对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。1.2设计内容要求完成一

3、个音乐程序,即通过按下键盘上某个按键就可以按预先设定的程序播放音乐或者终止程序。(比如:按大写字母“A”,唱乐曲“玛丽有只小羔羊”;按大写字母“B”,唱乐曲“太湖船”按大写字母“C”,唱乐曲“两只老虎”;按Q鍵,退出。)此程序涉及到过程和宏的调用,要求学生掌握关于过程和宏的定义和使用。(比如:可以设定播放某一段音乐为一个过程,设定对音乐进行播放的操作为一个宏操作。)2、需求分析2.1流程图图2-1 系统流程图开始显示提示信息接收键盘输入是“Q”?是“A”?是“C”?是“B”?退出程序将音乐节拍频率地址导入ADDRESS调用MUSIC,播放音乐显示错误提示调用清屏程序是是是是否否否否2.2通用发

4、声程序设计原理PC机发声系统以8254的2号计数器为核心。系统初始化时,2号计数器I作在“方波发生器”方式,初值为二进制数,写入顺序为先低后高,CLK2为1193182MHz,当计数初值为533H时,OUT2输出的方波大约为900Hz,经过简单的滤波之后,送至扬声器。改变1.4号计数器的计数初值就可以使扬声器发出不同频率的音响。ROM BIOS 中有个BEEP子程序,这能根据BL中组出的时间计数值控制8254定时器,产生持续时间为1个或几个0.5秒,频率为896HZ的声音,我们可以利用并修改BEEP,使其产生任一频率的声音。为此我们需要做两点修改,首先,BEEP程序只能产生896HZ的声音,我

5、们的通用发声程序应能产生任一频率的声音。其次,BEEP产生声音的持续时间(音长)只能是0.5秒的倍数,我们希望声音的持续时间更易于调整,例如可以是10ms的倍数。我们知道BEEP能将计数值533H送给定时器2产生896HZ的声音的,那么产生其它频率声音的时间计数值应为:533H896给定频率=123280H给定频率发声程序包括3个步骤: (1)在8253中的42端口送一个控制字0B6H(10110110B),该控制字对定时器2进行初始化,使定时器2准备接收计数初值。 (2)在8253中的42H端口(Timer2)装入一个16位的计数值(533H895/频率),以建立将要产生的声音频率。 (3)

6、把输出端口61H的PB0、PB1两位置1,发出声音。 对于发音部分。PC机上的大多数输入/输出(I/O)都是由主板上的8255(或8255A)可编程序外围接口芯片(PPI)管理的。PPI包括3个8位寄存器,两个用于输入功能,一个用于输出功能。输入寄存器分配的I/O端口号为60H和62H,输出寄存器分配的I/O端口号为61H。由PPI输出寄存器中的0、1两位来选择扬声器的驱动方式。连接到扬声器上的是定时器2,从上图可以看到,GATE2与端口61H的PB0相连,当PB0=1时,GATE2获得高电平,使定时器2可以在模式3(方波)下工作。定时器2的OUT2与端口61H的PB1通过一个与门与扬声器的驱

7、动电路相连。当PB1=1时,允许OUT2的输出信号到达扬声器电路。因此,只有PB0和PB1同时为“1”时,才能驱动扬声器地声。通过以下指令实现: IN AL,61H OR AL,3 OUT 61H,AL 上面的指令用以打开扬声器,如要关闭扬声器时则为: AND AL,0FCH OUT 61H,AL 当从8255中采集到输入的数据时,需要确定相应的频率,所以在软件编程时要建立一个数据表: TABLE DW 493,440,392,349,329,293,261 把相应的频率送到一个寄存器上,通过公式: 计数值=533H896 f=1234DCH f 算出计数值,再把算得的计数值送给8253,就可

8、产生所要频率的方波。在把计数值送8253前,必须先把8253进行初始化: MOV AL,0B6H OUT 43H,AL 使其选用通道2,工作在方式3下。 就整个电路而言,接好电路后,通过软件编程不断地采集从8255口中输入的信号,而8个开关都接在8255的A口上,只要有开关按下,就会采集到一个数据,根据这个数据与事先编好的表对应,得到一个计数值,把这个计数值送给8253的通道2,8253的通道2工作的方式3下,这样就可以产生满足频率要求的发声方波。这个方波经驱动放大就可以使扬声器发出相应的声音。 所以8255在这里完成两个任务,它不仅从A口中采集到数据,而且B口的PB1和PB0两个位要控制发声

9、。8253的主要任务就是产生所要求发声的不同频率的方波。3、详细设计3.1主要的宏和过程的实现3.1.1DISPLAY显示宏为将事先定义的数据段字符串显示在屏幕上,定一个参数为b的宏。将b的地址传到DX。随后调用DOS09号功能调用。将字符串显示到屏幕。调用DISPLAY的实例为: DISPLAY INFO1 DISPLAY INFO2 DISPLAY INFO3 DISPLAY MUSLIST在此段代码中,程序显示提示作用的字符串和歌曲列表。DISPLAY宏具体实现如下:DISPLAY MACRO b LEA DX,b MOV AH,9 INT 21H ENDM3.1.2ADDRESS音乐地

10、址宏歌曲包含节拍和频率。此处定义的音乐地址宏包含两个参数,将歌曲频率地址导入SI将歌曲节拍导入BP。当选择不同的歌曲时,主程序调用该宏,将用户要求的歌曲的频率和节拍导入,以便在MUSIC中实现发声。音乐地址宏实现如下:ADDRESS MACRO A,B LEA SI,A LEA BP,DS:B ENDM3.1.3MUSIC宏在ADDRESS中,程序已经将歌曲的首个频率地址和首个节拍地址分别导入SI、BP。为了检测歌曲是否结束,在MUSIC中,首先将SI传递到DI,DI与-1相减,如等于0,则得出该频率定义为-1 。在歌曲频率表定义中将-1定为该歌曲结束标志,此时MUSIC跳出结束。若该频率不为

11、-1。调用通用发生程序GENSOUND,将该音符按照频率和节拍表发声。发声后SI、BP分别加2,跳转到下一个音符的频率和节拍,继续检测歌曲是否结束。如频率不为0,继续将该音符发声,并循环此过程。具体实现方法如下:MUSIC PROC NEAR PUSH DS SUB AX,AX PUSH AX FREG: MOV DI,SI CMP DI,-1 JE END_MUS MOV BX,DS:BP CALL GENSOUND ADD SI,2 ADD BP,2 JMP FREG END_MUS: RET MUSIC ENDP3.1.4通用发生程序GENSOUND该发生程序是在修改BEEP发声程序的基

12、础上,以实现为8088/86编写一个任意频率和任意持续时间的通用发声程序。该程序包括以下三个步骤:(1)在8253/54 中的43端口送一个控制字0B6H(10110110B),该控制字对定时器2进行初始化,使得定时器2准备接受计数初值。(2)在8253/54中的42H端口装入一个16位计数值,已建立将要产生的声音频率。(3)把输出端口61H的0、1两位置1,发出声音。具体实现如下:GENSOUND PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV AL,0B6H OUT 43H,AL MOV DX,12H MOV AX,348ch D

13、IV DI OUT 42H,AL MOV AL,AH OUT 42H,AL IN AL,61H MOV AH,AL OR AL,3 OUT 61H,AL WAIT1: MOV CX,3314 call waitf DELAY1: DEC BX JNZ WAIT1 MOV AL,AH OUT 61H,AL POP DI POP DX POP CX POP BX POP AX RET GENSOUND ENDP该GENSOUND程序能产生1965535Hz的声音,这个频率的下限是使除法不产生溢出的最小值。其上限65535是多余的,因为人能听到的声音最高频率为20000Hz。此外一般情况下,GENSOUND程序产生的声音不单单和频率有关,还和CPU有关。CPU工作频率越高,时延越短,产生的声音越急促。为了使程序产生一个与CPU工作频率无关的合适时延,在MUSCI中调用了一个时间延时程序WAITF。3.1.5WAITF延时程序80x86的各种处理器采取了666MHz的工作频率,loop指令的执行时间在这些处理器上也不相同。为了建立一个与处理器无关的延时,IBM采用了一种利用硬

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号