基于8086电子琴的设计与实现.docx
- 文档编号:10515625
- 上传时间:2023-02-17
- 格式:DOCX
- 页数:26
- 大小:750.74KB
基于8086电子琴的设计与实现.docx
《基于8086电子琴的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于8086电子琴的设计与实现.docx(26页珍藏版)》请在冰豆网上搜索。
基于8086电子琴的设计与实现
郑州科技学院
《微机原理与接口技术》课程设计
题 目_基于8086电子琴的设计与实现
学生姓名
专业班级 12级计算机科学与技术一班
学 号
院(系) 信息工程
指导教师
完成时间 2015年1月 11 日
目 录
1引言ﻩ1
2设计方案与论证ﻩ3
2.1方案一ﻩ3
2.2 方案二ﻩ3
2.2.1设计思路4
3 设计原理及功能说明ﻩ9
3.1.18253简介ﻩ10
3.2软件ﻩ14
3.2.1设计实验总流程图ﻩ14
3.2.2设计子程序流程图ﻩ15
4 调试与结果测试ﻩ17
4.1硬件调试ﻩ17
4.2软件调试ﻩ20
4.3测试方案和测试结果22
5总结23
参考文献26
附录1:
总体电路原理图27
附录2:
元器件清单ﻩ28
附录3:
源代码29
1 引言
随着电子技术的发展,计算机在现代科学技术的发展中起着越来越重要作用。
多媒体技术、网络技术、智能信息处理技术、自适用控制技术、数据挖掘与处理技术等都离不开计算机。
本次课程设计是基于微机原理与接口技术的简单应用。
微机技术目前运用最广泛的就是单片机。
单片机是随着大规模集成电路的出现极其发展,将计算机的CPU、RAM、ROM定时/计数器和多种I/O接口集成在一片芯片上,形成了芯片级的计算机,因此单片机早期的含义称为单片微型计算机。
它拥有优异的性价比、集成度高、体积小、可靠性高、控制功能强、低电压、低功耗的显著优点.主要应用于智能仪器仪表、工业检测控制、机电一体化等方面,并且取得了显著的成果。
单片机控制通用MIDI音源模块制作制作出的电子琴,结构简单,可靠性高,并且价格低廉,具有实用的价值。
这种电子琴能够支持单音和复音弹奏,如果与高品质的音源芯片连接,音质更可与高档电子琴相媲美。
手机中通用的音乐芯片构成音源模块,效果不错,价格更低廉,如韩国产的QS6400等,这些芯片的驱动要复杂一些,需要对芯片进行初始化设置。
此外还有音乐盒、附有生日歌的生日卡片等等。
所以利用微机制作的简易电子琴在我们的日常生活中随处可见[1]。
微机原理简易电子琴设计主要是通过对电子琴主体部分的电路进行模仿设计,达到电子琴固有的基本功能,故叫简易电子琴。
利用定时器可发出不同频率的方波,不同频率的方波经喇叭就会发出不同音调。
其次,定时器按设置的定时参数产生中断,这一次中断发出脉冲低电平,下一次反转发出脉冲高电平,由于定时参数不同,就发出不同频率的方波[2],本设计中按键一次,会发出方波,松开后随之延时,但在延时的期间继续检测按键,若此时又有键被按下,若被按下的仍为原键则声音不变,否则键盘会译出被按下的另一个键的音调。
本次课程设计的目的是通过D/A转换器产生摸拟信号,使PC机作为简易电子琴。
其主要任务有以下几点:
基于8086系统;使用计算机的数字键1、2、3、4、5、6、7、8作为电子琴的按键,按下即可发出相应的音阶;音阶通过扬声器发出声音。
本次设计通过8255和8253来实现电子琴模拟,主要可以分成两部分,分别为输入部分和发音部分。
输入部分:
主要是由8255和8个常开型开关来完成。
发音部分:
CUP通过对定时器8253的通道2进行编程,使其I/O寄存器接收一个控制声音频率的16位计数值,端口61H的最低位控制通道2门控的开断,以产生特殊的音响[3]。
本文用到的是8253的方式3——方波发生器。
通过课程设计使学生更进一步掌握微机原理及应用课程的有关知识,提高应用微机解决问题的能力,加深对微机应用的理解。
通过查阅资料,结合所学知识进行软、硬件的设计,使学生初步掌握应用微机解决问题的步骤及方法。
为以后学生结合专业从事微机应用设计奠定基础。
2 设计方案与论证
2.1方案一
首先利用了编程程序,编辑8255芯片控制字, 对其进行初始化,使其工作在方式0,即基本输入输出状态,将8255的A端口设置为输出,C端口进行,经CPU运算后, 输出到8254芯片的A端口中,由此实现对其的初始化。
将8254芯片设置为工作在方式3,即输出对称方波状态。
A端口为输入,“OUT”指令可将输出对应一定频率的方波送到扬声器中,由此实现发声[4]。
本实验频率大小控制发出声音的高低,通过对延时程序的调用控制发出声音的长短。
并通过所编程序实现对键盘的重复扫描,从而可以弹奏多个音符的试验目的。
2.2方案二
8253的CLK0接1MHz时钟,GATE0接+5V,OUT0接8255的PA0,K8跳线连接喇叭,使用汇编语言设计一个运行于计算机的电子琴程序,程序应实现弹奏功能。
其中弹奏:
用户每按一琴键弹奏相应音符;软件预想功能为:
按数字1~8为弹奏功能,按下即发出相应的音阶。
按键发音,当从键盘上敲击1~8时,音响发出哆、唻、咪、发、嗦、啦、唏、唗的音节。
对比方案一,其实两个方案差不多,但是我对于8254不熟悉,所以最终决定此方案为我选择的最佳方案,并附上本次设计的设计框图如图2-1所示:
图2-1设计框图
2.2.1设计思路
电子琴的设计实际上就是要设计一个程序,能够通过该程序控制PC机内扬声器的发声规律,按下相应的按键后,扬声器能发出指定频率的声音。
PC机内的扬声器是通过并行接口芯片8255和定时芯片8253来控制发音的。
在本次课程设计中,分析和确定程序总体设计目标:
电子琴基本功能后,将总体目标确定为连接电路与编程来实现功能。
程序设计的思路按以下顺序进行:
(1)分析与确定程序总体设计目标;
通过D/A转换器产生摸拟信号,使PC机作为简易电子琴。
其总体原理图如图2-2所示:
图2-2 总体原理图
(2)按照电路图连接实验箱,如图2-3所示:
图2-3电路连接图
(3)编写源程序,进行调试,包括:
发音部分功能实现
由更件的连接形式可知,扬声器的开断是由8255的PB0和PB1以及8253通道2同时控制的,PB0和PB1同时为高电平时,扬声器开,有一个为低电平时,扬声器关断,又知8255B口地址为61H,8253通道2地址为42H,控制口地址为43H。
具体程序编写[5]如下:
8253初始化程序段:
mov al,10110110b ;选择8253的通道2,并设置为工作方式3
out43h,al
movax,bx
out42h,al ;将计数初值的低8位写入计数通道
moval,ah
out 42h,al ;将计数初值的高8位写入计数通道
开扬声器程序段:
inal,61h ;读入B口数据
oral,03h ;将PB0和PB1置1
out61h,al ;将设置好的数据送回B口
关扬声器程序段:
inal,61h ;读入B口数据
andal,0fch ;将PB0和PB1置0
out61h,a ;将设置好的数据送回B口
弹奏功能的实现
当按键为数字1-8时,选择弹奏功能,通过对按键的判断,求得其偏移地址,然后通过查表得其相应频率值,再由上述计算计数初值的方法求得计数初值,然后将计数初值送人8253的通道2,最后调用发音子程序即实现弹奏功能。
具体程序段如下:
sub al,31h ;求偏移量
shlal,1
movbl,al ;保存偏移量
movbh,0
movax,num1 ;计算计数初值
movdx,num2
divwordptr[tab+bx]
movbx,ax ;保存计数初值
延时功能的实现
当弹奏完音乐之后,调用延时子程序,音乐延时播放。
具体程序段[6]如下:
delayprocnear ;延时子程序
ccc:
ﻩmovbx,offsettime
ﻩmovdx,io8253b ;置8253通道0为方式0工作
ﻩmoval,10h
outdx,al
ﻩmovdx,io8255b ;设8255A口输入
mov al,9bh
out dx,al
ﻩmov al,num ;取相应的时间常数
ﻩxlat
movdx,io8253a
outdx,al ;向8253通道0输出
kkk:
ﻩmov dx,io8255a
inal,dx ;从8255A口读一字节
testal,01 ;判PA0口是否为1
jzkkk ;若不为1,则转KKK
ﻩret ;子程序返回
delayendp
2.2.2各个音节频率的设定
(1)对于一个特定的D/A转换接口电路CPU执行一条输出指令将数据送入D/A即可在其输出端得到一定的电压输出。
给D/A转换器输入按正弦规律变化的数据,在其输出端即可产生正弦波。
对于音乐,每个音阶都有确定的频率,如表2-1所示:
表2-1各音阶标称频率表
音阶
1
2
3
4
5
6
7
8
频率(单位:
Hz)
261.1
293.7
329.6
349.2
392.0
440.0
493.9
529.7
对应num取值(us)
12
0
63
59
以 1~8接8255 的A 口做为电子琴的键盘分别输入哆、唻、咪、发、嗦、啦、唏、唗的音,以8255的 B口作为输出。
用8253定时器产生频率控制扬声器发声。
以 8255接八个开关1~8,做电子琴按键输入。
以8253 控制扬声器,发出相应的音阶。
要求:
1—发哆的音261.1Hz
2—发 唻的音293.7Hz
3—发咪的音329.6Hz
4—发 发的音349.2Hz
5—发嗦的音392.0Hz
6—发 啦的音 440.0Hz
7—发 唏的音493.9Hz
8—发唗的音 529.7Hz
(2)产生一个正弦波的数据可取32个(小于亦可),不同频率的区别,可通过调节向D/A转换器输出数据的时间间隔,例如:
发"1"频率为261.1HZ,周期为1/261.1=3.83ms,输出数据的时间间隔为3.83ms/32=0.12ms。
定时时间可以由8253配合8255来实现。
按下某键后发音时间的长短可以由发出的正弦波的个数多少来控制。
3设计原理及功能说明
3.1硬件
通过8255和8253来实现电子琴模拟,主要可以分成两部分,分别为输入部分和发音部分。
输入部分:
主要是由8255和8个常开型开关来完成。
发音部分:
CUP通过对定时器的通道2进行编程,使其I/O寄存器接收一个控制声音频率的16位计数值,端口61H的最低位控制通道2门控的开断,以产生特殊的音响。
当通道2用于发声时,采用的是方式3,在方式3下,输出线为“1”和为“0”的时间各占计数时间的一半,因而产生一系列间隔均匀的脉冲。
从定时器输出的方波信号,经功率放大和滤波后驱动扬声器。
送到扬声器的信号还受到了从并行接口芯片8255(端口地址为61H)来的双重控制,端口61H的最低位控制通道2的门控开断,以产生特殊的音频信号端口61H的PB1位和定时器的输出信号同时作为与门的输入,PB0和PB1位可由程序决定为0还是为1。
显然只有PB0和PB1都是1时,才能使扬声器发出声音。
控制音长的时间可以简单地通过反复执行指令来得到。
3.1.18253简介
(1)基本介绍
8253芯片是常用的可编程计数器,在微机中有着极其重要的作用。
常用于事件计数器,单稳态触发器,分频器,方波发生器,硬件触发的单脉冲发生器等。
计数器/定时器8253包括3个独立的16位计数器通道,而每个计数器都有6种工作方式,可以按二进制或十进制(BCD码)进行计数。
本文用到的是8253的方式3——方波发生器来实现了简易电子琴的设计。
(2)工作原理
8253芯片中有3个计数通道,称为通道0,1,2,它们与外部电路相连的信号线有3根:
CLK,GATE,OUT,CLK是脉冲输入端,GATE是门控信号,OUT是输出信号,计数器工作在减1状态。
其内部结构图,方式控制字格式,如图3-1,图3-2所示。
其中当计数器工作在方式3时,输出信号为方波信号。
图3-1 8253内部结构图
D7
D6
D5
D4
D3
D2
D1
D0
图3-28253控制字格式
PC机内8253的通道0,通道1,通道2,控制口的端口地址分别为:
40H,41H,42,43H。
因为扬声器是由通道2来控制的,故应选择通道2,工作方式选为方式3,输出的信号则为方波信号。
(3)8253的工作方式3——方波发生器
其特点是:
输出为周期性的方波。
若计数值为 N,则输出方波的周期是N个CLK 脉冲的宽度;
写入控制字后,输出将变为高电平,当写入计数初值后,就开始计数,输 出仍为高电平;当计数到初值的一半时,输出变为低电平,直至计数到 0,输出又变为高电平,重新开始计数;
若计数值为偶数,则输出对称方波;如果计数值为奇数,则前(N+1)/2个CLK脉冲期间输出为高电平,后(N-1)/2个CLK脉冲期间输出为低电平;
GATE 信号能使计数过程重新开始,GATE=1允许计数,GATE=0禁止计数。
停止后OUT将立即变高电平,当GATE再次变高以后,计数器将自动装入计数初值,重新开始计数。
3.1.2 8255简介
(1)基本介绍
按功能可把8255分为三个逻辑电路部分。
即:
口电路、总线接口电路和控制逻辑电路。
8255共有三个8位口,其中A口和B口是单纯的数据口,供数据I/O使用。
而C口则既可以作数据口,又可以作控制口使用,用于实现A口和B口的控制功能。
(2)工作原理
8255的内部结构图如图3-3所示,它有3个数据端口,分为两组,A组由A口和C口高四位组成,B组由B口和C口低四位组成。
其方式控制字如图3-4所示。
图3-3 8255内部结构图
PC机内8255的A口,B口,C口和控制口的端口地址分别为:
60H,61H,62H,63H。
3.2软件
3.2.1设计实验总流程图
结合实验指导书的程序,实现简单的电子琴功能。
电子琴主程序流程图如图3-5所示:
图3-5电子琴主程序流程图
3.2.2设计子程序流程图
(1)发音子程序
本子程序实现放音功能。
首先从键盘读出一个字符,判断,如果是ESC键,返回DOS,如果不是,判断,如果键码不是1~8,即仍然处于音阶输入准备状态,如果是,即求出音阶值保存,取60次32个正弦波数据,播放32个数据,组成一个正弦波。
播放60次后,然后判断是否有按键,如果有就进入死循环,直到下次按键为止。
在弹奏时都需调用发音子程序,发音子程序的作用是控制扬声器的发音,其流程图如图3-6所示:
图3-6 发音子程序流程图
(2)弹奏子程序
当按键为1-8时,调用演奏子程序。
演奏子程序的流程图如下图3-7所示:
图3-7演奏子程序的流程图
(3)延时子程序
当弹奏完音乐之后,音乐延时播放。
延时子程序的流程图如下图3-8所示:
Y
N
图3-8延时子程序的流程图
4调试与结果测试
4.1 硬件调试
⑴利用实验板上的8253计数/定时器和8255并行接口,定时器8253利用工作方式3产生一定频率信号,通过可编程的并行外围接口芯片8255控制频率信号的断。
8255的B口设置为输出,8255的B口的低两位用来控制扬声器驱动,当输出端口的PB0位为“1”或为“0”时,将使控制驱动器的与门电路接通或关闭使8253所发出的音频信号能到达驱动器或被阻断。
这样通过控制PB0的变化,可使扬声器接通和断开,控制扬声器是否能发出声音。
此外,通过控制PB0的通断时间,就能发出不同的音长。
8255的PB1位为“1”时,控制8253定时器产生驱动扬声器发声的音频信号,该位为“0”则不发信号。
8253有三个定时器,分为0号、1号和2号定时器,驱动扬声器的是2号定时器,该定时器工作在方式3,是一个频率发生器,它负责向扬声器发送指定频率的脉冲信号。
当8255的PB0和PB1都为1时,8253发出指定频率的声音信号的前提下,声音信号过与门到达驱动器驱动扬声器发声。
连接简易电子琴系统的电路图如图4-1所示
图4-1 电子琴系统的电路图
⑵将实验箱与微型计算机保持串口通讯成功。
⑶将汇编程序代码输入微型计算机进行硬件调试。
4.2 软件调试
⑴把弹奏功能的程序代码输入微型计算机;
代码:
datasegment
ioportequ0d400h-0280h
io8253aﻩequioport+280h
io8253bﻩﻩequ ioport+283h
io8255aﻩﻩequioport+288h
io8255bﻩequioport+28bh
io0832aﻩﻩequioport+290h
data1db80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh
db0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h
db80h,66h,4eh,38h,25h,15h,09h,04h
db00h,04h,09h,15h,25h,38h,4eh,66hﻩ;正弦波数据
time db120,106,94,89,79,70,63,59;发不同音时8253的计数器初值
msg db'Press 1,2,3,4,5,6,7,8,ESC:
',0dh,0ah,'$'
numdb?
;num为8253计数器初值的序号
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
ﻩmovds,ax
movdx,offset msg
ﻩmov ah,9
ﻩint21h ;显示提示信息
sss:
ﻩmovah,7
ﻩint21h ;从键盘接收字符,不回显
ﻩcmpal,1bh
jeexit ;若为ESC键,则转EXIT
cmpal,31h
ﻩjl sss
cmpal,38h
jg sss ;若不在'1'-'8'之间转sss
sub al,31h
movnum,al ;求出相应的时间常数的序号
ﻩmovcx,60 ;取60次32个正弦波数据
ddd:
mov si,0
lll:
moval,data1[si] ;取正弦波数据
movdx,io0832a
out dx,al ;放音
calldelay ;调延时子程序
incsi
ﻩcmpsi,32 ;是否取完32个数据
jl lll ;若没有,则继续
ﻩloopddd ;总循环次数60是否完,没有,则继续
ﻩjmpsss
exit:
ﻩmov ah,4ch
ﻩint21h
delay procnear ;延时子程序
ccc:
mov bx,offset time
ﻩmovdx,io8253b ;置8253通道0为方式0工作
ﻩmoval,10h
out dx,al
mov dx,io8255b ;设8255A口输入
ﻩmoval,9bh
outdx,al
mov al,num ;取相应的时间常数
ﻩxlat
ﻩmovdx,io8253a
out dx,al ;向8253通道0输出
kkk:
movdx,io8255a
ﻩin al,dx ;从8255A口读一字节
ﻩtestal,01 ;判PA0口是否为1
jz kkk ;若不为1,则转KKK
ﻩret ;子程序返回
delayendp
code ends
endstart
⑵与硬件相结合进行修改调试,运行程序后,显示如下界面,等待输入字符,如图4-2所示:
图4-2运行界面
从键盘上敲击1~8时,音响发出哆、唻、咪、发、嗦、啦、唏、唗的音节,则调试成功。
4.3测试方案和测试结果
如表4-1所示:
表4-1测试表
测试方案
测试结果
启动程序,出现按键提示,按下1~8键
机内/实验仪发出相应的音阶
改变开关状态,按1~8键
对应发出相应的音阶
“弹琴”
发出优美旋律
按下ESC键
退出程序
5 总结
在为期一周的微机原理课程设计中,我学会了制做项目的一般步骤。
第一部是硬件设计主要是实现控制对象与被控制对象之间的联系。
第二步就是软件设计,就是要完成各个可编程芯片与CPU之间的数据传送和各个进程的逻辑顺序。
在本次设计中对硬件要求就要熟练掌握可编程器件8255A和8253的应用。
对软件设计就要熟练掌握汇编语言。
由于时间限制的问题和硬件的局限性也只能将电子琴的功能简易化。
另外,我从中学到了许多从课本上学不到的东西,锻炼了自己编程的能力,最后程序运行时能够实现目标,我感到很有成就感,从中也获得了很多乐趣,当然,最重要的是加深了我对课本理论知识的理解。
当刚看到这个课设题目时,我感到无从下手,因为我都不知道PC机的内部具体结构,从理论课上只是了解了CPU的结构和工作原理,以及几个接口芯片的工作原理,还有汇编语言的一些基本指令。
但我没有被吓到,我冷静下来思考后,发现其本质就是控制PC机内扬声器的发音,通过查阅资料我了解了PC机内扬声器的电路连接形式,发现它是由接口芯片8255和8253共同控制的,8255的PB0作为8253通道2的门信号,而8255的PB1和8253通道2的输出相与后的信号作为扬声器的驱动信号,了解了其内部接线方式后,思路也就有了,要想让扬声器发声,8255的PB0和PB1必须同时为高电平,其中之一为低电平时,扬声器就不能发声,而发声的音调则可通过改变8253的计数初值来实现,接下来的任务就是通过编程来控制8255和8253,从而间接地控制扬声器的发声规律,而8255和8253这两个接口芯片在理论课上都已介绍过,对其工作原理和编程方法都有一定的了解,看到这些熟悉的内容时,我淡定了很多。
有了思路之后,我并没有急着写程序,因为我怀疑是不是每台PC机的扬声器接线方式都是这样的,所以我开始只编了一段控制扬声器发音的程序,来看看程序运行时扬声器到底发不发音,结果发声了,这让我很惊喜,也很有动力,更加激发了我的兴趣,接下来我就开始编写实现指定功能的程序了,首先是最简单的弹奏功能,通过对按键的判断来发出相应频率的声音,因为要判断按键,所以很自然地就想到了CMP指令,在计算计数初值时,因为要用到相应音符的频率,所以需要将按键转换为音符的频率,我开始想用书上常见的XLAT换码指令[7],但AL存放的数最大为128,很明显容量不够,于是我采用了基址+变址的寻址方法,在编程的过程中,由于要程序实现多个功能,所以用子程序的结构会比较方便,需要完成某个功能时,只需调用相应子程序就可以了,这样会使得程序的结构清楚明了。
在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 8086 电子琴 设计 实现