《微机原理与应用》课程设计——电子音乐播放器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子音乐播放器
一、课程设计的目的和意义
学习和掌握计算机中常用接口电路的应用和设计技术,学会针对不同的要求设计汇编程序代码,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学知识的应用能力以及分析问题解决问题的能力得到全面提高。
二、设计要求
利用8254作为音阶频率发生器,应先对至少两段音乐进行编码后存入音符表,并建立好音阶表,每段音符长度不能少于60个,每首连续播放3遍后,自动播放下一段音乐,几段音乐播完后,循环播放,直到有键盘输入任意字符时停止,并且使用8255作为控制开关的并行输入接口,输入开关选择的音乐控制信号。
三、设计总框图
四、设计设计思路说明:
电子音乐播放器属于接口电路的连接使用,本设计是以8254芯片为核心的发生系统。8086CPU在形成系统总线后,通过和8254及8255的连接使用可以很好的驱动扬声器发音。系统初始化后,8255通过B通道,从控制开关读取所需的控制字,并送入8086CPU中进行判断,选择不同的播放音乐。使8254的通过0号计数器工作在“频率发生器”方式3,向发生器发出不同频率的方波。当给定不同的计数初值时可以使扬声器发出不同频率的音响。
五、程序流程图
开始
读取音符频率
是1H吗?
N Y
播放song1
播放音乐
读取选择信号
六、接口电路原理图
1、8254的基本知识
8254占用4个端口,3个定时器各占1个,控制端口占1 个。8254的内部结构如图所示,它主要包括以下几个主要部分:
8254的内部结构
(1).数据总线缓冲器
实现8254与CPU 数据总线连接的8位双向三态缓冲器,用以传送CPU 向8254的控制信息、数据信息以及CPU 从8254读取的状态信息,包括某时刻的
是2H 吗? N
是4H 吗? N 键盘是否输入?
结束
播放song2
播放song3
Y
N
Y CX=0 N
Y
实时计数值。
(2).读/写控制逻辑
控制8254的片选及对内部相关寄存器的读/写操作,它接收CPU发来的地址信号以实现片选、内部通道选择以及对读/写操作进行控制。
(3).控制字寄存器
在8254的初始化编程时,由CPU写入控制字,以决定通道的工作方式,此寄存器只能写入,不能读出。
(4).计数通道0#、1#、2#:
这是三个独立的,结构相同的计数器/定时器通道,每一个通道包含一个16位的计数寄存器,用以存放计数初始值,一个16位的减法计数器和一个16位的锁存器,锁存器在计数器工作的过程中,跟随计数值的变化,在接收到CPU 发来的读计数值命令时,用以锁存计数值,供CPU读取,读取完毕之后,输出锁存器又跟随减1计数器变化。
(5).8254外部引脚
8254芯片是具有24个引脚的双列直插式集成电路芯片,其引脚分布如图所示。8254芯片的24个引脚分为两组,一组面向CPU,另一组面向外部设备,各个引脚及其所传送信号的情况,介绍如下:
1.D7~D0:双向、三态数据线引脚,与系统的数据线连接,传送控制、数据及状态信息。
2.RD:来自于CPU的读控制信号输入引脚,低电平有效。
3.WR:来自于CPU的写控制信号输入引脚,低电平有效。
4.CS:芯片选择信号输入引脚,低电平有效。
8254的引脚
(6). 8254端口地址
8254端口地址
(7). 8254功能
8253 A既可作定时器又可作计数器:
①计数:计数器装入初值后,当GATE为高电平时,可用外部事件作为CLK 脉冲对计数值进行减1 计数,每来一个脉冲减1,当计数值减至0时,由OUT 端输出一个标志信号。
②定时:计数器装入初值后,当GATE为高电平时,由CLK 脉冲触发开始自动计数,当计数到零时,发计数结束定时信号。
除上述典型应用外,8253A还可作频率发生器、分频器、实时钟、单脉冲发生器等。
(二)、系统设计
(1).控制字
8255利用端口B从音乐播放选择端口读入8位数据进行判断,同时8254选择通道0,方式3,二进制,先读低位/后高位读数。
则输入的控制字为:
MOV DX,D8255_MODE
MOV AL,10000010B
OUT DX,AL
MOV DX,D8254_MODE
MOV AL,00110110B
OUT DX,AL
(2).演奏单音符
8254芯片(口地址为40H—43H)的0号计数器工作在方式3作为频率发生器发出方波。每一个音符对应一个频率,将与一个频率对应的计数初值写入0号计数器,扬声器就可以发出相应的音调。由于本实验采用的时钟是8086CPU 时钟,其频率可选为1MHZ。故计数初值的计算公式如下:
计数初值=1M/输出频率
1MHZ转换为16进制数为0F4240H,因此在打开扬声器的情况下执行以下子程序即可发出与输出频率对应的音调。
MOV DX ,4CH
MOV AX,4B40H
MOV CX,频率值
DIV CX ;AX=计数初值
OUT 40H,AL
MOV AL,AH
OUT 40H,AL
(3).演奏时间控制
通过控制每个音符的演奏时间可以使乐曲更加有节奏感。最直观的方法是按照乐谱为每一个音符规定一个演奏时间,但是利用这种方法调试程序特别困难。特别是在遇到一首不熟悉的歌曲时,初期很难确定每个音符的演唱时间,而调试程序的时候费时费力,效果很差。
我们可以利用另外一种方法,即为每个音符规定一个“单位时间”。
单位时间×N=音符的演唱时间
其中,N为调试参数,一首歌曲只有一个调试参数,它为常数。由于每个音符的节奏(即演唱时间)不同,所以各个音符的“单位时间”都不一样。
每个音符演奏的“单位时间”的确定:
我们知道,音符的节奏分为一拍、半拍、1/4拍、1/8拍等等。如果在一首歌中,所有音符中演奏时间最短的为1/8拍,我们就规定1/8拍音符的“单位时间”为1,1/4拍音符的“单位时间”为2,半拍音符的“单位时间”为4,一拍音符的“单位时间”为8。
调试参数N的确定:
显然,如果能测出一段乐谱的总的时间t,用T(i)来表示第i个音符的“单