微机课程设计--定时与计数:利用控制扬声器发声.docx

上传人:bao****ty 文档编号:132382298 上传时间:2020-05-15 格式:DOCX 页数:12 大小:162.63KB
返回 下载 相关 举报
微机课程设计--定时与计数:利用控制扬声器发声.docx_第1页
第1页 / 共12页
微机课程设计--定时与计数:利用控制扬声器发声.docx_第2页
第2页 / 共12页
微机课程设计--定时与计数:利用控制扬声器发声.docx_第3页
第3页 / 共12页
微机课程设计--定时与计数:利用控制扬声器发声.docx_第4页
第4页 / 共12页
微机课程设计--定时与计数:利用控制扬声器发声.docx_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《微机课程设计--定时与计数:利用控制扬声器发声.docx》由会员分享,可在线阅读,更多相关《微机课程设计--定时与计数:利用控制扬声器发声.docx(12页珍藏版)》请在金锄头文库上搜索。

1、课程设计说明书课程名称:微机原理及接口技术课程设计设计题目:定时与计数:利用8253控制扬声器发声,播放一段音乐班级: 姓名:开始时间:2018年01月15日完成时间:2018年01月19日成绩评定平时考勤(20%)实验室调试(30%)创新(10%)答辩(20%)说明书(20%)总评指导教师签名:年月日目录摘要随着科技的高速发展,计算机已经经过了好几代的更新,然而计算机的运行的基本原理依然没有改变的。而今,我们通过一个学期的学习,已经初步了解了计算机的基本结构和原理,并且已经学会了用汇编语言进行基本的程序编写。1、 概述汇编语言是计算机能够提供给用户使用的最快而有效的语言,也是能够利用计算机所

2、有特性并能直接控制硬件的唯一语言。借助于汇编程序,计算机本身可以自动地把汇编源程序翻译成用机器语言表示的目的程序,从而实现了程序设计工作的部分自动化。而本次课程设计的主要目的就是巩固所学过的知识,用汇编语言熟练地运用三大结构,进一步掌握一些指令的功能、掌握子程序的定义及调用和INT 21H、INT10H中断的使用,同时熟练运用通用寄存器和堆栈来进行编写一个完整的具有某种特定功能的程序。二、方案设计1功能分析 在此次设计中,第一个重点就是音乐播放的控制,要想能按照正常的频率和节拍播放出音乐,就需要合理的设计出给蜂鸣器的频率值和播放的时间。这样就能比较准确的把音乐按一定的节奏播放出来。如果我们要想

3、加快播放速度,我们可以改变每一节拍的播放时间,如果我们改变了播放的频率值,那么歌曲也就相应的改变了。 我们根据上面的功能分析,同时通过查阅相关资料,了解了计算机的内部结构的同时还清楚的理解了DOS中的21H和10H中断的调用,因此我们设计出如下方案: (1)音乐的代码化 我们首先收集了一首简单的歌曲两只老虎,同时还带有相应的音谱,通过查阅相关的音乐资料,了解了节拍的概念和各音符所对应的频率,而后我们把每一首歌曲都转化成两个数据段,一个是把各个音符翻译成相应的频率值,第二是把相应的节拍转化成对应的时间值,来控制播放每一个音符所对应的时间。这样我们在播放歌曲时,同时调用频率值和时间值就可以把相应的

4、歌曲播放出来了。 (2)音乐演奏的硬件配合 我们了解到在计算机的主板上有8253、8255和蜂鸣器,同时了解到蜂鸣器的驱动是通过8255和8253共同控制的,我们通过对8253的通道2进行写数据来控制蜂鸣器的声音频率,再通过8255来控制播放时间的长短,就通过这样的巧妙配合来达到播放完整音乐的效果。 (3)音乐演奏的软件设计 软件设计是本设计的重点,在软件设计中,我们要给8253和8255写数据,执行相应的代码来控制音乐的播放。 三、软件设计在介绍音乐的播放之前,先来说说PC机的小喇叭是怎样与机器相连的呢?下面的“发声原理图”表示了喇叭与机器简单的相连情况。喇叭的一端连接在电源正极,另一端与机

5、器的61H端口的bit位相连。可以想象,若能连续改变61H端口的bit位0,1状态,就可以使喇叭线圈内的电流时有时无,从而使喇叭发声。我们编制的汇编程序的工作,就是连续改变61H端口的bit位状态。 我们使用PC机有一个专门用于定时的电路,型号为8253。它有三个通道,第一个通道用于控制始终正常运转;第二个通道用于存储器刷新;这两个通道与我们现在要讨论的问题无关。第三个就是一组电路域喇叭相连。 如下图所示就是PC机中完整的发声电路,定时器通道3的G端与61H端口的bit0位相连,如果把61H端口的bit0位置为1,那么定时器通道3就会被启动,此时将有一组信号从OUT输出,信号的频率可以用程序控

6、制;若61H的端口bit0位为0,则定时器被关闭,out端就恒为1.发声原理图:发声程序设计原理: PC机发声系统以8253的2号计数器为核心。系统初始化时,2号计数器I作在“方波发生器”方式,初值为二进制数,写入顺序为先低后高,CLK2为1193182MHz,当计数初值为533H时,OUT2输出的方波大约为900Hz,经过简单的滤波之后,送至扬声器。改变1、4号计数器的计数初值就可以使扬声器发出不同频率的音响。 ROMBIOS中有个BEEP子程序,这能根据BL中组出的时间计数值控制8253定时器,产生持续时间为1个或几个0.5秒,频率为896HZ的声音,我们可以利用并修改BEEP,使其产生任

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

8、入一个16位的计数值(533H895/频率),以建立将要产生的声音频率。(3)把输出端口61H的PB0、PB1两位置1,发出声音。 对于发音部分。PC机上的大多数输入/输出(I/O)都是由主板上的8255(或8255A)可编程序外围接口芯片(PPI)管理的。PPI包括3个8位寄存器,两个用于输入功能,一个用于输出功能。输入寄存器分配的I/O端口号为60H和62H,输出寄存器分配的I/O端口号为61H。由PPI输出寄存器中的0、1两位来选择扬声器的驱动方式。(4)注意音乐节拍表的频率表的设定。一个频率对应一个节拍,如果频率表和节拍表有问题,同样不会发出声音。 对于发音部分。PC机上的大多数输入/

9、输出(I/O)都是由主板上的8255(或8255A)可编程序外围接口芯片(PPI)管理的。PPI只有PB0和PB1同时为“1”时,才能驱动扬声器地声。当从8255中采集到输入的数据时,需要确定相应的频率,所以在软件编程时要建立一个数据表。把相应的频率送到一个寄存器上,通过公式:计数值=533H896f=1234DCHf算出计数值,再把算得的计数值送给8253,就可产生所要频率的方波。在把计数值送8253前,必须先把8253进行初始化: 使其选用通道2,工作在方式3下。就整个电路而言,接好电路后,通过软件编程不断地采集从8255口中输入的信号,而8个开关都接在8255的A口上,只要有开关按下,就

10、会采集到一个数据,根据这个数据与事先编好的表对应,得到一个计数值,把这个计数值送给8253的通道2,8253的通道2工作的方式3下,这样就可以产生满足频率要求的发声方波。这个方波经驱动放大就可以使扬声器发出相应的声音。所以8255在这里完成两个任务,它不仅从A口中采集到数据,而且B口的PB1和PB0两个位要控制发声。8253的主要任务就是产生所要求发声的不同频率的方波。本例程序是由 8253芯片控制发声的音阶和节拍, 由 8255 芯片控制扬声器的端口地址开启扬声器发生。音阶对应的数据表如下音符简谱音阶频率音符简谱音阶频率音符简谱音阶频率C1.139C1262C.1524D2.147D2294

11、D.2587E3.165E3330E.3659F4.175F4349F.4698G5.196G5392G.5784A6.220A6440A.6880B7.247B7494B.7988通过编写程序,由计算机主板上的 8253 芯片和 8255 芯片连接到主板上的扬声器来控制主板发声。1.算法描述流程图:开始数据段存入内存取SI所指向的音节频率段频率取BP所指向的发声时长值频率是否为-1?Y向8253计数器2写控制字N8253控制8255发声调整SI,BP地址,使SI指向下一个频率BP指向下一个时长结束 实现代码如下:;*;程序名称:ceshi;两只老虎乐曲;*stack segment para

12、 stack stack db 64 dup(stack.)stack ends;*dseg segment para datamus_freq dw 262,294,330,262,262,294,330,262 dw 330,349,392,330,349,392,392,440 dw 392,349,330,262,392,440,392,349 dw 330,262,294,196,262,294,196,262,-1mus_time dw 25,25,25,25,25,25,25,25,25,25 dw 50,25,25,50,12,12,12,12,25,25 dw 12,12,12,12,25,25,25,25,50,25,25,50dseg ends;*cseg segment para code assume cs:cseg,ss:stack,ds:dseg;- music proc far mov ax,dseg mov ds,ax lea si,mus_freq lea bp,ds:mus_timefreq: mov di,si cmp di,-1 je end_mus mov bx,ds:bp call soundf add si,2 add bp,2 jmp freqend_mus: mov ax,4c00h int 21hmusic endp;-

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

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

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