微机课程设计实验报告修改版.docx

上传人:b****8 文档编号:10353999 上传时间:2023-02-10 格式:DOCX 页数:18 大小:188.35KB
下载 相关 举报
微机课程设计实验报告修改版.docx_第1页
第1页 / 共18页
微机课程设计实验报告修改版.docx_第2页
第2页 / 共18页
微机课程设计实验报告修改版.docx_第3页
第3页 / 共18页
微机课程设计实验报告修改版.docx_第4页
第4页 / 共18页
微机课程设计实验报告修改版.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

微机课程设计实验报告修改版.docx

《微机课程设计实验报告修改版.docx》由会员分享,可在线阅读,更多相关《微机课程设计实验报告修改版.docx(18页珍藏版)》请在冰豆网上搜索。

微机课程设计实验报告修改版.docx

微机课程设计实验报告修改版

课程设计说明书

课程名称:

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

设计题目:

定时与计数:

利用8253控制扬声器发声,播放一段音乐

班级:

网络工程1502

姓名:

潘万丁

开始时间:

_2018_____年_01___月_15___日

完成时间:

_2018_____年_01___月_19___日

成绩评定

平时考勤(20%)

实验室调试(30%)

创新(10%)

答辩(20%)

说明书(20%)

总评

指导教师签名:

___年__月__日

目录

摘要

随着科技的高速发展,计算机已经经过了好几代的更新,然而计算机的运行的基本原理依然没有改变的。

而今,我们通过一个学期的学习,已经初步了解了计算机的基本结构和原理,并且已经学会了用汇编语言进行基本的程序编写。

1、概述

汇编语言是计算机能够提供给用户使用的最快而有效的语言,也是能够利用计算机所有特性并能直接控制硬件的唯一语言。

借助于汇编程序,计算机本身可以自动地把 汇编源程序翻译成用机器语言表示的目的程序,从而实现了程序设计工作的部分自动化。

而本次课程设计的主要目的就是巩固所学过的知识,用汇编语言熟练地运用三大结构,进一步掌握一些指令的功能、掌握子程序的定义及调用和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号计数器的计数初值就可以使扬声器发出不同频率的音响。

   ROM BIOS 中有个BEEP子程序,这能根据BL中组出的时间计数值控制8253定时器,产生持续时间为1个或几个0.5秒,频率为896HZ的声音,我们可以利用并修改BEEP,使其产生任一频率的声音。

为此我们需要做两点修改,首先,BEEP程序只能产生896HZ的声音,我们的通用发声程序应能产生任一频率的声音。

其次,BEEP产生声音的持续时间(音长)只能是0.5秒的倍数,我们希望声音的持续时间更易于调整,例如可以是10ms的倍数。

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

533H×896÷给定频率=123280H÷给定频率

发声程序包括4个步骤:

 

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

 

(2)在8253中的42H端口(Timer2)装入一个16位的计数值(533H×895/频率),以建立将要产生的声音频率。

 

(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中采集到输入的数据时,需要确定相应的频率,所以在软件编程时要建立一个数据表。

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

 

计数值=533H×896÷ f=1234DCH÷ f 

算出计数值,再把算得的计数值送给8253,就可产生所要频率的方波。

在把计数值送8253前,必须先把8253进行初始化:

 

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

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

这个方波经驱动放大就可以使扬声器发出相应的声音。

 所以8255在这里完成两个任务,它不仅从A口中采集到数据,而且B口的PB1和PB0两个位要控制发声。

8253的主要任务就是产生所要求发声的不同频率的方波。

本例程序是由8253芯片控制发声的音阶和节拍,由8255芯片控制扬声器的端口地址开启扬声器发生。

音阶对应的数据表如下

音符

简谱音阶

频率

音符

简谱音阶

频率

音符

简谱音阶

频率

C’’

1.

139

C

1

262

C’

.1

524

D’’

2.

147

D

2

294

D’

.2

587

E’’

3.

165

E

3

330

E’

.3

659

F’’

4.

175

F

4

349

F’

.4

698

G’’

5.

196

G

5

392

G’

.5

784

A’’

6.

220

A

6

440

A’

.6

880

B’’

7.

247

B

7

494

B’

.7

988

通过编写程序,由计算机主板上的8253芯片和8255芯片连接到主板上的扬声

器来控制主板发声。

1.算法描述流程图:

 

Y

N

 

 

 

 

实现代码如下:

;***************************************************************************;程序名称:

ceshi

;两只老虎乐曲

;***************************************************************************

stacksegmentparastack'stack'

db64dup('stack...')

stackends

;*******************************************************************

dsegsegmentpara'data'

mus_freqdw262,294,330,262,262,294,330,262

dw330,349,392,330,349,392,392,440

dw392,349,330,262,392,440,392,349

dw330,262,294,196,262,294,196,262,-1

mus_timedw25,25,25,25,25,25,25,25,25,25

dw50,25,25,50,12,12,12,12,25,25

dw12,12,12,12,25,25,25,25,50,25,25,50

dsegends

;*******************************************************************

csegsegmentpara'code'

assumecs:

cseg,ss:

stack,ds:

dseg

;-------------------------------------------------------------------

musicprocfar

movax,dseg

movds,ax

leasi,mus_freq

leabp,ds:

mus_time

freq:

movdi,[si]

cmpdi,-1

jeend_mus

movbx,ds:

[bp]

callsoundf

addsi,2

addbp,2

jmpfreq

end_mus:

movax,4c00h

int21h

musicendp

;--------------------------------------------------------------------------

soundfprocnear

pushax

pushbx

pushcx

pushdx

pushdi

moval,0b6h

out43h,al

movdx,12h

movax,348ch

divdi

out42h,al

moval,ah

out42h,al

inal,61h

movah,al

oral,3

out61h,al

wait1:

movcx,6630

callwaitf

decbx

jnzwait1

moval,ah

out61h,al

popdi

popdx

popcx

popbx

popax

ret

soundfendp

;--------------------------------------------------------------------------

waitfprocnear

pushax

waitf1:

inal,61h

andal,10h

cmpal,ah

jewaitf1

movah,al

loopwaitf1

popax

ret

waitfendp

;--------------------------------------------------------------------------

csegends

;***************************************************************************

endmusic

;***************************************************************************

4、调试过程

1.编辑源程序,假定源文件名为YINYUE.ASM。

2.汇编源程序YINYUE.ASM。

调用宏汇编程序MASM对源文件YINYUE.ASM进行汇编,生成目标文件YINYUE.OBJ。

若汇编无错误,则进入第三步。

3.用连接命令LINK连接目标程序文件YINYUE.OBJ。

若连接成功,则进入下一步。

4.运行可执行文件YINYUE.EXE。

5.两只老虎音乐响起。

5、结果描述

按上面的调试步骤过后,运行ceshi过后,音乐就响起了。

六、总结

1.在这一周的实验过程中碰到了很多的难题和障碍,我们组刚开始各做各的,最后选择最好的程序进行答辩,所以我们每个人都得到了锻炼。

在实验的过程中我认识到平时基础知识的重要性,只有能够熟练的掌握指令的含义才能在实验过程中得心应手,否则一步错则整个试验都会陷入困境,因而,严谨的态度是试验成功的重要保障!

2.通过这次课程设计,我对各个芯片有了进一步的了解,对各个芯片的功能有了更深刻的认识和体会,平时上课的理论知识只是停留在理论的层面,只有通过了这样的试验才能更好的体会到,做到了理论和实际的相结合,使理论知识真正运用到了实践中去。

同时在实验过程中我还遇到了很多没见过的指令,同时自己也自己回到宿舍花时间在网上看了一些有关于指令的视频教程,对自己的原有知识进一步巩固与提升了。

3.我们大家在实验的时候都团结合作,遇到问题时候一起探讨,增强了我们的合作精神。

特别是在制作仿真图的时候大家都很积极帮忙,讨论。

七、参考文献

[1]韩雁,徐煜明。

《微机原理与接口技术》。

北京:

电子工业出版社,2007。

[2]超想-3000TC微机原理与接口实验指导书。

[3]StephenE.Derenzo著,蔡梅琳等译。

PracticalInterfacingintheLaboratory,UsingaPCfortheInstrumentation,DataAnalysis,andControl(微机接口技术实验教程)。

北京:

机械工业出版社,2006.

[4]钱晓捷编著。

32位汇编语言程序设计。

机械工业出版社,2011.

音乐播放仿真图:

仿真图里导入的《两老虎》音乐程序:

stacksegment

db64dup('stack...')

stackends

datasegment

mus_freqdw262,294,330,262,262,294,330,262

dw330,349,392,330,349,392,392,440

dw392,349,330,262,392,440,392,349

dw330,262,294,196,262,294,196,262,-1

music_timedw10dup(25)

dw50,25,25,50,12,12,12,12,25,25

dw12,12,12,12,25,25,25,25,50,25,25,50

dataends

codesegment

assumecs:

code,ds:

data,ss:

stack

musicprocfar

movax,data

movds,ax

movax,stack

movss,ax

leasi,mus_freq

leabp,ds:

music_time

freq:

movdi,[si]

cmpdi,-1

jeend_mus

movbx,ds:

[bp]

callsoundf

addsi,2

addbp,2

jmpfreq

end_mus:

moval,0

out62h,al

movah,4ch

int21h

musicendp

soundfproc

pushax

pushbx

pushcx

pushdx

pushdi

;MOVAL,80H

;OUT66H,AL

moval,0b6h

out46h,al

MOVDX,00H

MOVAX,6000

divdi

out44h,al

moval,ah

out44h,al

moval,0

movah,al

oral,3

out62h,al

d1:

movcx,2801

d2:

loopd2

decbx

jnzd1

moval,ah

out62h,al

popdi

popdx

popcx

popbx

popax

ret

soundfendp

codeends

endmusic

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

当前位置:首页 > 解决方案 > 学习计划

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

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