微机原理课程设计电子音乐播放器.docx

上传人:b****5 文档编号:7634846 上传时间:2023-01-25 格式:DOCX 页数:17 大小:334.82KB
下载 相关 举报
微机原理课程设计电子音乐播放器.docx_第1页
第1页 / 共17页
微机原理课程设计电子音乐播放器.docx_第2页
第2页 / 共17页
微机原理课程设计电子音乐播放器.docx_第3页
第3页 / 共17页
微机原理课程设计电子音乐播放器.docx_第4页
第4页 / 共17页
微机原理课程设计电子音乐播放器.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

微机原理课程设计电子音乐播放器.docx

《微机原理课程设计电子音乐播放器.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计电子音乐播放器.docx(17页珍藏版)》请在冰豆网上搜索。

微机原理课程设计电子音乐播放器.docx

微机原理课程设计电子音乐播放器

一、课程设计任务及要求

1.1课程设计题目:

电子音乐播放器

1.2课程设计任务及要求:

设计一个音乐程序,演奏音乐按大写字母“A”,唱乐曲“玛丽有只小羔羊”;

按大写字母“B”,唱乐曲“太湖船”

按大写字母“C”,唱乐曲“祝福歌”

按"Q"鍵,退出

二、课程设计相关知识

2.1定时/计数器8253/58254

在微机及控制系统中,经常要用到定时信号。

如系统的日历时钟,动态存储器刷新。

对外部执行机构控制时也需要定时中断、定时检测、定时查询等。

定时的方法主要是两种:

软件定时:

利用指令的执行时间设计循环程序,使CPU执行延迟子程序的时间就是定时时间。

缺点:

执行延迟时,CPU一直被占用,降低了CPU的效率。

硬件定时:

用计数器/定时器作为主要硬件,在软件简单指令的控制下产生精确的时间延迟。

突出优点为计数时不占用CPU时间,如利用定时器/计数器产生中断信号,可建立多作业环境,提高了CPU效率。

作为定时器可用8253或者8254,二者功能基本相同,知识工作的最高频率不一样。

本实验就采用了8254,其主要功能为:

(1)每片上有3个独立的16位的减计数器通道。

(2)对于每个计数器,都可以单独作为定时器或计数器使用,并且都可以按照二进制或十进制来计数。

(3)每个通道都有6种工作方式,都可以通过程序设置或改变。

(4)每个计数器的速率可高达10MHz。

主要部分有:

数据总线缓冲器、读/写控制逻辑、控制字寄存器、计数通道0#、1#、2#:

内部结构如下图:

8254内部结构

2.28254外部引脚

8254芯片是具有24个引脚的双列直插式集成电路芯片,其引脚分布如图所示。

8254芯片的24个引脚分为两组,一组面向CPU,另一组面向外部设备,各个引脚及其所传送信号的情况,介绍如下:

8254的引脚

(1)D7~D0:

双向、三态数据线引脚,与系统的数据线连接,传送控制、数据及状态信息。

(2)RD:

来自于CPU的读控制信号输入引脚,低电平有效。

(3)WR:

来自于CPU的写控制信号输入引脚,低电平有效。

(4)CS:

芯片选择信号输入引脚,低电平有效。

(5)A1、A0:

地址信号输入引脚,用以选择8254芯片的通道及控制字寄存器。

(6).VCC及GND:

+5V电源及接地引脚。

(7)CLKi:

i=0,1,2,第i个通道的计数脉冲输入引脚,8254规定,加在CLK引脚的输入时钟信号的频率不得高于2.6MHZ,即时钟周期不能小于380ns。

(8)GATEi:

i=0,1,2,第i个通道的门控信号输入引脚,门控信号的作用与通道的工作方式有关。

(9)OUTi:

i=0,1,2,第i个通道的定时/计数到信号输出引脚,输出信号的形式由通道的工作方式确定,此输出信号可用于触发其它电路工作,或作为向CPU发出的中断请求信号。

2.38254端口地址

8254控制字

说明:

(1)8254每个通道对输入CLK按二进制或二十进制从预置值开始减1计数,减到0时从OUT输出一个信号。

(2)8254编程时先写控制字,再写时间常数。

2.48254工作方式

(1)方式0:

计数结束产生中断方式

当写入控制字后,OUT变为低电平,当写入初值后立即开始计数,当计数结束时,变成高电平。

(2)方式1:

可编程单次脉冲方式

当初值装入后且GATE由低变高时,OUT变为低电平,计数结束变为高电平。

(3)方式2:

频率发生器方式

当初值装入时,OUT变为高;计数结束,OUT变为低。

该方式下如果计数未结束,但GATE为低时,立即停止计数,强制OUT变高,当GATE再变高时,便启动一次新的计数周期。

(4)方式3:

方波发生器

当装入初值后,在GATE上升沿启动计数,OUT输出高电平;当计数完成一半时,OUT输出低电平。

方式3与方式2的工作方式类似,也是在初始化完成后能重复循环计数,只是输出的波形不同。

(5)方式4:

软件出发选通方式

进入工作方式4,OUTi输出高电平。

装入计数值n后,如果GATE为高电平,则立即开始减“1”计数,直到计数值减到“0”为止,OUTi输出宽度为一个CLKi周期的负脉冲。

由软件装入的计数值只有一次有效,如果要继续操作,必须重新置入计数初值n。

如果在操作的过程中,GATE变为无效,则停止减“1”计数,到GATE再次有效时,重新从初值开始减“1”计数。

(6)方式5:

硬件触发方式计数

进入工作方式5,OUTi输出高电平,硬件触发信号由GATE端引入。

因此,开始时GATE应输入为0,装入计数初值n后,减“1”计数并不工作,一定要等到硬件触发信号由GATE端引入一个正阶跃信号,减“1”计数才会开始,待计数值计到“0”,OUTi将输出负脉冲,其宽度固定为一个CLKi周期,表示定时时间到或计数次数到。

三、程序设计思路

所有音乐都是由各个不同频率的音阶和其延续时间的长短来实现的。

不同的音乐是由各个音阶按某种排列各自播放一定时间形成的,将各音乐音阶和其延续时间存在数据段中,然后根据不同按键值选择不同的音阶和时间表,再使用计数器产生该音阶频率。

CPU通过对定时器的通道2(端口地址为42)进行编程,使其I/O寄存器接收一个控制声音频率的16位计数值,端口61H的最低控制通道2门控的开断。

以产生特殊的音响。

当定时器接收的计数值为533H时,能产生896Hz的声音,因此产生其他频率的计数值就可算出来:

533Hz×896÷频率=1234DC÷频率

在送出频率计数值之前,还要给方式寄存器送一个方式值,该数决定对哪一个通道编程,采用什么模式,送入通道的计数值是一字节还是两字节,是二进制码还是BCD码。

其位组合的格式如下:

当通道2用于发声时,采用的是模式3,在模式3下,输出线为“1”和为“0”的时间各占计数时间的一半,因而产生一系列间隔均匀的脉冲。

产生指定频率声音的程序段如下:

MOVAL,0B6H

OUT43H,AL;43H为8254的控制字端口

MOVDX,12H

MOVAX,34DCH

DIVDI;(DI)=频率

OUT42H,AL;42H为8254的通道2端口

MOVAL,AH

MOV42H,AL

从定时器输出的方波信号,经功率放大和滤波后驱动扬声器。

送到扬声器的信号还受到了从并行接口芯片8255(端口地址为61H)来的双重控制,端口61H的最低位控制通道2的门控开断,以产生特殊的音频信号,端口61H的PA1位和定时器的输出信号同时作为与门的输入,PA0和PA1位可由程序决定为0还是为1。

显然只有PA0和PA1都是1时,才能使扬声器发出声音。

控制音长的时间可以简单地通过反复执行指令来得到。

我们知道执行2801次LOOP指令约需要10MS的时间。

因此用10MS的倍数值来控制扬声器开关的时间间隔,就可控制发声的音长了。

实现程序如下:

INAL,61H

MOVAH,AL

ORAL,3

OUT61H,AL;开扬声器

L:

MOVCX,2801

DY:

LOOPDY

DECBX

JNZL

MOVAL,AH

OUT61H,AL;关扬声器

四、功能流程图及子程序说明

4.1总流程图

MAIN程序:

MAIN程序是总程序,输出说明,等待用户按键并读取键值。

根据不同的按键选择调用播音子程序播放不同的歌曲。

4.2音乐播放子程序流程图

PLAY子程序:

PLAY子程序是播音子程序,SI指向音节表中的频率,BP指向音节表中的时间。

从SI的指向的音节表中取一个频率,只要不是-1,即有效就再读取时间,然后计算计数初值送入计数器,产生各种频率。

开启扬声器,根据所取的时间调用若干次延时子程序。

这段时间扬声器就发出该频率的声音,延时结束,就关闭扬声器,调用音节之间的小延时程序。

最后修改SI和BP,指向下一个频率,重复上面的工作

DELAY子程序和DELAY_OFF子程序:

两个都是子程序,采用空操作循环多次的方法,只是第二个延时时间较短,大概为5ms。

 

4.3部分源程序代码

 

五、调试结果截屏及结果分析

5.1调试结果截屏

初始界面:

如果按错了键,会出现如下界面:

如果选择正确,将出现如下界面:

5.2结果分析

根据输出结果显示,此次试验设计结果与预想设计方案想要达到的结果相一致,没有出现任何偏差,此次设计较为成功。

但在实验过程中对程序不断地进行了调试,将音频频率不断地进行了改变,由原来的低频通过同时扩大其倍数,最终使音频达到预期的效果。

 

六、参考文献

【1】李长青.微机原理与接口技术.徐州:

中国矿业大学出版社,2006

【2】沈美明.汇编语言程序设计实验教程.北京:

清华大学出版社,2002年

【3】周明德.微机原理与接口技术.北京:

人民邮电出版社,2002年

 

 

 

七、附录

7.1源程序代码:

DATASEGMENT

DATA1DB0AH,0DH,'HELLEL!

WELCOMEYOUTOCOMEHERE!

$'

DB0AH,0DH,'THISISAMUSICPROGRAM!

$'

DB0AH,0DH,'PLEASESELECLT!

$'

DATA4DB0AH,0DH,'inputERROR!

$'

DATA5DB0AH,0DH,'inputAGAIN!

$'

MUSLISTDB0AH,0DH,'PressAMaliyouzhixiaoyanggao'

DB0AH,0DH,'PressBTaihuchuan'

DB0AH,0DH,'PressCzhufuge'

DB0AH,0DH,'$'

MUSFRQADW330,294,262,294,3dup(330)

DW3dup(294),330,392,392

DW330,294,262,294,4dup(330)

DW294,294,330,294,262,-1

MUSTIMADW6dup(100),200

DW2dup(100,100,200)

DW12dup(100),400

MUSFRQBDW330,392,330,294,330,392,330,294,330

DW330,392,330,294,262,294,330,392,294

DW262,262,220,196,196,220,262,294,330,262

DW-1

MUSTIMBDW3dup(200),100,100,200,100,100,400

DW2dup(200,200,100,100),400

DW3dup(200,100,100),400

MUSFRQCDW392,262,294,330,350,392,262,262

DW440,350,392,440,494,524,262,262

DW350,392,350,330,294,330

DW350,330,294,262,294,330,294,262,247,262,-1

MUSTIMCDW200,4DUP(100),200,200,200

DW200,4DUP(100),200,200,200

DW200,4DUP(100),200

DW4DUP(100),200,4DUP(100),400

DATAENDS

STACKSEGMENTPARASTACK'STACK'

STADB200DUP('STACK')

STACKENDS

CODESEGMENT

ASSUMEDS:

DATA,SS:

STACK,CS:

CODE,ES:

DATA

START:

MOVAX,DATA;设置段寄存器

MOVDS,AX

MOVES,AX

MOVAX,STACK

MOVSS,AX

SHOWMACROB;显示以B开始的字符串宏定义

MOVDX,OFFSETB

MOVAH,09H

INT21H;宏结束

ENDM

SHOWDATA1;提示信息

L0:

SHOWMUSLIST

MOVAH,01H;输入并选择

INT21H

CMPAL,51H

JZRETURN

CMPAL,41H

JNZl1

CALLMUSICA

JMPEXIT1

l1:

CMPAL,42H

JNZl2

CALLMUSICB

JMPEXIT1

l2:

CMPAL,43H

JNZEXIT

CALLMUSICC

JMPEXIT1

EXIT1:

SHOWDATA5

JMPL0

EXIT:

SHOWDATA4

SHOWDATA5

JMPL0

RETURN:

MOVAX,4C00H;返回DOS

INT21H

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

MUSICAPROC;音乐A

LEASI,MUSFRQA

LEABP,DS:

MUSTIMA

FREQA:

MOVDI,[SI]

CMPDI,-1

JEENDMUSA

MOVBX,DS:

[BP]

CALLSOUND

ADDSI,2

ADDBP,2

JMPFREQA

ENDMUSA:

RET

MUSICAENDP

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

MUSICBPROC;音乐B

LEASI,MUSFRQB

LEABP,DS:

MUSTIMB

FREQB:

MOVDI,[SI]

CMPDI,-1

JEENDMUSB

MOVBX,DS:

[BP]

CALLSOUND

ADDSI,2

ADDBP,2

JMPFREQB

ENDMUSB:

RET

MUSICBENDP

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

MUSICCPROC;音乐C

LEASI,MUSFRQC

LEABP,DS:

MUSTIMC

FREQC:

MOVDI,[SI]

CMPDI,-1

JEENDMUSC

MOVBX,DS:

[BP]

CALLSOUND

ADDSI,2

ADDBP,2

JMPFREQC

ENDMUSC:

RET

MUSICCENDP

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

SOUNDPROC;发音程序

PUSHAX;保护寄存器

PUSHBX

PUSHCX

PUSHDX

PUSHDI

MOVAL,0B6H;写定时器模式

OUT43H,AL

MOVDX,12H;时间因子

MOVAX,348CH

DIVDI;频率

OUT42H,AL;写计数器2低八位

MOVAL,AH

OUT42H,AL;写计数器2高八位

INAL,61H;获取当前端口设置

MOVAH,AL;保存在AH中

ORAL,3;打开扬声器

OUT61H,AL

WAIT1:

MOVCX,2800;改变数值,用以设置播放速率

DELA1:

LOOPDELA1

DECBX

JNZWAIT1

MOVAL,AH;恢复端口信号

OUT61H,AL

POPDI;寄存器出栈

POPDX

POPCX

POPBX

POPAX

RET;返回

SOUNDENDP

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

CODEENDS

ENDSTART

7.2各个音符的对应频率表:

音符 频率/HZ半周期/us 音符 频率/HZ 半周期/us

低1DO  262     1908   #4FA#   740     0676

#1DO#  277     1805   中5SO   784     0638

低2RE  294     1700   #5SO#   831     0602

#2RE#  311     1608   中6LA   880     0568

低3M   330     1516   #6LA#   932     0536

低4FA  349     1433   中7SI   988     0506

#4FA#  370     1350   高1DO   1046    0478

低5SO  392     1276   #DO#    1109    0451

#5SO#  415     1205   高2RE   1175    0426

低6LA  440     1136   #2RE#   1245    0402

#6LA#  466     1072   高3M    1318    0372

低7SI  494     1012   高4FA   1397    0358

中1DO  523     0956   #4FA#   1480    0338

#1DO#  554     0903   高5SO   1568    0319

中2RE  578     0842   #5S0#   1661    0292

#2RE#  622     0804   高6LA   1760    0284

中3M   659     0759   #6LA#   1865    0268

中4FA  698     0716   高7SI   1976    0253

八、总结

在本次设计中,可以说是一次成功的经验。

在我们学完了《微型计算机原理与接口技术》这门课的基础上来做这个设计,通过设计后,使我们对这门课的理论知识的理解有很大程度上的加强。

微机原理这门课程本身是一门实验性和工程性很强的专业技术课,因此不仅要重视理论教学,更应注意实践技能的培养和训练。

课程设计是这门课程的一个重要环节,通过课程设计,巩固、加深和拓宽了学习的理解,本课程设计的重点目标是使用汇编语言,而不过多涉及硬件方面的太多知识。

在编程方面我通过本次课程设计学到了很多。

一开始面对很长的程序往往有畏难情绪,感觉无法下手,没办法只能硬着头皮啃下去,多看几个和音乐播放有关的汇编程序,然后我就能慢慢看懂了并理解了别的作者的设计思路。

然后再根据自己的思路,对照本人在图书馆借的汇编语言指导书慢慢编写符合自己思路的程序。

一次写出来的程序肯定不会是正确的,还需要进一步调试它。

检查程序过程中,在充分思考的基础上多次实验是检查改正程序的良方。

编写程序的过程中,体会最深的是子程序的调用和程序的条理问题,一个程序就算功能实现了,但是也要使主程序和子程序的条理分明,易读性高,才能算一个比较好的程序。

调试程序中,学习了emu8086的使用,emu8086对检查程序的错误作用很大。

同时,也要灵活使用各种调试方法,来缩小寻找错误的范围。

书到用时方恨少。

在课程设计过程中,我才体会到这句话的深意。

课堂上学的8254的知识和汇编语言都太少,还不足以完成本次课设,为此我经常跑图书馆借了各种各样的工具书。

有的书用处较大,有的书仅能用到一小块知识,就是这样,一步步在知识的海洋里我寻觅着自己需要的东西,确实克服了不少困难,解决了不少问题。

或许坎坷才能更好的使人成长。

在这次的课程设计中,我的收获是不但做出了一个符合要求的音乐播放器,而且为自己积累了一些宝贵的经验。

同时我也对音乐方面的频率知识有了一些认识,我想如果不是本次课程设计中用到这方面知识,我这辈子可能没有机会去接触这方面的知识了。

这,或许也是我比别的同学多出的一点收获吧!

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

当前位置:首页 > 初中教育 > 初中作文

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

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