音乐播放器课程设计.docx
- 文档编号:4839440
- 上传时间:2022-12-10
- 格式:DOCX
- 页数:16
- 大小:306.45KB
音乐播放器课程设计.docx
《音乐播放器课程设计.docx》由会员分享,可在线阅读,更多相关《音乐播放器课程设计.docx(16页珍藏版)》请在冰豆网上搜索。
音乐播放器课程设计
3.2.18086中央处理器……………………...…...………...1
3.2.274LS373地址锁存电路..............................................5
3.2.374LS138译码电路.....................................................6
3.2.4定时/计数器8253A....................................................7
3.3软件程序设计和调试................................................13
四、结论与展望.........................................................................17
电子音乐播放器设计报告
一、设计要求
利用8253作为音频频率发生器,应先对一段音乐进行编码后存入音符表,并建立好音阶表(只建立一个8度即可,音阶表见附录),音符长度不能少于60个,连续播放3遍后停止。
具体要求如下:
1、系统硬件电路设计:
根据所选题目和所用的接口电路芯片设计出完整的系统硬件电路,并进行电路连接和调试。
2、程序设计:
要求画出程序框图,设计出全部程序并给出程序设计说明和程序注释。
二、设计目的
本课程设计培养学生运用该课程的理论知识和技术知识解决工程实际问题的能力,学习微机系统设计的方法;学生通过对实验室系统的实际调试,进一步培养并提高了科学实验的能力。
因此,本课程设计为学生提供一个良好的理论联系实际的机会和场所,有利于为学生树立微机整体的概念,同时加强了学生编制和调试程序的能力,进一步培养学生的独立工作能力。
因此,课程设计是教学计划中必不可少的重要一环。
三、设计的具体实现
1.系统概述
该音乐播放器通过用8086中央处理器、74LS373地址锁存电路、74LS138译码电路、定时/计数器8253A来实现功能。
8086中央处理器输出地址码A16-A19和数据AD0-AD15,将AD0-AD7输入地址锁存器输出A0-A7,再将A0-A7通过译码器进行译码输出作为8253的片选信号,8253产生不同频率的脉冲来模拟音符,通过时间的长短来模拟音长,从而设计出一个功能完整的音乐播放器。
2.单元电路设计
2.18086中央处理器
8086中央处理器是Intel系列的16位微处理器,有16根数据线和20跟地址线。
它主要由执行部件EU(ExecutionUnit)和总线接口部件BIU(BusinterfaceUnit)两部分组成。
8086拥有四个16位的通用寄存器,也能够当作八个8位寄存器来存取,以及四个16位索引寄存器(包含了堆栈指标)。
资料寄存器通常由指令隐含地使用,针对暂存值需要复杂的寄存器配置。
它提供64K8位元的输出输入(或32K16位元),以及固定的向量中断。
大部分的指令只能够存取一个内存位址,所以其中一个操作数必须是一个寄存器。
运算结果会储存在操作数中的一个。
8086有四个内存区段(segment)寄存器,可以从索引寄存器来设定。
区段寄存器可以让CPU利用特殊的方式存取1MB内存。
8086把段地址左移4位然后把它加上偏移地址。
大部分的人都认为这是一个很不好的设计,因为这样的结果是会让各分段有重叠。
尽管这样对组合语言而言大部分被接受(也甚至有用),可以完全地控制分段,,使在编程中使用指针(如C编程语言)变得困难。
它导致指针的高效率表示变得困难,且有可能产生两个指向同一个地方的指针拥有不同的地址。
更坏的是,这种方式产生要让内存扩充到大于1MB的困难。
而8086的寻址方式改变让内存扩充较有效率。
8086处理器的时钟频率介于4.77MHz(在原先的IBMPC)和10MHz之间。
8086没有包含浮点指令部分(FPU),但是可以通过外接数学辅助处理器来增强浮点计算能力。
Intel8087是标准版本。
为了能够简单有效地进行对8086操作,故采用最小模式进行工作。
要使8086处于最小模式,首先要将MN/MX*端假如高电平。
具体各端口及其功能如下所示:
图3.2.18086引脚图
(1)AD19~AD0(addressdatabus):
地址/数据总线,双向,三态。
这是一组采用分时的方法传送地址或数据的复用引脚。
根据不同时钟周期的要求,决定当前是传送要访问的存储单元或I/O端口的低16位地址,还是传送16位数据,或是处于高阻状态。
(2)A19/S6~A16/S3(address/status):
地址/状态信号,输出,三态。
这是采用分时的方法传送地址或状态的复用引脚。
其中A19~A16为20位地址总线的高4位地址,S6~S3是状态信号。
S6表示CPU与总线连接的情况,S5指示当前中断允许标志IF的状态。
S4,S3的代码组合用来指明当前正在使用的段寄存器。
S4,S3的代码组合及对应段寄存器的情况。
(3)BHE(低)/S7(bushighenable/status):
允许总线高8位数据传送/状态信号,输出,三态。
为总线高8位数据允许信号,当低电平有效时,表明在高8位数据总线D15~D8上传送1个字节的数据。
S7为设备的状态信号。
(4)(read):
读信号,输出,三态,低电平有效。
信号低电平有效时,表示CPU正在进行读存储器或读I/O端口的操作。
(5)READY(ready):
准备就绪信号,输入,高电平有效。
READY信号用来实现CPU与存储器或I/O端口之间的时序匹配。
当READY信号高电平有效时,表示CPU要访问的存储器或I/O端口已经作好了输入/输出数据的准备工作,CPU可以进行读/写操作。
当READY信号为低电平时,则表示存储器或I/O端口还未准备就绪,CPU需要插入若干个“TW状态”进行等待。
(6)INTR(interruptrequest):
可屏蔽中断请求信号,输入,高电平有效。
8086CPU在每条指令执行到最后一个时钟周期时,都要检测INTR引脚信号。
INTR为高电平时,表明有I/O设备向CPU申请中断,若IF=1,CPU则会响应中断,停止当前的操作,为申请中断的I/O设备服务。
(7)(test):
等待测试控制信号,输入,低电平有效。
信号用来支持构成多处理器系统,实现8086CPU与协处理器之间同步协调的功能,只有当CPU执行WAIT指令时才使用。
(8)NMI(non-maskableinterrupt):
非屏蔽中断请求信号,输入,高电平有效。
当NMI引脚上有一个上升沿有效的触发信号时,表明CPU内部或I/O设备提出了非屏蔽的中断请求,CPU会在结束当前所执行的指令后,立即响应中断请求。
(9)RESET(reset):
复位信号,输入,高电平有效。
RESET信号有效时,CPU立即结束现行操作,处于复位状态,初始化所有的内部寄存器。
复位后各内部寄存器的状态,当RESET信号由高电平变为低电平时,CPU从FFFF0H地址开始重新启动执行程序。
(10)CLK(clock):
时钟信号,输入。
CLK为CPU提供基本的定时脉冲信号。
8086CPU一般使用时钟发生器8284A来产生时钟信号,时钟频率为5MHz~8MHz,占空比为1:
3。
(11)VCC电源输入引脚。
8086CPU采用单一+5V电源供电。
(12)GND:
接地引脚。
(13)(minimum/maximum):
最小/最大模式输入控制信号。
(1)(memoryI/Oselect):
存储器、I/O端口选择控制信号。
信号指明当前CPU是选择访问存储器还是访问I/O端口。
为高电平时,访问存储器,表示当前要进行CPU与存储器之间的数据传送。
为低电平时,访问I/O端口,表示当前要进行CPU与I/O端口之间的数据传送。
(14)(write):
写信号,输出,低电平有效。
信号有效时,表明CPU正在执行写总线周期,同时由信号决定是对存储器还是对I/O端口执行写操作。
(15)(interruptacknowledge):
可屏蔽中断响应信号,输出,低电平有效。
CPU通过信号对外设提出的可屏蔽中断请求做出响应。
为低电平时,表示CPU已经响应外设的中断请求,即将执行中断服务程序。
(16)ALE(addresslockenable):
地址锁存允许信号,输出,高电平有效。
CPU利用ALE信号可以把AD15~AD0地址/数据、A19/S6~A16/S3地址/状态线上的地址信息锁存在地址锁存器中。
(17)DT/(datatransmitorreceive):
数据发送/接收信号,输出,三态。
DT/信号用来控制数据传送的方向。
DT/为高电平时,CPU发送数据到存储器或I/O端口;DT/为低电平时,CPU接收来自存储器或I/O端口的数据。
(18)(dataenable):
数据允许控制信号,输出,三态,低电平有效。
信号用作总线收发器的选通控制信号。
当为低电平时,表明CPU进行数据的读/写操作。
(19)HOLD(busholdrequest):
总线保持请求信号,输入,高电平有效。
在DMA数据传送方式中,由总线控制器8237A发出一个高电平有效的总线请求信号,通过HOLD引脚输入到CPU,请求CPU让出总线控制权。
(20)HLDA(holdacknowledge):
总线保持响应信号,输出,高电平有效。
HLDA是与HOLD配合使用的联络信号。
在HLDA有效期间,HLDA引脚输出一个高电平有效的响应信号,同时总线将处于浮空状态,CPU让出对总线的控制权,将其交付给申请使用总线的8237A控制器使用,总线使用完后,会使HOLD信号变为低电平,CPU又重新获得对总线的控制权。
2.274LS373地址锁存电路
74LS373为八D锁存器,AD0-AD7为输入数据,输出A0-A7。
引脚图如下所示:
3.2.274LS373引脚图
74LS373的输出端O0~O7可直接与总线相连。
当三态允许控制端OE为低电平时,O0~O7为正常逻辑状态,可用来驱动负载或总线。
当OE为高电平时,O0~O7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。
当锁存允许端LE为高电平时,O随数据D而变。
当LE为低电平时,O被锁存在已建立的数据电平。
当LE端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善400mV。
引出端符号:
D0~D7数据输入端
OE三态允许控制端(低电平有效)
LE锁存允许端
O0~O7输出端
Dn
LE
OE
On
H
H
L
H
L
H
L
L
X
L
L
Q0
X
X
H
高阻态
3.2.374LS373真值表
2.374LS138译码电路
A0-A7通过译码电路输出作为8253的片选信号。
引脚图如下所示:
3.2.474LS138引脚图
其工作原理如下:
1当一个选通端(E1)为高电平,另两个选通端(E2)和/(E3))为低电平时,可将地址端(A0、A1、A2)的二进制编码在Y0至Y7对应的输出端以低电平译出。
比如:
A0A1A2=110时,则Y6输出端输出低电平信号。
2利用E1、E2和E3可级联扩展成24线译码器;若外接一个反相器还可级联扩展成32线译码器。
3若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。
4可用在8086的译码电路中,扩展内存。
在该电路中,除了A2A1其他几位是11110**0的时候才能给CS送一个有效电平,而当A1A2=00,01,10,11之时即为F0H,F2H,F4H,F6H分别对应的是通道0,1,2,3的运行。
2.4定时/计数器8253A
主要功能:
(1)每片上有3个独立的16位的减计数器通道。
(2)对于每个计数器,都可以单独作为定时器或计数器使用,并且都可以按照二进制或十进制来计数。
(3)每个通道都有6种工作方式,都可以通过程序设置或改变。
(4)每个计数器的速率可高达2MHz。
最高的计数时钟频率为2.6MHz。
8253的内部结构如图所示,它主要包括以下几个主要部分:
图3.2.58253的内部结构
(1).数据总线缓冲器
实现8253与CPU数据总线连接的8位双向三态缓冲器,用以传送CPU向8253的控制信息、数据信息以及CPU从8253读取的状态信息,包括某时刻的实时计数值。
(2).读/写控制逻辑
控制8253的片选及对内部相关寄存器的读/写操作,它接收CPU发来的地址信号以实现片选、内部通道选择以及对读/写操作进行控制。
(3).控制字寄存器
在8253的初始化编程时,由CPU写入控制字,以决定通道的工作方式,此寄存器只能写入,不能读出。
(4).计数通道0#、1#、2#:
这是三个独立的,结构相同的计数器/定时器通道,每一个通道包含一个16位的计数寄存器,用以存放计数初始值,一个16位的减法计数器和一个16位的锁存器,锁存器在计数器工作的过程中,跟随计数值的变化,在接收到CPU发来的读计数值命令时,用以锁存计数值,供CPU读取,读取完毕之后,输出锁存器又跟随减1计数器变化。
8253芯片是具有24个引脚的双列直插式集成电路芯片,其引脚分布如图所示。
8253芯片的24个引脚分为两组,一组面向CPU,另一组面向外部设备,各个引脚及其所传送信号的情况,介绍如下:
(1).D7~D0:
双向、三态数据线引脚,与系统的数据线连接,传送控制、数据及状态信息。
(2).
:
来自于CPU的读控制信号输入引脚,低电平有效。
(3).
:
来自于CPU的写控制信号输入引脚,低电平有效。
(4).
:
芯片选择信号输入引脚,低电平有效。
图3.2.68253的引脚
(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发出的中断请求信号。
图3.2.78253A端口地址
8253A既可作定时器又可作计数器:
(1)计数:
计数器装入初值后,当GATE为高电平时,可用外部事件作为CLK脉冲对计数值进行减1计数,每来一个脉冲减1,当计数值减至0时,由OUT端输出一个标志信号。
(2)定时:
计数器装入初值后,当GATE为高电平时,由CLK脉冲触发开始自动计数,当计数到零时,发计数结束定时信号。
除上述典型应用外,8253A还可作频率发生器、分频器、实时钟、单脉冲发生器等。
图3.2.88253A控制字
说明:
(1)8253A每个通道对输入CLK按二进制或二十进制从预置值开始减1计数,减到0时从OUT输出一个信号。
(2)8253A编程时先写控制字,再写时间常数。
8253A工作方式如下:
(1)方式0:
计数结束产生中断方式
当写入控制字后,OUT变为低电平,当写入初值后立即开始计数,当计数结束时,变成高电平。
(2)方式1:
可编程单次脉冲方式
当初值装入后且GATE由低变高时,OUT变为低电平,计数结束变为高电平。
(3)方式2:
频率发生器方式
当初值装入时,OUT变为高;计数结束,OUT变为低。
该方式下如果计数未结束,但GATE为低时,立即停止计数,强制OUT变高,当GATE再变高时,便启动一次新的计数周期。
(4)方式3:
方波发生器
当装入初值后,在GATE上升沿启动计数,OUT输出高电平;当计数完成一半时,OUT输出低电平。
方式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.软件程序设计与调试
codesegment
assumecs:
code
;;;;;;;;;;;;;;;;;;;音乐文件;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
freqdw2dup(262,294,330,262)
dw2dup(330,349,392)
dw2dup(392,440,392,349,330,262)
dw2dup(294,196,262),0;歌曲频率
timedw8dup(10000)
dw2dup(10000,10000,20000)
dw12dup(9000)
dw6dup(18000);歌曲时间节拍值
dw10000
regdw3
;;;;;;;;;;;;;;;;;;;;;;计数器3遍;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
start1:
;movch,2
jmpstart
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
start:
decreg;减一计数
cmpreg,0
jeendd;循环三次结束
leasi,freq
leabp,time
leasp,reg
movdi,cs:
[si];频率
movbx,[bp]
jmpmusic
music:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
movdx,0F6h
moval,10010110B
outdx,al
;;;;;;;;;;;;;;;;;
movdx,00h;设置被除数
movax,5000
divdi
movdx,0F4h
outdx,al
;;;;;;;;;;;;;;;;;;;;;;
;movax,1;频率
;outdx,ax
;movbx,20000;时间
wait1:
movcx,6;设循环次数6
delay1:
loopdelay1
decbx;循环持续bx次,即传进来的节拍时间
jnzwait1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;decbx
;jnzwait1
addsi,2
addbp,2
movdi,cs:
[si]
cmpdi,0
jestart
movbx,[bp]
jmpmusic
endd:
movdx,0F6h
moval,10010110B
outdx,al
codeends
endstart
程序调试步骤如下:
1建立汇编源程序.
2建立连接。
3编译为目标文件
4调试。
5不通过,重新修改(语句错误、音调频率不准、音调节拍不符合)
6重新修改、调试。
7正确运行。
四、结论与展望
经过两周多的努力,总算设计出所要求的音乐播放器,硬件电路图如下:
图4.1.1硬件电路图
将两只老虎这首歌曲进行播放,可以重复播放三遍,但客观的来说这个音乐播放器还不是特别好,音乐有一些失真,如果以后学了单片机来实现音乐播放,我想应该会解决这个问题。
五、心得体会及建议
通过这次课程设计我得到了很大的收获:
首先,通过学习使自己对课本上的知识可以应用于实际,使理论与实际相结合,加深自己对课本知识的更好理解,同时也锻炼了我个人的学习思考和解决问题的能力,能够充分利用图书馆和网络去查阅资料,增加了许多课本以外的知识。
对Proteus、word等实用软件的使用更加熟练,并且学会了很多使用的小技巧,比如:
Proteus中的总线模式,虽然看起来是断的,实际上是一根线。
还有word中,学会了如何自动生成目录,既能保持左右对齐,又能使内容不缺不漏。
对我们学生来说,理论与实际同样重要,这是我们以后在工作中说明自己能力的一个重要标准。
此次课程设计能顺利圆满的完成,除了依靠本人的坚持不懈努力外,还得感谢那些一直在背后辛勤指导我们的高老师,由于所学知识有限,有很多问题都不能正确的解答,多亏有高老师耐心的指导和帮助,才使我的课程设计顺利的完成,感谢您为我排除了思路上的障碍,感谢您辛勤地指导,请允许我向您致意崇高的敬意,感谢您,老师!
六、附录
序号
元件名称
编号
型号
数量
1
74LS138
U4
1只
2
74LS373
U3
1只
3
8253A
U2
1只
4
8086CPU
U1
1只
5
74LS00
U5
1只
6
开关
K
1只
7
时钟脉冲发生器
U2
1只
8
喇叭
LS1
1只
图6.1.1元器件清单
每个音符的对应频率
音符 频率/HZ半周期/us 音符 频率/HZ 半周期/us
低
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 音乐 播放 课程设计