微机原理课程设计 音乐演奏Word格式文档下载.docx

上传人:b****3 文档编号:15071602 上传时间:2022-10-27 格式:DOCX 页数:22 大小:363.75KB
下载 相关 举报
微机原理课程设计 音乐演奏Word格式文档下载.docx_第1页
第1页 / 共22页
微机原理课程设计 音乐演奏Word格式文档下载.docx_第2页
第2页 / 共22页
微机原理课程设计 音乐演奏Word格式文档下载.docx_第3页
第3页 / 共22页
微机原理课程设计 音乐演奏Word格式文档下载.docx_第4页
第4页 / 共22页
微机原理课程设计 音乐演奏Word格式文档下载.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

微机原理课程设计 音乐演奏Word格式文档下载.docx

《微机原理课程设计 音乐演奏Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计 音乐演奏Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。

微机原理课程设计 音乐演奏Word格式文档下载.docx

1设计任务及要求分析

1.1设计任务

编写音乐程序,按大写字母“A”,奏一首歌曲;

按大写字母“B”;

奏另一首歌曲,曲目自选。

按Q退出程序。

(尽量演奏完整曲目)

1.2要求分析

在PC机中都带有8253-5定时/计数器,IBM-PC/AT中带有8254定时/计数器,这两种芯片功能十分类似。

本文通过对8253-5定时/计数器芯片的操作实现音乐演奏。

该声音接口通过汇编语言对8253-5的端口直接进行操作,可以不必要过多的使用BIOS的调用和DOS的调用。

计数器芯片有3个通道,各自具有专用功能。

通道0时系统的始终节拍计时器,通道1专用于产生动态RAM的定时刷新信号,通道2用来控制计算机的扬声器的声音频率。

该音乐演奏主要用到通道2的功能,使通道2工作在“方波发生器”方式,产生相应频率的音调送至喇叭驱动电路,使喇叭发出不同音调的声音。

使用8255A的PB1控制通道2的输出对扬声器产生控制的时间。

人机交互包括屏幕显示提示语以及人工输入相应参数,主要应用到BIOS的10H号中断调用以及DOS的21H号中断调用。

BIOS的10H号中断调用用于显示器驱动,设置显示模式和光标位置;

DOS的21H号中断调用用于单字符输入以及多字符输出显示。

通过相应的频率表将乐谱中对应的音符转化为计数器的计数初值,节奏通过延时程序转化为对喇叭发音时间的控制,从而实现音符和节拍的数字化。

2方案比较与选择

2.1方案一

通过编程使用软件来实现计数和喇叭发声的时间设置,控制8255A并行I/O接口驱动喇叭发声。

CPU每执行一条指令需要耗费一定的时间,这样可以通过循环的方式设置好循环次数,实现软件计数,然后输出相应的高低电平,驱动喇叭发出对应频率和节拍的声音。

2.2方案二

利用硬件实现频率计数和延时时间的控制,利用8253-5定时/计数器芯片和8255A并行I/O接口芯片。

利用8255A的PB1端口实现发声时间的计数控制。

这样可以精确的控制时间,减少CPU的开支。

2.3方案选择

方案一的优点是可以减少硬件开支,便于调试和问题的查找。

缺点是CPU开支太大,利用率不高,而且时间不够精准;

方案二的优点是控制精度提高,同时也减少CPU的开支。

缺点是硬件开销比较多。

本设计实现的功能所需要的硬件电路并不是太复杂,一般的IBM-PC/XT/AT机家族都带有相应的硬件电路。

在提高精度与简易程度的比较下,决定采用方案二,这样可以大大提高时间控制精度,同时减少软件程序的复杂度。

3系统原理说明

在IBM-PC/XT机中都带有8253-5定时/计数器,本文通过对8253-5定时/计数器芯片的操作实现音乐演奏。

使用8255A的PB0控制通道2的计数,PB1控制通道2的输出对扬声器产生控制的时间。

4硬件电路与原理

IBM-PC/XT内部8253电路图如图4-1所示。

图4-18253电路连接图

8253的通道0用于产生固定频率的时钟节拍,通道1用于产生固定频率的的刷新信号,通道2用于产生频率信号,工作在方式3,计数值为6A4H=1190,方波输出频率为1.19MHZ。

此信号频率决定扬声器的音调,通道2的控制字为0B6H。

音乐产生主要用到通道2。

8253通道2的计数由8255A的PB0控制,当PB0输出为高电平时,使门控GATE2为高电平。

此时,8253通道2允许计数,故通道2的输出方波受PB0的控制,从而控制扬声器的音调高低。

通道2的输出能否对扬声器产生持续控制还取决于8255A的PB1。

当PB1为“0”时,OUT2不能通过“与门”;

反之,则可以通过“与门”控制扬声器。

所以,扬声器发音时间的长短取决于8255A的PB1信号。

另外CPU通过读8255A的C口,得知8253通道2的状态和扬声器驱动器的状态。

5软件设计

5.1屏幕显示程序设计

程序运行时,屏幕显示第一界如图

图5-1运行界面

输入错误时,提示信息界面如图

图5-2,错误提示界面

上述提示信息在数据段定义,类型为字节型。

首先调用BIOS中断的10H号功能设置文本模式。

程序如下:

MOVAH,00H;

BIOS10子功能

MOVAL,02H;

80*25彩色文本模式

INT10H;

BIOS10功能调用

然后调用背景清屏子程序使文本屏幕清空,为输入信息作准备,清屏子程序如下:

CLRPROCNEAR

MOVBH,0;

第0页

MOVBL,0EH;

字符属性,黑底黄字

MOVDX,0000H;

0行0列

MOVAL,'

'

输出的字符

MOVCX,80*25;

循环次数

MOVAH,02H;

BIOS10H子功能调用,置光标位置

INT10H

MOVAH,09H;

BIOS10H子功能调用,输出字符

INT10H

RET

CLRENDP

最后输出提示语字符。

输出提示语字符时,需要多次使用一段相同的输出代码,将该代码定义为宏,可以避免多次重复书写相同的代码。

不定义为子程序是为了避免多次调用使执行速度减慢。

相应宏定义语句为:

SHOWMACROb

LEADX,b;

将相应字符段的偏移地址装入DX

MOVAH,9;

DOS21H号中断9子功能输出多字符

INT21H

ENDM

则相应的字符提示信息输出代码为

INFO1DB0DH,0AH,'

Musicplayer$'

INFO2DB0DH,0AH,'

---------------------$'

INFO3DB0DH,0AH,'

PLEASESELECTAMUSIC$'

INFO4DB0DH,0AH,'

INFO5DB0DH,0AH,'

ERROR!

INPUTABorQ$'

INFO6DB0DH,0AH,'

PLEASEINPUTAGAIN!

$'

MUSLISTDB0DH,0AH,'

ALANHUACAO'

DB0DH,0AH,'

BHAPPYBIRTHDAYTOYOU'

QEXIT'

~~~~~~~~~~~~~~~~~~~~~~'

$'

5.2发声的原理与控制程序

一首乐曲由若干音符组成,一个音符对应一个频率。

将与一个频率对应的计数器初值写入2号计数器(端口地址为42H),扬声器就发出相应的音调,计数器初值的计算公式:

计数器初值=1193182/输出频率

其中,1193182Hz转换成十六进制为12348CH,因此在打开扬声器的条件下,执行下列程序段即可发出与输出频率对应的音调。

MOVAL,0B6H;

写入方式控制字

OUT43H,AL;

写入控制端口

MOVDX,12H

MOVAX,348CH

DIV频率值 

 

频率转换成计数初值

OUT42H,AL 

低8位送2号计数器

MOVAL,AH

高位送2号计数器

接下来设计发声程序,发声系统受8255A芯片(端口地址为60H-63H)的两根输出线PB0和PB1的控制,PB0输出的高电平使2号计数器正常工作,PB1输出高电平打开输出控制门。

发声程序代码如下:

INAL,61H;

读取8255A的PB端口原输出值

MOVAH,AL;

将原输出值保存于AH中

ORAL,3;

使PB0、PB1、均为1

OUT61H,AL;

打开GATE2门,输出方波到扬声器

5.3音乐编程

一首歌曲包含节拍和频率,此处定义的音乐地址宏包含两个参数,所以音乐编程需要对音乐的节拍时间以及乐谱(频率)进行编写程序。

当选择不同的歌曲时,主程序调用不同的宏,将用户要求的歌曲的频率和节拍导入,实现音乐的演

奏。

5.3.1音乐节拍时间

控制音符的演奏时间,这是设计音乐程序的关键问题。

最直观的方法是按照谱为每一个音符规定一个演奏时间。

在遇到一首不熟悉歌曲时,初期很难确定每个音符的演唱时间,而调试程序的需大量的时间。

为每一个音符规定“单位时间”:

单位时间*N=音符的延长时间

其中,N为调试参数,一首歌曲只有一个调试参数。

设计程序时可以用EQU伪指令定义调试参数,初值现行估算,调试时在修改它。

节拍时间设置好以后,就可以利用延时程序,通过PB1端口控制发声的时间长短。

80x86的各种处理器采用6-66MHZ的工作频率,LOOP治理的执行时间在这些处理器上也不同。

为了建立一个与处理器无关的时间延迟,IBM采用了一个利用硬件产生时间延迟的方法,即通过监控端口61H的PB4,使PB4每15.08us触发一次,以产生一个固定不变的时间基准,在IBM-PC/XT中的BIOS中的WAITF子程序,就是一个产生N*15.08us时间延迟的程序,调用WAITF子程序时,CX寄存器必须装入15.08us的倍数N。

本程序延时程序参考上面的原理,代码如下:

waitfprocnear;

延时保护程序

pushax;

保护寄存器

waitf1:

inal,61h;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1