微机原理音乐播放器文档格式.docx

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

微机原理音乐播放器文档格式.docx

《微机原理音乐播放器文档格式.docx》由会员分享,可在线阅读,更多相关《微机原理音乐播放器文档格式.docx(22页珍藏版)》请在冰豆网上搜索。

微机原理音乐播放器文档格式.docx

设计并实现一个键控音乐播放器。

(1)自己选用合适的芯片,不少于两种。

和其他硬件。

(2)自行设计电路并使用汇编语言编写程序完成键控音乐播放器功能。

(3)该播放器有若干首歌曲可以选择,开始时输出说明,要用户选择要播放的歌曲,然后根据用户按键进行播放、退出或出错提示。

(4)利用8253作为音阶频率发生器,对一段音乐进行编码后存入音符表,程序中可调用音符表自动播放音乐,从中了解音乐播放的原理。

(5)利用8253A和PC机,设计并实现简易音乐播放器

(6)使用汇编语言编写音乐播放程序。

(7)上机调试程序并联机,利用试验箱提供的扬声器发声.

(8)完成实验报告。

二、课程设计相关知识

2。

1定时/计数器8253A

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

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

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

定时的方法主要是两种:

软件定时:

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

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

硬件定时:

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

延迟。

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

主要功能:

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

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

制或十进制来计数。

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

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

最高的计数时钟频率为2.6MHz.

28253A内部结构

8253的内部结构如图所示,它主要包括以下几个主要部分:

图2-18253的内部结构

(1).数据总线缓冲器

实现8253与CPU数据总线连接的8位双向三态缓冲器,用以传送CPU向8253的控制信息、数据信息以及CPU从8253读取的状态信息,包括某时刻的实时计数值。

(2).读/写控制逻辑

控制8253的片选及对内部相关寄存器的读/写操作,它接收CPU发来的地址信号以实现片选、内部通道选择以及对读/写操作进行控制。

(3).控制字寄存器

在8253的初始化编程时,由CPU写入控制字,以决定通道的工作方式,此寄存器只能写入,不能读出。

(4).计数通道0#、1#、2#:

这是三个独立的,结构相同的计数器/定时器通道,每一个通道包含一个16位的计数寄存器,用以存放计数初始值,一个16位的减法计数器和一个16位的锁存器,锁存器在计数器工作的过程中,跟随计数值的变化,在接收到CPU发来的读计数值命令时,用以锁存计数值,供CPU读取,读取完毕之后,输出锁存器又跟随减1计数器变化。

38253A外部引脚

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

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

(1).D7~D0:

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

(2).

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

(3).

:

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

(4).

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

图2-18253的引脚

(5).A1、A0:

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

(6).VCC及GND:

+5V电源及接地引脚

(7).CLKi:

i=0,1,2,第i个通道的计数脉冲输入引脚,8253规定,加在CLK引脚的输入时钟信号的频率不得高于2。

6MHZ,即时钟周期不能小于380ns。

(8).GATEi:

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

(9).OUTi:

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

4计数器内部结构

每个计数器由一个16位可预置的减1计数器组成,计数初值可保存在16位的锁存器中,该锁存器只写不能读。

在计数器工作时,初值不受影响,以便进行重复计数。

图中每个计数器有一个时钟输入端CLK作为计数脉冲源,计数方式可以是二进制,计数范围1~10000H,也可以是十进制,计数范围1~65536。

门控端GATE用于控制计数开始和停止.输出OUT端当计数器计数值减到零时,该端输出标志信号。

图2-2计数器内部结构

58253A端口地址

图2-38253A端口地址

2.68253A功能

8253A既可作定时器又可作计数器:

(1)计数:

计数器装入初值后,当GATE为高电平时,可用外部事件作为CLK脉冲对计数值进行减1计数,每来一个脉冲减1,当计数值减至0时,由OUT端输出一个标志信号。

(2)定时:

计数器装入初值后,当GATE为高电平时,由CLK脉冲触发开始自动计数,当计数到零时,发计数结束定时信号。

除上述典型应用外,8253A还可作频率发生器、分频器、实时钟、单脉冲发生器等。

78253A控制字

图2-48253A控制字

说明:

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

(2)8253A编程时先写控制字,再写时间常数.

88253A工作方式

(1)方式0:

计数结束产生中断方式

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

(2)方式1:

可编程单次脉冲方式

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

(3)方式2:

频率发生器方式

当初值装入时,OUT变为高;

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

(4)方式3:

方波发生器

当装入初值后,在GATE上升沿启动计数,OUT输出高电平;

当计数完成一半时,OUT输出低电平。

图2-5方波图

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

〈1〉计数过程

当把方式3的控制字写入控制字寄存器后,输出端OUT变成高电平,作为初始电平。

再将计数初值写入计数初值寄存器CR中,再经过一个时钟周期,计数初值被移入计数执行单元CE中,从下一个时钟脉冲开始作减1计数,方式3的计数过程分为两种情况:

第一种情况:

计数初值为偶数,当作减1计数减到N/2时,输出端OUT端变成低电平,减到0时,输出端OUT变成高电平,并重新从初值开始新的计数过程。

若GATE为高电平,则一直重复同样的计数过程.可见,输出端OUT输出连续的方波,故称方波发生器。

第二种情况:

计数初值为奇数,当作减1计数减到(N+1)/2以后,输出端OUT变成低电平,减到0时,输出端OUT又变成高电平。

并重新从初值开始新的计数过程。

这时输出端的波形为连续的近似方波。

〈2〉门控信号的影响

工作在方式3时,门控信号GATE的功能与工作方式2一样,即GATE为高电平时,允许计数;

GATE为低电平时停止计数。

GATE引脚上的信号从低电平跳到高电平时,将会重新把计数初值寄存器CR中的内容移入计数执行单元CE中,并以新装入的值重新开始计数.

〈3〉新的计数初值对计数过程的影响

如果在计数过程中写入新的初值,而GATE信号一直维持高电平,则新的初值不会影响当前的计数过程,只有在计数结束后的下一个计数周期,才按新的初值计数.若写入新的初值后,遇到门控信号的上升沿,则结束现行的计数过程,从下一个时钟脉冲下降沿开始按新的计数初值进行计数。

可见,工作在方式3时,当计数初值为偶数,OUT端输出连续的标准方波;

当计数初值为奇数,在每个计数周期内,有(N+1)/2个周期输出高电平,(N—1)/2个时钟周期输出低电平,OUT端输出连续的近似的方波。

三、总体设计方案

3.1总体设计方案一

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

而我们学过的有计数器可以产生各种频率,所以我们主要采用计数器8253产生各音符,用8255并行接口来控制扬声器的开关,达到播放音乐的功能。

3.2总体设计方案二

可以使用0832(数模转换器)来产生频率,原理图:

提出这个方案是因为我想产生模拟信号,来驱动扬声器,这样产生的声音更加圆润感觉更连续,效果更好点.

我们想把一个周期的波形分成32份,然后每份给8253一个值让他转换成模拟信号,不同的频率可以用8253计数器控制,比如要产生261Hz的频率,使用1MHz的话,周期就为1/261=3.83ms,分成32份,每份间隔时间就是3。

83ms/32=0。

12ms,换句话说就是送计数器0的初值为1M/261/32=120次。

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

音符 

频率/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

622 

0804 

高6LA 

1760 

0284

中3M 

659 

0759 

1865 

0268

中4FA 

698 

0716 

高7SI 

1976 

0253本文为互联网收集,请勿用作商业用途

四.部分电路设计及功能解说

4.1频率发生电路

使用8253产生音符频率。

8253采用方式3,产生方波信号,根据输入计数初值的不同产生不同频率的方波信号来驱动扬声器。

设某音符频率为fHz,而CLK脉冲是1MHz,则计数初值N=1M/f.8253的控制端口为28BH,控制字为36H。

4。

2扬声器开关控制电路

使用8255并行接口芯片来控制扬声器的开和关,PC0始终接低电平,PA0和8253的OUT0接在与门上,这样只有PA0=1时扬声器才有可能开通,否则不发声.关闭的方法是,从PC口读入数据再从PA口输出;

而开扬声器时只要在输出PA口数据前对数据进行一个取反操作就可以了.

五.硬件接线图

六。

软件设计流程图

6.1总流程图

6。

2音乐播放子程序流程图

七。

程序段功能汇总

7.1MAIN程序

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

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

7.2PLAY子程序

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

从SI的指向的音节表中取一个频率,只要不是—1,即有效就再读取时间,然后计算计数初值送入计数器,产生各种频率.开启扬声器,根据所取的时间调用若干次延时子程序。

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

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

7.3DELAY子程序和DELAY_OFF子程序

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

八。

程序清单

SSEGSEGMENTPARASTACK'

stack’

dw100hdup(0);

Resizethestackbychangingthenumber'

100'

SSEGENDS

DSEGSEGMENT

TODO:

Addyourprogram'

sdatahere

INFO1DB0DH,0AH,'

——-—-—-—--————-——-———-—--—’,0DH,0AH,’THEREARE3SONGS:

’,0DH,0AH,0DH,0AH,'

$’

INFO2DB'

1.HAPPYBIRTHDAY’,0DH,0AH,'

$'

INFO3DB’2.SHEEP’,0DH,0AH,'

$'

INFO4DB’3。

RIVER'

0DH,0AH,’$’

INFO5DB’0.EXIT’,0DH,0AH,'

INFO6DB'

YOUHAVECHOSEN:

$’

INFO7DB’THANKYOUFORYOURUSE'

,0DH,0AH,'

INFO8DB'

——--—--——-—————--——---——-——’,0DH,0AH,’PRESSTHEKEYTOSELECTSONG!

'

0DH,0AH,’$’

INFO9DB0DH,0AH,'

—-—-——————--———-—-—'

0DH,0AH,'

|INVALIDSELECTION|’,0DH,0AH,’—-——--————-—--———--'

0DH,0AH,’$’

FREG1DW2dup(262),294,262,349,262,262,294,262,392,249,262,262,523,440,349;

曲1的频率

DW330,294,466,266,440,349,392,349,—1

TIME1DW1,1,2,2,2,4,1,1,2,2,2,4,1,1,2,2,2,2,4,1,1,2,2,2,4;

曲1的时间

FREG2DW330,294,262,294,3DUP(330);

曲2的频率

DW3DUP(294),330,392,392

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

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

TIME2DW6DUP

(1),2;

曲2的时间

DW2DUP(1,1,2)

DW12DUP

(1),4

FREG3DW330,392,330,294,330,392,330,294,330,330,392,330,294,262,294,330,392,294;

曲3的频率

DW262,262,220,196,220,262,294,332,262,-1

TIME3DW3DUP

(2),1,1,2,1,1,4;

曲3的时间

DW2DUP(2,2,1,1),4

DW3DUP(2,1,1,1),4

DSEGENDS

CSEGSEGMENT

assumecs:

CSEG,ds:

DSEG,es:

DSEG,ss:

SSEG

INITPROC;

Initializeprocedure

movax,dseg

movds,ax

moves,ax

;

Addyourinitializecodehere(asyourrequirement)

ret;

returntotheMAINprocedure

INITENDP

MAINPROC;

Hereisyourprogramentrypoint

callINIT;

calltheINITproceduretoinitializetheprogram

;

**TODO:

Addyourmaincodehere**

RE:

MOVDX,28BH;

关闭扬声器

MOVAL,89H

OUTDX,AL

MOVDX,28AH

INAL,DX

MOVDX,288H

OUTDX,AL

LEADX,INFO1;

输出说明信息

MOVAH,09H

INT21H

LEADX,INFO2

LEADX,INFO3

LEADX,INFO4

LEADX,INFO5

LEADX,INFO8

MOVAH,01H;

读取按键

CMPAL,'

1'

根据不同的按键播放不同的曲子

JEMUSIC1

CMPAL,’2’

JEMUSIC2

3’

JEMUSIC3

CMPAL,’0'

JEEXIT

LEADX,INFO9;

无效选择,输出错误提示

MOVAH,09H

JMPRE

MUSIC1:

MOVSI,OFFSETFREG1;

指向曲1的表

MOVBP,OFFSETTIME1

CALLPLAY

MUSIC2:

MOVSI,OFFSETFREG2;

指向曲2的表

MOVBP,OFFSETTIME2

MUSIC3:

MOVSI,OFFSETFREG3;

指向曲3的表

MOVBP,OFFSETTIME3

EXIT:

MOVDX,288H

OUTDX,AL

LEADX,INFO7;

输出欢迎使用信息,增加界面友好度

movax,4c00h;

Theendoftheprogram,returntothesystem

int21h

MAINENDP

TODO:

Addotherprocedures(PROC)here(asyourrequirement)

THEPROGRAMMEOFPLAYINGTHEMUSIC

PLAYPROC;

PLAY子程序,功能上面介绍过

L1:

MOVBX,DS:

[SI];

取频率

CMPBX,-1;

看是否有效

JEL0;

无效就退出

MOVCX,DS:

[BP];

读取时间

MOVDL,CL;

保存时间

ADDDL,30H

MOVAH,02H

MOVDX,0FH;

计算计数初值,1M的十六进制为0F4240H

MOVAX,4240H

DIVBX

MOVBX,AX

MOVDX,283H;

设置计数器工作方式

MOVAL,36H

MOVDX,280H;

输入计数初值

MOVAX,BX

MOVAL,AH

MOVDX,28BH;

开扬声器

MOVDX,28AH

INAL,DX

NOTAL

ROD:

CALLDELAY;

延时

LOOPROD

MOVDX,28BH;

关扬声器

CALLDELAY_OFF;

音节间延时

ADDSI,2

ADDBP,2

JMPL1

L0:

RET

PLAYENDP

DELAYPROC;

延时子程序

PUSHAX

PUSHBX

PUSHCX

PUSHDX

MOVBX,09FH

LL1:

MOVCX,0FFFFH;

循环这么多次

LOP:

LOOPLOP

DECBX

JNZLL1

POPDX

POPCX

POPBX

POPAX

RET

DELAYENDP

DELAY_OFFPROC

PUSHAX

P

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

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

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

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