微机系统与接口课程设计电子琴.docx
《微机系统与接口课程设计电子琴.docx》由会员分享,可在线阅读,更多相关《微机系统与接口课程设计电子琴.docx(18页珍藏版)》请在冰豆网上搜索。
微机系统与接口课程设计电子琴
目录
一设计任务描述2
1.1设计题目2
1.2设计目的2
1.3设计要求2
二设计概要3
2.1设计思路3
2.2设计原理3
2.3设计内容3
2.4设计环境与器材4
2.5主要芯片功能4
2.5.18255主要功能4
2.5.28254主要功能7
三硬件接线图及流程图9
3.1硬件接线图9
3.2流程图9
3.3键盘值对应图10
四简易电子琴设计源程序及注释12
总结16
参考文献17
一设计任务描述
1.1设计题目
简易电子琴设计
1.2设计目的
通过本学期对微机原理的学习,掌握的知识还停留在理论的上。
但是这是一门实践性较强的课程,让学生在学完该课程之后,进行一次课程设计,使学生将课堂所学的知识和实践有机结合起来,初步掌握计算机应用系统设计的步骤和接口设计的方法,提高分析和解决实际问题的能力,为以后学生结合专业从事微机应用设计奠定基础。
通过设计实践,培养学生查阅专业资料,工具书或参考书,了解有关工业标准,掌握现代设计手段和软件工具。
通过设计,不但要培养和提高学生解决工程具体问题,动脑动手的技术工作能力,而且还要逐步建立科学正确的设计和科研思想,培养良好的设计习惯,牢固树立实事求是和严肃认真的工作态度。
具体要求如下:
(1)可以弹出7个音阶;
(2)弹奏简短音乐;
(3)通过改变键盘输入来改变8254输出频率,实现扬声器发音。
1.3设计要求
1、总体内容:
设计简易电子琴,能发出至少7种音阶;
2、接口设计:
根据题目和所用的接口电路芯片设计出完整的接口电路,并在实验系统上完成电路的连接和调试通过;
3、程序设计:
要求画出程序框图,设计出全部程序并给出程序设计说明和程序注释;
4、前期完成的实验有:
8254方波实验,8255并行接口实验。
二设计概要
2.1设计思路
电子琴简单功能的实现利用8255和8254来实现,由此将程序分成两部分。
第一部是利用8255实现,为键盘扫描,用来确定按键位置,并给计数器赋初值。
PB0—PB4,PA0—PA4它们分别与键盘单元的X1—X4,Y1—Y4相连,其中B口低4位为输出端,是用来输出到键盘上的行列值,A口低4位为输入端,就是用他们将键盘上按下的键值传到8255A口从而进一步工作。
具体工作过程为:
先给所有列线输入低电平,然后读取行线,检测行线是否为低电平,如果有某条行线输出低电平,则说明该键盘有按键被按下,否则,说明无按键被按下.采用这种方法可以快速判断键盘是否有键按下。
在检查到有键按下后,再通过行扫描法判断按下的位置,从而确定按下的是什么键,经过计算得出计数器1#的初值,通过系统将该处值送到8254中。
第二部是利用8254实现,为发声部分,由计数器1#的输出端产生一定频率的方波驱动扬声器发声。
其CLK1端在微机内部已接好频率为1MHZ的方波信号(由系统自动提供),计数控制端GATE1接至+5V,计数器输出端OUT1接至发声单元。
该芯片在系统中接收到8255传来的初值,发出不同的方波,从而使扬声器发出不同的声音。
在这里调用了延时程序,从而使发出的声音长短不同。
2.2设计原理
电子琴的设计运用8255芯片、8254芯片、键盘、扬声器等硬件设备。
首先确定两个芯片的工作方式,然后将键盘的各个键值进行设定,设定各个频率到寄存器中。
音调的大小是由声源的震动频率决定的。
OUT1的输出频率就是喇叭的发声频率。
通过让OUT1输出不同的频率信号,就可以使喇叭发出不同音调的声音。
8254内部的计数器都有6种不同工作方式,其中的方式3输出的波形为方波,这样能引起发声。
由于系统中8254的CLK端已固定接好频率为1MHZ的方波信号,所以要控制其输出端OUT1输出不同的频率只能通过写入不同的计数初值来实现。
关系为:
CLK1端的输入频率/OUT1端的输出频率=计数初值N。
只要对8254进行编程,将对应频率的计数初值送入计数器1#的初值寄存器中,就可以使OUT1端输出不同的频率信号了。
整体的工作的过程大致过程为键盘按下键后,其值传到8255A口,然后8255将其传到系统,CPU计算得到初值后通过通道1将其传到8254,然后8254发出方波促使扬声器发声。
2.3设计内容
本次课程设计的内容为简易电子琴的设计与实现,利用8255将键盘输出值返回CPU,CPU通过分析、计算、命令8254输出相应频率的方波波形,再经过扬声器发出声音。
由于PC计算机的时钟晶振为1.1931816MHz,可以利用微机实验箱里面的发生单元发出声音寄存器中的各个键值就是依照这个表2.1为各音阶标称频率值设定的。
表2.1各音阶标称频率值
音符
1
2
3
4
5
6
7
重音对应频率(Hz)
131
147
165
175
196
220
247
低音对应频率(Hz)
262
294
330
349
392
440
494
中音对应频率(Hz)
523
587
659
698
784
880
988
高音对应频率(Hz)
1064
1175
1318
1397
1568
1760
1975
2.4设计环境与器材
(1)PC计算机一台
用于对程序的编译测试等,实现对实验设备进行控制,提供整个程序的运行平台,并且收集和释放硬件信号,实现程序功能。
(2)微机原理实验箱一台
此设备提供了8255、8254等必要芯片。
并且能通过接受计算机传来的信息,实现相应的功能。
(3)导线若干条
用于电路和芯片之间的连接。
2.5主要芯片功能
2.5.18255主要功能
8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。
CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位、32位等。
用+5V单电源供电,能在以下三种方式下工作:
方式0--基本输入/出方式、方式1--选通输入/出方式、方式2--双向选通工作方式。
8255的内部结构及引脚如图2.1所示:
图2.1内部结构及引脚
如图2.1所示,D0~D7为双向数据信号线,用来传送数据和控制字。
为读信号线,与其他信号线一起实现对8255接口的读操作,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据,通常接系统总线的
信号。
为写信号线,与其他信号一起实现对8255的写操作,当这个输入引脚为低电平时,允许CPU将数据或控制字写8255。
通常接系统总线的
。
为片选信号线,当它为低电平时,才能选中该8255芯片,也才能对8255进行操作。
A0、A1为口地址选择信号线。
本次设计使其分别与系统总线的XA1、XA2相连,它们的不同编码可分别寻址3个口和一个控制寄存器,具体规定如表2.2所示。
表2.2地址选择信号线的编码控制
A1
A0
选择
0
0
A口
0
1
B口
1
0
C口
1
1
控制寄存器
RESET:
复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。
D0~D7:
三态双向数据总线,8255与CPU数据传送的通道,当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。
PA0~PA7:
端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。
PB0~PB7:
端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。
PC0~PC7:
端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。
端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。
这里的8255接口所占地址范围为0640H~067FH。
当对8255接口进行写操作时,各信号线的状态如下表2.3所示:
表2.3各信号线的状态
CS
A1
A0
IOR
IOW
操作
0
0
0
1
0
写A口
0
0
1
1
0
写B口
0
1
0
1
0
写控制寄存器
0
1
1
1
0
写C口
8255在应用过程中,将不同的控制字装入芯片中控制寄存器,即可确定8255的工作方式。
8255在应用过程中,将不同的控制字装入芯片中控制寄存器,即可确定8255的工作方式。
8255的控制字由8位二进制数构成,各位的控制功能如下图:
图2.2置位/复位控制字格式
2.5.28254主要功能
8254具有3个独立的16位计数器,6种不同的工作方式。
计数寄存器用来寄存计数初值,计数工作单元为16位减1计数器,它的初值便是计数寄存器内容,计数单元对CLK脉冲计数,每出现一个CLK脉冲,计数器减1,当减为零时,通过OUT输出指示信号表明计数单元已为零。
当作为定时器工作时,每当计数单元为零时,计数寄存器内容会自动重新装入计数单元,而且CLK输入是均匀的脉冲序列,于是OUT输出频率是降低了的(相对于CLK信号频率)脉冲序列。
当作为计数器工作时,表明只关心在CLK端出现(代表事件)的脉冲个数,当CLK端出现了规定个数的脉冲时,OUT输出一个脉冲信号。
8254的工作方式及端口寻址方式如下
方式0---计数结束产生中断;方式1---可编程单稳;
方式2---频率发生器;方式3---方波发生器;
方式4---软件触发选通;方式5---硬件触发选通。
8254内部有3个计数器:
可选择计数器0、可选择计数器1、可选择计数器2,还有一个控制寄存器,它们由程序寻址。
具体的寻址方式如下:
A1A0选择
00可选择计数器0
01可选择计数器1
10可选择计数器2
11控制寄存器
8254的控制字格式如下图2.3所示。
7
6
5
4
3
2
1
0
图2.38254的控制字格式
三硬件接线图及流程图
3.1硬件接线图
系统的连线图主要由四个部分构成。
系统总线、8255并口控制器、键盘及数码管显示单元、8254芯片。
具体连接线如图3.1所示。
图3.1硬件接线图
3.2流程图
主程序的流程图是对整个程序的逻辑的图象表示。
形象的描述了整个系统的工作过程。
流程图如图3.2所示。
图3.2系统实现流程图
3.3键盘值对应图
右图Y组对应8255芯片的A口(Y值为1)与+5V连L1L2L3L4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Y1
X组对应8255芯片的B口(X值为0)
当有键按下时如5键,其对应的Y值Y2
Y2为0,则8255芯片由A口输入的数Y3
值为1101给AL。
Y4
X1X2X3X4
图3.3键盘值对应图
四简易电子琴设计源程序及注释
MY8255_AEQU0600H
MY8255_BEQU0602H
MY8255_CEQU0604H
MY8255_MODEEQU0606H
MY8254_MODEEQU06C6H
MY8254_BEQU06C2H;进行宏定义
DATASEGMENT
FREQ_LISTDW441D,495D,556D,589D,661D,742D,833D,882D,
262D,294D,330D,373D,402D,450D,494D,-1D
DATAENDS;建立数据段
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX;实现段寄存器DS的初始化
MOVDX,MY8255_MODE
MOVAL,90H
OUTDX,AL;写8255芯片的控制字,实
现工作在方式0,B端口输出,A端口输入
MOVDX,MY8254_MODE
MOVAL,76H
OUTDX,AL;使8254工作在方式3,A
口输入,运用计数器1,二进制方式
BEGIN:
CALLCCSCAN;键盘扫描
JNZINK1;有键按下时跳到INK1
JMPBEGIN;没见按下时循环执行
BEGIN
;========================================
;确定按下键的位置
;========================================
INK1:
CALLCCSCAN
JNZINK2;有键按下时跳到INK2
JMPBEGIN;没见按下时循环执行BEGIN
INK2:
MOVCH,0FEH;确定按下键在第一列
MOVCL,00H;从第一列开始测试,CL设初
;值为零
COLUM:
MOVAL,CH
MOVDX,MY8255_B;将8255的B口地址赋给DX
OUTDX,AL;将CPU中的AL值送到8255
的B口中,即送到X1、X2、
X3、X4中
MOVDX,MY8255_A;将8255的A口地址赋给DX
INAL,DX;将A口的值送到AL中
L1:
TESTAL,01H;检验按下键是否在L1
JNZL2;不是L1则跳到L2
MOVAL,00H;为了后面用来与FREQ_LIST
数据段中数对应
JMPKCODE;强制跳转到KCODE
L2:
TESTAL,02H;检验按下键是否在L2
JNZL3;不是L2则跳到L3
MOVAL,04H;为了后面用来与FREQ_LIST
数据段中数对应。
JMPKCODE;强制跳转到KCODE
L3:
TESTAL,04H;检验按下键是否在L23
JNZL4;不是L3则跳到L4
MOVAL,08H;为了后面用来与FREQ_LIST
数据段中数对应。
JMPKCODE;强制跳转到KCODE
L4:
TESTAL,08H;检验按下键是否在L4
JNZNEXT;不是L4则跳到NEXT
MOVAL,0CH;为了后面用来与FREQ_LIST
数据段中数对应。
KCODE:
ADDAL,CL;键盘的行值加列值得到键位数0~~F
MOVBL,AL;把AL里的值先存入BL中
MOVDL,2D;乘2得双字节DW音频表中的
MULDL;偏移地址
PLAY:
MOVSI,OFFSETFREQ_LIST;使SI指向FREQ_LIST的首地址
;取音频表数据
ADDSI,AX;通过SI加AX实现指针SI的移动
MOVDX,0FH;把1MHZ的时钟频率换成16
;进制
MOVAX,4240H;被除数为0F4240H
DIVWORDPTR[SI];除数为SI所指的数据
MOVDX,MY8254_B;时钟频率除以音符频率得到计数
;器初值
OUTDX,AL;把计数器初值给8254A口输
MOVAL,AH;出,先低后高双字节输出
OUTDX,AL
MOVAL,BL;把刚才存入BL中的数存入AL中
CMPAL,08H;用键盘的按键值与8比较,使高
JGCY;音发短音,低音发长音
MOVCX,32H
JMPNEXT3
CY:
MOVCX,5FH
NEXT3:
CALLDALLY;调用延时子程序DALLY
LOOPNEXT3;CX不为0重复执行NEXT3
MOVDX,0FH
MOVAX,4240H;被除数为0F4240H
MOVSI,30D
DIVWORDPTR[SI];除数为SI=30所指的数据
MOVDX,MY8254_B;用时钟频率除以-1得到极大的初
OUTDX,AL;值通过A口发出超高频率的方波,
MOVAL,AH;扬声器发出人耳听不到的声音
OUTDX,AL;实现静音,结束一个音符的发音
JMPBEGIN;跳转到BEGIN,重复扫描
NEXT:
INCCL;使CL加1,为了后面用来与
FREQ_LIST数据段中数对应
MOVAL,CH
TESTAL,08H
JZKERR;无键按下时跳转到KERR
ROLAL,1D;向左移位,准备测试第二列
MOVCH,AL
JMPCOLUM;强制跳转到COLUM
KERR:
JMPBEGIN;跳到BEGIN重新开始扫描
;========================================
;键盘扫描子程序
;========================================
CCSCAN:
MOVAL,00H
MOVDX,MY8255_B
OUTDX,AL;使8255芯片B端口输出
为0,既使X1、X2、X3、X4为0
MOVDX,MY8255_A
INAL,DX;由A口接收响应电平信号
NOTAL;将AL取反
ANDAL,0FH;与0FH与,结果不为零则继续
RET
;=====================================
;延时子程序
;=====================================
DALLY:
PUSHCX;将CX压栈
MOVCX,000FH
T1:
MOVAX,009FH
T2:
DECAX;使AX减1
JNZT2;AX不为0重复T2
LOOPT1;CX不为0重复T1
POPCX;将CX出栈
RET
CODEENDS;代码段定义结束
ENDSTART;程序结束
总结
一周的课程设计就在匆匆忙忙之间走过了,现在那种忙碌的心情还没有平息,总感觉自己还在课设之中,紧张的神经似乎并没有随着课设的结束而结束。
这一周的课程设计颇有收获,最重要的是让我能够更深刻的理解了书本上的知识,而且实际中的运用使得那些知识像活了一样地映入我的脑海。
对于8254和8255等芯片我原来只是会对他们进行简单的功能实现,并不能将各个芯片联合起来应用。
刚开始进行课设的时候,看着那一片芯片实在不知道该怎么下手。
后来经过老师的热心指导、同学们的帮助、自己的研究我有了自己的思路,将课设进行了下去。
我的思路大概是这样的:
调整8254及8255的工作方式,并且进行编程,然后连线。
使得键盘按下的键传到8255中然后8255将信号能传到CPU里,通过CPU的计算控制8254芯片,最后8254芯片发出一定频率的方波传到发声装置,从而发出声音。
在设计的过程中,每当有一个新想法我就会进行实验,虽然失败的多成功的少,但我还是从中获得了知识,每当有新的想法,我都努力去尝试,不管最后自己的设想是否正确,我都有所收获。
而且再多的失败也打不倒我,因为我知道失败乃成功之母,实践出真知,只有在风雨过后的彩虹才是美丽的!
就这样,在多次的实验之后,我做出了自己的作品。
尽管还有些差强人意,但它还是我一点一滴做出来的。
一周的课程设计终于圆满的结束了,兴奋之余,我觉得这是我收获最多的一个课程设计。
因为原来的我真的是一个门外汉,通过老师的悉心讲解和自身的不断努力,反复查阅书籍,终于没有白白浪费这一周的时间,充实了自己。
感谢老师的谆谆教诲和悉心的指导,使我更好的掌握了所学的知识,并为以后的学习打下了坚实的基础。
虽然我的课程设计结束了,但我对微机原理的学习还仅仅只是个开始,在今后的学习中,我会更加努力,在老师的带领下学好这门深奥的学科。
参考文献
[1]李伯成等《微型计算机原理及应用》陕西:
西安电子科技大学出版社,2006
[2]李兰友等《微型计算机原理与接口技术》北京:
清华大学出版社,2003
[3]郑学坚等《微型计算机原理及应用实验指导》北京:
清华大学出版社,2002
[4]朱玉春等《微机原理与接口技术》辽宁:
大连理工大学出版社,2004
[5]仇玉章等《微型计算机技术实验及指导教程》北京:
清华大学出版社,2003
[6]戴梅萼等《微型计算机技术及应用》北京:
清华大学出版社,2003