汇编实验音乐播放程序.docx
《汇编实验音乐播放程序.docx》由会员分享,可在线阅读,更多相关《汇编实验音乐播放程序.docx(13页珍藏版)》请在三一文库上搜索。
1、第三节音乐播放程序1硬件编程21.1 硬件开发的通用思路21.2 8253的功能与作用21.3 8253工作原理21.4 8253编程方法32音乐程序编写62.1 扬声器驱动原理62.2 音符频率确实定62.3 定时器8253编程62.4 并口8255A编程73实验步骤104Turboc2的安装与使用114.1 turboc2的安装114.2 集成环境介绍114.3 turboc2的配置124.4 根本编程操作121硬件编程1.1 硬件开发的通用思路在学习的过程中,往往表达一个人的学习能力,并不是一个人在某一方面具体知识和技能掌握的如何,而是他是否掌握了有效的学习方法,是否能够建立起一个夯实的
2、知识框架。在本次实验中,通过大家学习本次实验,完成实验任务只是一个浅层次的目的,更重要的目的,也是通过实验,让大家亲身体验下硬件编程,掌握硬件编程的方法。其实不光是在硬件开发上,对于其他的任何事物和问题,解决问题的方法也是一样的。以下我们以8253定时器的开发,来简要介绍下我们的学习思路和方法,也可作为本小节内容组织的一个缩影。是什么?8253的功能和作用为什么?8253的工作原理怎么做?如何编程控制8253图1.11.2 8253的功能与作用8253是可编程的定时器与计数器。为外设与CPU之间或外设与外设之间配合工作时,提供有效的时间配合条件。8253有三个独立的16位计数器。每个计数器均可
3、按二进制或者BCD码计数。各个计数器有6种不同的工作方式。1.3 8253工作原理8253内部结构图1.28253内部结构框图8253内部有六个模块,结构框图如图1.2所示。数据总线缓冲器:数据总线缓冲器通过引脚D0D7与系统数据总线的D0D7相连,来实现CPU和8253的数据传输的。数据包括8253的计数值,和工作方式命令字。传输的方式为读和写。读写控制逻辑:读写控制逻辑由CPU发出的读写控制信号和地址信号,选择读出或写入的存放器,并确定数据传输的方向:读/写。控制字存放器:控制字存放器接收CPU发来的控制字。控制字用于设定8253的硬件状态,如计数器的选择与工作方式等。计数器n:计数器是8
4、253中真正的“劳动者”,8253的计数和定时功能是由计数器实际执行完成的。8253内部有3个独立的计数器。对于每一个独立的计数器,其都有三个引脚:CLKn.GATEnOUTno也可以简单的将这三个引脚的关系理解为输入ICLKn)、输出(OUTn)和控制(GATEn)08253计数原理计数器的输入为CLK时钟信号,为计数器工作提供计数的基准参考。在8253工作时,每输入一个时钟信号CLK,便使定时或计数值减1。当计数器工作时,定时或计数值减为。时,就在OUT线上输出OUT信号,以指示定时或计数己到。GATE门选通信号用于控制计数器工作,主要用来禁止、允许或开始计数。1.4 8253编程方法端口
5、与存放器图1.38253读写操作及端口地址8253的读写操作主要是由控制逻辑模块来实现的,AO.Al地址信号用来选择计数器,而由图。1.3可以看出,更确切的说AO、AI地址信号的作用是在选择端口。端口其实就是存放器,端口地址就是存放器的地址。当我们写数据到某个端口时,总要有个存储单元来接收存储我们的数据吧,否那么数据还没被送给CPU就不见了。当我们读取某个端口,那么一定也有一个存储单元存储着我们想要的数据吧,否那么我们的数据从哪里来呢?这样应该好理解吧,所以端口其实就是存放器。读写信号控制着数据的流向,数据是输入还是输出。这里大家可能会有疑问了。那我在编程控制8253的时候,读写信号、地址信号
6、是不是都要我在编程的时候直接进行设定呢?答案是否认的。其实我们在编程的时候要方便的多。硬件接口中每个端口都有特定的功能,编程时通过读写相应端口来对硬件接口进行控制和数据传输。8253端口:40H计数器0数据口。写该端口,可设置计数器1的初值。读同之。41H计数器1数据口。42H一一计数器2数据口43H8253控制口写该端口,选定计数器及其工作方式等。当我们要设置8253的工作状态时,我们要将工作方式命令字写入43H端口即可,当我们要对计数器2设置计数初值时,将计数初值写入42H端口即可。读写操作由汇编指令IN、OUT来完成,C语言中由inportb()和OUtPOrtbo函数完成。因此,在我们
7、编程时,我们只需要使用端口10命令或函数,指定要操作的端口号即可。至于硬件级别的引脚信号怎么做的都是由CPU在执行代码时,CPU发出的,那是CPU的事。8253编程任何一个硬件设备在正常使用之前都需要进行初始化。当芯片刚加电时,硬件的工作状态都是混乱的,因此,第一步总是要初始化硬件,初始化完成后,就可以控制硬件完成功能任务。图1.48253工作方式命令字格式由8253命令字可以看出,命令字主要控制着8253的计数器选择、读写格式、工作方式和计数码制。通过向8253的控制端口写入工作方式命令字,实现对8253工作状态的控制,主要用于8253的初始化。代码1.1选择计数器2,工作方式3,计数初值5
8、33(2个字节),采用二进制计数。#defineTIMER2JNIT0xb6命令字#defineINIT_DATA0x533计数初值#definePORT_T20x42计数器2数据口#definePORT.CTRL0x43/8253控制口union共用体暂存计数初值(unsignedintdivisor;unsignedchard2;tone;tone.divisor=INIT_DATA;OUtPOnb(CTRL_T,INnLT2);向控制端口写入工作方式命令字,初始化outportb(PORT_T2,tone.dOD;写入计数初值的低字节outportb(PORT-T2,tone.dI);写
9、入计数初值的高字节include函数名:inportb功能:返回从指定硬件端口读入的一个8位二进制(一个字节)。用:intinportb(intport);函数名:Outportb功能:输出字节到硬件端口中用法:voidoutportb(intport,charbyte);2音乐程序编写2.1 扬声器驱动原理图2.1扬声器硬件原理图在PC机中,8253的通道2与计算机的扬声器相连,由通道2工作于方式3产生一定频率的方波信号去驱动扬声器按一定频率发声。其中8253是否工作取决于其片选信号GATE2,输出的频率大小受控于编程时写入的计数初值。其原理如图2.1所示。8253的端口地址为40H43Ho
10、从图中可见,系统使用并行I/O接口8255A中PB端口的最低两位用作两个开关,来控制该发声驱动系统:PBo作为8253通道2的门控信号GATE2,控制通道2定时计数的启停;PBi与通道2的OUT2信号相与后去控制扬声器接通与断开。PC中8255A的端口地址为60H63H.可见,要使扬声器发声,PBO置1,通道2才能工作;PBl置1,OUT2上产生的一定频率的方波信号才能通过与门送到驱动器,从而使扬声器发声。在明白了如何通过驱动扬声器的原理后,我们应该明白,实现本次实验,关键点就在与两个方面了:一是如何控制8253定时器,使其输出音频波形;二是如何控制8255A,使其起到控制开关的作用。接下来我
11、们来深入探讨。2.2 音符频率确实定乐曲是按照一定的上下、长短和强弱关系组成的音调。在一首乐曲中,每个音符的音高与频率有关。组成乐曲的每个音符的频率值是乐曲程序发声所需要的数据。音符的频率根据不同的音乐是不同的,可以预先查知,但实际送入计数器的是输入频率l193MHz(l193180)与音符频率相除的值。8度音:1234567i音符1300Hz1462.5Hz1625Hz1733Hz1950Hz2166.7Hz2437.5Hz2600Hz频率918816734689612550489469初值音符频率表例如我们计算扬声器发出音符I时的计数初值,音符I的频率为1300Hz,那么计数初值就为119
12、3180/1300,各个音符的频率以及相关8253的计数初值在上表中。2.3 定时器8253编程定时器8253主要实现音乐频率的产生。在8253的三个独立的计数器中,计数器2用于控制扬声器,两外两个计数器分别用于控制系统软时钟和动态存储器刷新。在音乐播放程序中,首先要初始化8253,使计数器2工作在方式3,随后对计数器2赋初值,它就根据系统时钟对初始值进行减1计数,当计数值到0时,定时器就向扬声器发出一个脉冲,同时重新从初始值开始减计数。总之,定时器能根据要求的频率向扬声器发出脉冲,于是扬声器就产生指定频率的声音。定时器的输入频率固定为1193180,计数初值决定了向扬声器发出脉冲的时间间隔,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验 音乐 播放 程序
