1、 信息科学与技术学院 微机原理与接口技术 课程设计报告 题目名称: 音乐点歌 学生姓名: 11 学 号: 111 专业年级: 111 指导教师: 111 时 间:2111 一一 概述概述 汇编语言是计算机能够提供给用户使用的最快而有效的语言,也是能够利 用计算机所有特性并能直接控制硬件的唯一语言。借助于汇编程序,计算机本身 可以自动地把 汇编源程序翻译成用机器语言表示的目的程序,从而实现了程序 设计工作的部分自动化。 1 课程设计的目的课程设计的目的 掌握一些程序设计的基本方法,要指导主程序,子程序以及推栈段的使用, . 了解通用发声程序了解与掌握定时.计数.音乐.频率.时间之间的关系,学会用
2、发 声程序的设计方法,学会用汇编语言编辑音乐程序 2 课程设计的要求课程设计的要求: 1其中可选五首以上歌曲。 2可以选速度 3选音调(AG 调;每音调之间大约相差 1.12 倍,既 C 调比 D 调的频率 高 1.12 倍) 4任意暂停 5界面修饰。 二二 总体方案设计总体方案设计 2.1 主程序流程图主程序流程图: Y N Y N Y 开始 输入字符 判断是 否为 4 判 断 是 否为 1 调用宏 ADDRESS 选择速度,频率 Music 子程序 判 断 是 否为 2 调用宏 ADDRESS 选择速度,频率 Music 子程序 结束 图图 1 主程序流程图主程序流程图 2.2Music
3、子程序流程图:子程序流程图: 图图 2 Music 子程序流程图子程序流程图 2.3发声原理图:发声原理图: DI= -1 返回 DOS 界面 并重新输入字符 GENSOUND 子程序 取下一频率值 和下一时间值 开始 结束 图图 3 发声原理图发声原理图 发声原理: 计算机有两种产生声音的方法,一种方法是通过 I/O 指令向设备寄存器(端 口地址为 61H)的第 1 位交替送 1 和 0,使与第 1 位相连的扬声器脉冲门产生连 续的脉冲电流,驱动扬声器发出声音。另一种方法是利用 8254(系统定时器) 中的 2 号定时器向扬声器发送不同频率的脉冲,使之产生音调高低不同的声音, 这种产生声音的
4、方法可使计算机演奏出各种乐曲。本程序选用定时器产生声音。 ROM BIOS中的BEEP子程序能根据BL中给出的时间计数值控制8254定时器, 产生持续时间为 1 个或几个 0.5 秒、频率为 896HZ 的声音。通过对 BEEP 的修改, 可以使其产生任一频率的声音。用汇编语言编写的程序 GENSOUND,能使 PC 机发 出指定频率和指定延迟时间的声音,它是一个很好的通用发声程序。组成乐曲的 每个音符的频率值和持续时间是乐曲发声程序所必须的两组数据, 知道了音调及 频率的关系后, 就可以按照乐曲的乐谱将每个音符的频率和持续时间定义成两个 数据表,然后编程依次取出表中的频率值和时间值,调用 G
5、ENSOUND 程序发出各 种声音。 但 GENSOUND 程序产生的声音不仅与输入频率有关,而且与 CPU 有关。如果 80X86 的工作频率为 8MHZ(如 IBM PS/ 2-25 型) ,则 T=125ns(1 /8MHz=125ns) , 那么上面程序产生的时间延迟就要短的多。在 80286 中,LOOP 指令只需 8 个执 行周期,而不是 17 个执行周期,这也会使延迟时间缩短很多。因此,从 PC/ AT 开始,对所有的 80286,80386,80486 和 Intel Pentium 计算机,IBM 都提供一 种利用硬件产生时间延迟的方法,这种方法不仅与频率无关,也与 CPU
6、无关。方 法是通过监控端口 61H 的 PB4,使 PB4 每 15.08us 触发一次,以产生一个固定不 变的时间基准。在 IBM PC AT BIOS 中的 WAITF 子程序,就是一个产生 N15.08us 时间延迟的程序。调用 WAITF 子程序时,CX 寄存器必须装入 15.08us 的倍数 N。 利用 WAITF 子程序能获得任意的延迟时间, 而再不必考虑 CPU 的型号和工作 频率。依此原理可以进一步修改通用发声程序 GENSOUND,使其不再依赖 CPU 的 工作频率。GENSOUND 程序中的 10ms 延迟时间是通过执行循环指令来获得的,现 在可以用 WAITF 子程序来取代它,计数值设置为 663(10ms/ 15.08us=663) 。本 系统将修改后的通用子程序改名为 SOUNDF,延迟时间表仍为 10ms。 (二)编曲原理 利用计算机控制发声的原理, 可以编写演奏乐曲的程序。 乐曲是按照一定的高低、 长短和强弱关系组成的音调。在一首乐曲中,每