基于8086电子琴的设计与实现Word文档格式.docx
- 文档编号:17029225
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:17
- 大小:84.74KB
基于8086电子琴的设计与实现Word文档格式.docx
《基于8086电子琴的设计与实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于8086电子琴的设计与实现Word文档格式.docx(17页珍藏版)》请在冰豆网上搜索。
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设计框图
电子琴的设计实际上就是要设计一个程序,能够通过该程序控制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初始化程序段:
moval,10110110b;
选择8253的通道2,并设置为工作方式3
out43h,al
movax,bx
out42h,al;
将计数初值的低8位写入计数通道
moval,ah
将计数初值的高8位写入计数通道
开扬声器程序段:
inal,61h;
读入B口数据
oral,03h;
将PB0和PB1置1
out61h,al;
将设置好的数据送回B口
关扬声器程序段:
andal,0fch;
将PB0和PB1置0
out61h,a;
弹奏功能的实现
当按键为数字1-8时,选择弹奏功能,通过对按键的判断,求得其偏移地址,然后通过查表得其相应频率值,再由上述计算计数初值的方法求得计数初值,然后将计数初值送人8253的通道2,最后调用发音子程序即实现弹奏功能。
具体程序段如下:
subal,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口输入
moval,9bh
moval,num;
取相应的时间常数
xlat
movdx,io8253a
outdx,al;
向8253通道0输出
kkk:
movdx,io8255a
inal,dx;
从8255A口读一字节
testal,01;
判PA0口是否为1
jzkkk;
若不为1,则转KKK
ret;
子程序返回
delayendp
(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)
120
106
94
89
79
70
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-18253内部结构图
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.28255简介
按功能可把8255分为三个逻辑电路部分。
即:
口电路、总线接口电路和控制逻辑电路。
8255共有三个8位口,其中A口和B口是单纯的数据口,供数据I/O使用。
而C口则既可以作数据口,又可以作控制口使用,用于实现A口和B口的控制功能。
(2)工作原理
8255的内部结构图如图3-3所示,它有3个数据端口,分为两组,A组由A口和C口高四位组成,B组由B口和C口低四位组成。
其方式控制字如图3-4所示。
图3-38255内部结构图
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
io8253aequioport+280h
io8253bequioport+283h
io8255aequioport+288h
io8255bequioport+28bh
io0832aequioport+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;
正弦波数据
timedb120,106,94,89,79,70,63,59;
发不同音时8253的计数器初值
msgdb'
Press1,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,offsetmsg
movah,9
int21h;
显示提示信息
sss:
movah,7
从键盘接收字符,不回显
cmpal,1bh
jeexit;
若为ESC键,则转EXIT
cmpal,31h
jlsss
cmpal,38h
jgsss;
若不在'
1'
-'
8'
之间转sss
subal,31h
movnum,al;
求出相应的时间常数的序号
movcx,60;
取60次32个正弦波数据
ddd:
movsi,0
lll:
moval,data1[si];
取正弦波数据
movdx,io0832a
outdx,al;
放音
calldelay;
调延时子程序
incsi
cmpsi,32;
是否取完32个数据
jllll;
若没有,则继续
loopddd;
总循环次数60是否完,没有,则继续
jmpsss
exit:
movah,4ch
int21h
codeends
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,很明显容量不够,于是我采用了基址+变址的寻址方法,在编程的过程中,由于要程序实现多个功能,所以用子程序的结构会比较方便,需要完成某个功能时,只需调用相应子程序就可以了,这样会使得程序的结构清楚明了。
在完成基本功能后,我还试着加上一些附加功能,比如延时,变调,通过我的不断尝试,终于把延时功能实现了,但变调功能没能像预期的那样。
总之,这次课程设计让我学到了许多从课本上学不到的知识,加深了对理论知识的理解,激发了我对汇编语言的兴趣。
上理论课时,只是老师讲,我们听,那些指令让我感到很枯燥,因为不知道它到底有什么作用,而这次课程设计刚好把这些指令应用到了实际中来,加深了对各种指令功能的理解,最后功能实现时,感到很有成就感,觉得汇编语言很神奇,激发了我对它的兴趣。
参考文献
[1]专着.杨素行.微型计算机系统原理及应用[M].北京.清华大学出版社,2004
[2]专着.龚尚福.微机原理与接口技术[M].西安电子科技大学出版社,2003.8
[3]专着.李芷.微机原理与接口技术[M].电子工业出版社,2002
[4]专着.宋杰等.微机原理与接口技术课程设计[M].机械工业出版社,2005
[5]专着.小捷.汇编语言程序设计(第二版)[M].西安电子科技大学出版社,2003
[6]专着.钱晓捷.汇编语言程序设计(第二版)[M].电子工业出版社,2003
[7]专着.杨立,邓振杰等.微型计算机原理与接口技术(第二版)[M].中国铁道出版社,2006
附录1:
总体电路原理图
附录2:
元器件清单
(1)计时器8253
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 8086 电子琴 设计 实现