微机课程设计实验报告修改版_第1页
微机课程设计实验报告修改版_第2页
微机课程设计实验报告修改版_第3页
微机课程设计实验报告修改版_第4页
微机课程设计实验报告修改版_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——微机课程设计实验报告修改版课程设计说明书

课程名称:

《微机原理及接口技术》课程设计

设计题目:用定时与计数:利用8253操纵扬声器发声,播放一段音乐

班级:

网络工程1502

姓名:

潘万丁

开始时间:_2022_____年_01___月_15___日

完成时间:_2022_____年_01___月_19___日

成绩评定平时考勤(20%)

试验室调试(30%)

创新(10%)

辩论(20%)

说明书(20%)

总评

指导教师签名:

___年__月__日

目录摘要随着科技的高速发展,计算机已经经过了好几代的更新,然而计算机的运行的基本原理依旧没有改变的。而今,我们通过一个学期的学习,已经初步了解了计算机的基本结构和原理,并且已经学会了用汇编语言进行基本的程序编写。

一、概述汇编语言是计算机能够提供应用户使用的最快而有效的语言,也是能够利用计算机所有特性并能直接操纵硬件的唯一语言。借助于汇编程序,计算机本身可以自动地把汇编源程序翻译成用机器语言表示的目的程序,从而实现了程序设计工作的部分自动化。而本次课程设计的主要目的就是稳定所学过的知识,用汇编语言熟练地运用三大结构,进一步把握一些指令的功能、把握子程序的定义及调用和INT21H、INT10H中断的使用,同时熟练运用通用寄放器和堆栈来进行编写一个完整的具有某种特定功能的程序。

二、方案设计1.功能分析

在此次设计中,第一个重点就是音乐播放的操纵,要想能依照正常的频率和节拍播放出音乐,就需要合理的设计出给蜂鸣器的频率值和播放的时间。这样就能对比确切的把音乐按一定的节奏播放出来。假如我们要想加快播放速度,我们可以改变每一节拍的播放时间,假如我们改变了播放的频率值,那么歌曲也就相应的改变了。

我们根据上面的功能分析,同时通过查阅相关资料,了解了计算机的内部结构的同时还明了的理解了DOS中的21H和10H中断的调用,因此我们设计出如下方案:

(1)音乐的代码化

我们首先收集了一首简单的歌曲《两只老虎》,同时还带有相应的音谱,通过查阅相关的音乐资料,了解了节拍的概念和各音符所对应的频率,而后我们把每一首歌曲都转化成两个数据段,一个是把各个音符翻译成相应的频率值,其次是把相应的节拍转化成对应的时间值,来操纵播放每一个音符所对应的时间。这样我们在播放歌曲时,同时调用频率值和时间值就可以把相应的歌曲播放出来了。

(2)音乐演奏的硬件协同

我们了解到在计算机的主板上有8253、8255和蜂鸣器,同时了解到蜂鸣器的驱动是通过8255和8253共同操纵的,我们通过对8253的通道2进行写数据来操纵蜂鸣器的声音频率,再通过8255来操纵播放时间的长短,就通过这样的奇妙协同来达到播放完整音乐的效果。

(3)音乐演奏的软件设计

软件设计是本设计的重点,在软件设计中,我们要给8253和8255写数据,执行相应的代码来操纵音乐的播放。

三、软件设计

在介绍音乐的播放之前,先来说说PC机的小喇叭是怎样与机器相连的呢?下面的"发声原理图'表示了喇叭与机器简单的相连状况。喇叭的一端连接在电源正极,另一端与机器的61H端口的bit位相连。可以想象,若能连续改变61H端口的bit位0,1状态,就可以使喇叭线圈内的电流时有时无,从而使喇叭发声。我们编制的汇编程序的工作,就是连续改变61H端口的bit位状态。

我们使用PC机有一个专门用于定时的电路,型号为8253。它有三个通道,第一个通道用于操纵始终正常运转;其次个通道用于存储器刷新;这两个通道与我们现在要探讨的问题无关。第三个就是一组电路域喇叭相连。

如下图所示就是PC机中完整的发声电路,定时器通道3的G端与61H端口的bit0位相连,假如把61H端口的bit0位置为1,那么定时器通道3就会被启动,此时将有一组信号从OUT输出,信号的频率可以用程序操纵;若61H的端口bit0位为0,则定时器被关闭,out端就恒为1.

发声原理图:

发声程序设计原理:

PC机发声系统以8253的2号计数器为核心。系统初始化时,2号计数器I作在"方波发生器'方式,初值为二进制数,,写入顺序为先低后高,CLK2为1.193182MHz,当计数初值为533H时,OUT2输出的方波大约为900Hz,经过简单的滤波之后,送至扬声器。改变1、4号计数器的计数初值就可以使扬声器发出不同频率的音响。

ROMBIOS中有个BEEP子程序,这能根据BL中组出的时间计数值操纵8253定时器,产生持续时间为1个或几个0.5秒,频率为896HZ的声音,我们可以利用并修改BEEP,使其产生任一频率的声音。为此我们需要做两点修改,首先,BEEP程序只能产生896HZ的声音,我们的通用发声程序应能产生任一频率的声音。其次,BEEP产生声音的持续时间(音长)只能是0.5秒的倍数,我们希望声音的持续时间更易于调整,例如可以是10ms的倍数。

我们知道BEEP能将计数值533H送给定时器2产生896HZ的声音的,那么产生其它频率声音的时间计数值应为:

533H896给定频率=123280H给定频率发声程序包括4个步骤:

(1)在8253中的42端口送一个操纵字0B6H(10110110B),该操纵字对定时器2进行初始化,使定时器2准备接收计数初值。

(2)在8253中的42H端口(Timer2)装入一个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机上的大多数输入/输出(I/O)都是由主板上的8255(或8255A)可编程序外围接口芯片(PPI)管理的。PPI只有PB0和PB1同时为"1'时,才能驱动扬声器地声。

当从8255中采集到输入的数据时,需要确定相应的频率,所以在软件编程时要建立一个数据表。

把相应的频率送到一个寄放器上,通过公式:

计数值=533H896f=1234DCHf

算出计数值,再把算得的计数值送给8253,就可产生所要频率的方波。在把计数值送8253前,必需先把8253进行初始化:

使其选用通道2,工作在方式3下。

就整个电路而言,接好电路后,通过软件编程不断地采集从8255口中输入的信号,而8个开关都接在8255的A口上,只要有开关按下,就会采集到一个数据,根据这个数据与事先编好的表对应,得到一个计数值,把这个计数值送给8253的通道2,8253的通道2工作的方式3下,这样就可以产生满足频率要求的发声方波。这个方波经驱动放大就可以使扬声器发出相应的声音。

所以8255在这里完成两个任务,它不仅从A口中采集到数据,而且B口的PB1和PB0两个位要操纵发声。8253的主要任务就是产生

所要求发声的不同频率的方波。

本例程序是由8253芯片操纵发声的音阶和节拍,由8255芯片操纵扬声器的端口地址开启扬声器发生。音阶对应的数据表如下音符

简谱音阶

频率

音符

简谱音阶

频率

音符

简谱音阶

频率

C1.139C1262C.1524D2.147D2294D.2587E3.165E3330E.3659F4.175F4349F.4698G5.196G5392G.5784A6.220A6440A.6880B7.247B7494B.7988通过编写程序,由计算机主板上的8253芯片和8255芯片连接到主板上的扬声器来操纵主板发声。

1.算法描述流程图:

Y

N

开始数据段存入内存取SI所指向的音节频率段频率取BP所指向的发声时长值频率是否为-1?向8253计数器2写操纵字8253操纵8255发声调整SI,BP地址,使SI指向下一个频率BP指向下一个时长终止

实现代码如下:

;***************************************************************************;程序名称:ceshi;两只老虎乐曲;***************************************************************************stacksegmentparastack"stack"

db64dup("stack...")stackends;*******************************************************************dsegsegmentpara"data"mus_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,50dsegends;*******************************************************************csegsegmentpara"code"

assumecs:cseg,ss:stack,ds:dseg;

musicprocfar

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]

callsoundf

add

si,2

add

bp,2

jmp

freqend_mus:

mov

ax,4c00h

int

21hmusicendp;soundfprocnear

pushax

pushbx

pushcx

pushdx

pushdi

mov

al,0b6h

out

43h,al

mov

dx,12h

mov

ax,348ch

div

di

out

42h,al

mov

al,ah

out

42h,al

in

al,61h

mov

ah,al

or

al,3

out

61h,alwait1:

mov

cx,6630

callwaitf

dec

bx

jnz

wait1

mov

al,ah

out

61h,al

pop

di

pop

dx

pop

cx

pop

bx

pop

ax

retsoundfendp;waitfprocnear

pushaxwaitf1:

in

al,61h

and

al,10h

cmp

al,ah

je

waitf1

mov

ah,al

loopwaitf1

pop

ax

retwaitfendp;csegends;***************************************************************************

endmusic;***************************************************************************

四、调试过程1.编辑源程序,假

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论