




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
专业课程设计报告书专业课程设计报告书 课程名称: 微机原理与接口技术 设计名称: 音乐发生器 学生姓名: 专 业: 班 别: 学 号: 指导老师: 日 期: 2016 年 06 月 28 日 目录目录 1. 项目概述项目概述.1 2. 设计要求设计要求.1 3. 系统设计系统设计.2 4. 硬件设计硬件设计.3 4.1 电路图.3 4.2 元件清单.3 5. 软件设计软件设计.4 5.1 程序流程图.4 (1)主程序流程图)主程序流程图.4 5.2 程序清单.5 程序调程序调试试.9 6. 小结小结.10 参考文献参考文献.11 1 1. 项目概述项目概述 汇编语言是计算机能够提供给用户使用的最快而有效的语言,也是能够利用计算机所 有特性并能直接控制硬件的唯一语言。借助于汇编程序,计算机本身可以自动地把 汇编源 程序翻译成用机器语言表示的目的程序,从而实现了程序设计工作的部分自动化。 掌握一些程序设计的基本方法,要指导主程序,子程序以及推栈段的使用,了解通用 发声程序。了解与掌握定时、计数、音乐、频率、时间之间的关系,学会用发声程序的设 计方法,学会用汇编语言编辑音乐程序。 2. 设计要求设计要求 (1)需要的基本知识与技能。 具备汇编语言设计、编写、调试和运行程序的方法和技巧。在 PC 机上运行汇编程序 需要经过以下几个阶段: 编辑源程序。利用文本编辑工具编辑源程序,生成一个汇编语言的纯文本文件。文件的 扩展名为.ASM 汇编源程序。用汇编器汇编源程序生成目标代码文件,目标代码文件的扩展名是. OBJ,汇编器还可以生成列表文件和交叉参考文件。汇编器相当于高级语言中的编译器。 汇编语言按照汇编语言的语法检查源程序,如果源程序语法有错误,汇编器就不生成目标 代码文件,这时,必须重新编辑源程序,修改语法错误。当发现源程序有的行含有不确定 因素,汇编器会给出警告信,但按却省处理方法生成目标代码文件。此时,可以重新编辑 源程序,消去不确定因素。 连接目标程序。利用连接器连接目标代码程序和库函数代码生成可执行程序文件。一 般单个模块的连接可以顺利地生成可执行程序文件。当多个模块连接,或者库函数连接时, 如果在目标代码中找不到所需的连接信息,连接器就会发生错误提示信息,而不是生成可 执行文件。这时,这就要重新编辑源程序,并汇编程序。 调试可执行程序。程序的动态调试是在形成可执行文件后,针对可执行程序进行的。 DEBUG 是简单的动态调试工具,利用调试工具动态的调试程序,找出程序中的问题,那 么就要重新编辑,汇编源程序。 (2)尚未掌握的知识点。 有时在程序中定义了较多的 宏,或者可以把自己编译中常用的宏定义建立一个独立的 文件,这个只包含若干定义宏文件的文件可称为宏库,通常用扩展名 MAC 或 INC 来表示。 当应用程序中需要用到宏库中的宏定义时,只需要用语句说明。 有时汇编语言程序需要连续重复地完成相同或者几乎完全相同的一组代码,这时,可 使用重复汇编。汇编程序把重复模块代码重复几次,每次重复把重复块中的哑元用自变量 表中的一项取代,下一次取代一次,重复次数由自变量表中的自变量个数来确定。条件汇 编中,汇编程序能够根据条件把一段源程序或者把它排去在外,这里用到条件伪操作。条 件伪操作可以用在宏定义体内,也可以用在宏定义体外,并且可以嵌套任意次。 模块化程序设计方法是按照各部分程序所实现的不同功能把程序划分成为多个模板。 各个模板在明确各自的功能和相互间的约定后,就可以编制和调试程序,最后把它们连接 起来形成一个大程序,子程序结构是模块化程序设计的基础。子程序相当于高级语言中的 过程和函数。在一个程序的不同部分,往往就要用到类似的程序段,这写程序段的功能个 结构形式都相同,只是有的变量赋值不同,此时就可以把这些程序写成子程序形式,以便 需要时调拥它。 计算机中有一个可编程时间间隔定时器 8253/54,它能根据程序提供的计数值和工作模 式,产生各种计数/定时脉冲,提供给系统的各个部分使用。先要设定控制字,以选择计数 器,确定工作模式和计数的值。每个计数器由 3 个外引腿与外部联系,在对任一个计数妻 2 编程时,首先将控制字节写入控制寄存器。控制字的作用是告诉 8253/54 选择那一个计数 器工作,要求输入什么样的脉冲波形。另外对其初始化工作好包括,向选定计数器送一个 初值。PC 机上的大多数 I/O 都是主板的 8255 的可编程外围接口芯便管理的,PPI 包括三个 8 位寄存器,两个用于输入功能,一个用于输出功能。利用 CPU 产生延迟时间是最常用的 方法,但是对于不同的计算机,它们产生的延迟时间都是不一样的。 组成乐曲的每个音符的频率和持续时间是乐曲程序发声所需要的两个数据。音符的持 续时间是根据乐曲的速度及每个音符的节拍来确定的。在 4/4 中,四分音符为一拍,每小 节四拍,全音符持续四拍,四分音符持续一拍,八分音符持续半拍等。 3. 系统设计系统设计 这次课程设计的设计思想是在熟练掌握汇编程序的设计方法的基础上,利用通用发生 程序编写音乐程序组成音乐的每个音符的频率值和持续时间是音乐程序发声所需要的两 个数据,根据音调与频率和时间之间的关系,把要编辑的音乐的每个音符的频率和持续时 间定义成两个数据表,进而把它们写入通用发声程序,音乐程序就完成。 在编制此音乐演奏程序时,应该知道 ROM BIOS 中有个 BEEP 子程序,这能根据 BL 中组出 的时间计数值控制 8254 定时器,产生持续时间为 1 个或几个 0.5 秒,频率为 896HZ 的声音, 我们可以利用并修改 BEEP,使其产生任一频率的声音。首先要了解计算机是如何产生声 音和乐曲的。找出相关程序源代码,弄清楚各功能的环节间的联系、联接方法,搞清楚单 调与频率和时间的关系,利用计算机控制发声的原理,依照基本的算法思想写程序,测试, 更正,扩充功能,修饰细节。 本次设计在具体设计过程中的整体设计思路如下: 该程序主要分成 根据音阶表和简谱为演奏的乐曲定义一个频率表 mus_freq 和一个时间表 mus_time。 分别将两个表的偏移地址放入 SI 和 BP。 lea si, mus_freq lea bp, ds:mus_time 从表中取出音符的频率放入 DI,取出音符的持续时间(实际上是 10ms 的倍数)放入 BX。 mov di, si mov bx, ds:bp 频率表中最后一个数据-1 作为乐曲的结束符,也可用其他的特殊值来代替。 调用通用发声子程序 SOUNDF 发出音调。 这个程序比较简单,如果想演奏另一个乐曲,只需把 mus_freq 和 mus_time 两个表中 的数据换成另一个乐曲的频率和节拍时间就可以了。该算法的整体思路是在这个设计中用 到了 BEEP 通用发声程序,我们利用对 BEEP 程序的修改让它产生任何一种频率的声音, 也可以让声音的持续时间更容易被调整 在编译的过程中,用到了子程序调用,分别根据输 入调用 music1,music2,music3 程序还要调用子程序 gensound 发出音调,主要特点是程序简单 明了,有良好的交互界面。程序的主要功能是给用户提供三首已经写好的短曲,根据用户的 选择演奏乐曲,演奏完一首乐曲后跳回起始状态,如此循环,直到用户输入结束的信息为 止。 本程序设计过程的整体设计思路是通过定义数据段,堆栈段和代码段实现程序的各种要求。 其中堆栈段是为乐曲的音调及频率的数据分配空间;数据段是记录程序运行过程中所需的 信息,包括字符信息,单调数据,音频数据;代码段则是程序算法部分, 通过对各数据的 调用,实现音乐演奏功能。找出相关程序源代码,弄清楚各功能的环节间的联系、联接方 3 法,搞清楚单调与频率和时间的关系,写出其中的一个音乐文件的代码,理解其在总程序 中的作用。依照基本的算法思想写程序,测试,更正,扩充功能,修饰细节。 系统的主要功能:给用户提供三首已经写好的短曲,根据用户的选 择演奏乐曲,演奏完一首乐曲后跳回起始状态,如此循环,直到用户输入结束的信息为止。 4. 硬件设计硬件设计 4.1 电路图 4.2 元件清单 4 5. 软件设计软件设计 5.1 程序流程图 (1)主程序流程图 图图 1 主程序流程图主程序流程图 (2)Music 子程序流程图 5 DI= -1 返回 DOS 界面 并重新输入字符 GENSOUND 子程序 取下一频率值 和下一时间值 开始 结束 图图 2 Music 子程序流程图子程序流程图 5.2 程序清单 程序清单如下: ;数据段 DATA SEGMENT PARA DATA INFO1 DB 0DH,0AH,WELCOME YOU TO COME HERE!$ INFO2 DB 0DH,0AH,this is a music program!$ INFO3 DB 0DH,0AH,please select!$ INFO4 DB 0DH,0AH,INPUT ERROR!$ INFO5 DB 0DH,0AH,PLEASE INPUT AGAIN!$ MUSLIST DB 0DH,0AH,A MUSIC1 DB 0DH,0AH,B MUSIC2 DB 0DH,0AH,C MUSIC3 DB 0DH,0AH,Q EXIT db 0dh,0ah,$ MUS_FREG1 DW 330,294,262,294,3 DUP (330) ;音乐 1 的频率表 1,2 小节 DW 3 DUP (294),330,392,392 ;3,4 小节 DW 330,294,262,294,4 DUP (330) ;5,6 小节 DW 294,294,330,294,262,-1 ;7,8 小节 MUS_TIME1 DW 6 DUP (25*8),50*8 ;音乐 1 的时间节拍表 1,2 小节 DW 2 DUP (25*8,25*8,50*8) ;3,4 小节 DW 12 DUP (25*8),100*8 ;58 小节 MUS_FREG2 DW 330,392,330,294,330,392,330,294,330 DW 330,392,330,294,262,294,330,392,294 DW 262,262,220,196,196,220,262,294,332,262,-1 MUS_TIME2 DW 3 DUP(50),25,25,50,25,25,100 DW 2 DUP(50,50,25,25),100 DW 3 DUP(50,25,25),100 6 MUS_FREG3 DW 262,262,294,262,349 DW 330,262,262,294,262 DW 392,349,262,262,523 DW 440,349,262,262,466 DW 466,440,262,392,349,-1 MUS_TIME3 DW 50,50,100,100,100 DW 100,100,50,50,100,100 DW 100,100,100,50,50,100 DW 100,100,100,100,100,50 DW 50,100,100,100,100,100 DATA ENDS ;堆栈段 STACK SEGMENT PARA STACK STACK DB 200 DUP (STACK) ;初始化堆栈 STACK ENDS ;代码段 CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE MAIN PROC FAR MOV AX,DATA ;数据段装入段寄存器 DS MOV DS,AX MOV aH, 0 ;BIOS 功能调用,设置显示方式 MOV AL,4 INT 10H ;十号 doc 中断? MOV AH,0BH ;0B 号 doc 调用? MOV BH,0 MOV BL,4 INT 10H MOV AH,0BH MOV BH,01H MOV BL,00 INT 10H SHOW MACRO b ;定义一个宏 LEA DX,b MOV AH,9 ;9 号 doc 调用? INT 21H ENDM show INFO1 show INFO2 show INFO3 show MUSLIST INPUT: MOV AH,01H ;键盘输入并回显 INT 21H CMP AL,Q 7 JZ retu ;退出 CMP AL,A JNZ B0 CALL MUSIC1 JMP EXIT1 B0: CMP AL,B JNZ C0 CALL MUSIC2 JMP EXIT1 C0: CMP AL,C JNZ exit CALL MUSIC3 EXIT1: show INFO5 ;宏调用 JMP INPUT EXIT: call clear show INFO4 show INFO5 show INFO1 show INFO2 show INFO3 show MUSLIST jmp input RETU: MOV AH,4CH ;带返回码终止 INT 21H MAIN ENDP MUSIC1 PROC NEAR PUSH DS SUB AX,AX ;AX 清零 PUSH AX LEA SI,MUS_FREG1 LEA BP,DS:MUS_TIME1 FREG1: MOV DI,SI CMP DI,-1 ;音符的频率是否结束 JE END_MUS1 ;若是则返回 MOV DX,DS:BP ;取出音符的持续时间放入 BX MOV BX,1400 CALL GENSOUND ;调用 GENSOUND 子程序发出音调 ADD SI,2 ADD BP,2 JMP FREG1 END_MUS1: RET MUSIC1 ENDP 8 GENSOUND PROC NEAR PUSH AX ;保存将要用到的寄存器 PUSH BX PUSH CX PUSH DX PUSH DI MOV AL,0B6H ;向 8253-5/8254-2 计数器写入控制字 OUT 43H,AL ;方式 3、双字节写和二进制计数方式写到控制口 MOV DX,12H ;设置被除数 MOV AX,533H*896 DIV DI ;其商(AX)为预置值 OUT 42H,AL ;先送 LSB MOV AL,AH OUT 42H,AL ;后送 MSB IN AL,61H ;读 8255 端口 B(61H)原值 MOV AH,AL ;保存端口原值 OR AL,3 OUT 61H,AL ;接通扬声器 WAIT1: MOV CX,8FF0H ;在 80486/DX2/66 中取 DELAY1: LOOP DELAY1 DEC BX JNZ WAIT1 MOV AL,AH ;写回 61H 口原值,关闭扬声 OUT 61H,AL POP DI ;恢复寄存器 POP DX POP CX POP BX POP AX RET ;子程序结束返回 GENSOUND ENDP MUSIC2 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG2 LEA BP,DS:MUS_TIME2 FREG2: MOV DI,SI CMP DI,-1 JE END_MUS2 MOV DX,DS:BP MOV BX,1400 CALL GENSOUND ADD SI,2 9 ADD BP,2 JMP FREG1 END_MUS2: RET MUSIC2 ENDP MUSIC3 PROC NEAR PUSH DS SUB AX,AX PUSH AX LEA SI,MUS_FREG3 LEA BP,DS:MUS_TIME3 FREG3: MOV DI,SI CMP DI,-1 JE END_MUS3 MOV DX,DS:BP MOV BX,1400 CALL GENSOUND ADD SI,2 ADD BP,2 JMP FREG1 END_MUS3: RET MUSIC3 ENDP clear proc near ;清屏子程序 push ax push bx push cx push dx mov ah,6 ;屏幕初始化或上卷 mov al,0 mov ch,0 ;左上角行号为 0 mov cl,0 ;左上角列号为 0 mov dh,24 ;右下角行号为 24 mov dl,79 ;右下角列号为 79 mov bh,7 ;卷入行属性为 7 int 10h ;调用显示 BIOS pop dx pop cx pop bx pop ax ret clear endp CODE ENDS END MAIN 10 5.3程序调试 1.编辑源程序,假定源文件名为 YINYUE.ASM。 2.汇编源程序 YINYUE.ASM。调用宏汇编程序 MASM 对源文件 YINYUE.ASM 进行汇 编,生成目标文件 YINYUE.OBJ。若汇编无错误,则进入第三步。 3.用连接命令 LINK 连接目标程序文件 YINYUE.OBJ。若连接成功,则进入下一步。 4.运行可执行文件 YINYUE.EXE。 5DEBUG 调试的具体步骤: DEBUG 命令均为一个字母,其后可以跟一个或多个参数。命令中参数之间必须用分 界符号隔开。命令和参数可以用大写或小写混合的方式输入,每个命令以回车键作结束符。 在执行命令过程中,可以按 CTRL+BREAK 来终止一个命令的执行,然后返回到 DEBUG 提示符下。 这里我用到了(显示内存单元内容的)D 命令和(跟踪命令)T 命令。 在 dos 的提示符下,键入命令: c:debug typegame 在 debug 程序调入后,将出现提示符,此时就可用 debug 命令来调试程序。 6. 小结小结 设计中遇到的问题设计中遇到的问题 在此次课程设计的过程中,我遇到了很多的问题,主要有以下一些: (1) 在编程初期首先遇到的是结构化程序的结构很重要,刚开编的时候没有写流程图和 算法,结果程序可读性很差,也很难查错,从中了解到写程序需要一步步来,不能操之过 急。 (2) 在编程中时常出现逻辑错误。因为这个错误在编译中不会被发现,所以很难找出, 要对程序一步一步的检查才行,可以用对子程序稍加修改后单独运行来查错。这体现我经 历的程序不够多,需要在这方面加把劲。 (3)在编写音乐的时候,不懂的节拍的把握。后来上网查资料和老师的帮助,才对音乐的 节拍有所了解,最后终于解决了这问题。 问题的解决方法问题的解决方法 此次课程设计中遇到了很多问题,在指导老师的帮助下,加上我自己的努力及同学朋友的 全力帮助下,我的这些问题都已得到完满的解决。如节拍的问题,我通
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年台盟机关招聘面试题库及解析
- 老人居家安全知识培训课件
- 2025年村级电商长制下的人才选拔电商长助理招聘模拟题集及解析
- 党团考试题库判断题及答案
- 2025年成人英语培训行业规模分析及投资前景研究报告
- 福建某批发市场施工组织设计
- 2025安徽安庆市劳务派遣驾驶员招聘3人笔试模拟试题及答案解析
- 2025四川内江市医疗卫生辅助岗招募163人考试参考题库附答案解析
- 2025汉中汉台区七里中心幼儿园招聘笔试参考题库附答案解析
- 2025贵州观山湖区第十小学秋季学期招聘临聘教师笔试参考题库附答案解析
- 2026版步步高大一轮高考数学复习110练第四章 §4.4 简单的三角恒等变换含答案
- 新能源汽车维护与故障诊断课件
- 2025年中考冲刺模拟数学(云南卷)(考试版A3)
- DeepSeek+AI大模型赋能制造业集团数字化转型端到端采购供应链及财务管控业务流程蓝图规划方案
- 评估业务咨询顾问协议4篇
- 2025年征兵心理测试题及答案
- 2025年中国化学纤维市场现状分析及前景预测报告
- B型脑钠肽BNP课件
- 《西红柿移栽和管理》课件
- GB/T 45561.2-2025工业车辆可持续性第2部分:因素和报告
- 高空证考试题及答案
评论
0/150
提交评论