可存储式电子琴的设计.doc
《可存储式电子琴的设计.doc》由会员分享,可在线阅读,更多相关《可存储式电子琴的设计.doc(46页珍藏版)》请在冰点文库上搜索。
中国矿业大学计算机学院信息安全10-4班硬件课程设计——电子琴
计算机科学与技术学院
硬件课程设计
个人报告
姓名:
王向阳张奥
学号:
班级:
信安10-4班
设计题目:
可存储式电子琴
指导教师:
王凯
二〇一二年十二月二十七日
课程设计指导教师评阅书
指导教师评语:
成绩:
指导教师签字:
年月日
摘要
在这次的硬件实验中,我们利用学习的微机原理与接口技术这门课程课上我们学到的一些计算机硬件工作的基本原理,汇编语言程序设计方法,微型计算机接口技术,建立微型计算机系统的整体概念,初步形成微机系统软硬件开发的能力。
为了能够学以致用,同时也为了更深入的了解熟悉可编程定时器8253和8279。
在汇编语言环境下,利用上述两种芯片,编程让8279通过识别键盘产生键值,8253识别发声从而实现计算机按照按键的不同而发出不同频率的声音。
可存储式电子琴可用于设计小型发声玩具,由于本电子琴设计简单,稍加修改便可用于其它地方,如报警防盗器部件,音乐门铃等,具有一定的商业价值。
本次硬件课程设计课程,是配合上学期《微型计算机原理与接口技术》的教学,也是要让我们能够更深入的认识接口芯片技术以及汇编编程,做到理论和实践相结合。
在课程中,我们选择的设计项目是“可存储式电子琴”:
一个简易的电子琴设备。
要求我们利用相关已经学过的和没有学过的芯片连接成一个电子电路,并且通过自己用汇编语言编程,控制设计的电子电路实现电子琴的一些功能,比如:
能够对于输入发出相应的单声;能够演奏一小段已经编好了的乐曲。
关键词:
可存储电子琴82798253门控信号程序代码
目录
1开发背景 3
2产品功能及涉及的芯片和硬件 3
2.1功能简介 3
2.2使用的主要芯片及元件 3
2.3各音阶频率值 3
2.4可编程计数器/定时器8253 4
2.4.18253内部结构和引脚 4
2.4.28253方式控制字格式 5
2.4.38253的工作方式3—方波发生器 5
2.4.4本设计中8253的功能 6
2.5可编程键盘—接口显示芯片8279 6
2.5.18253内部结构和引脚 7
2.5.28279的工作方式 8
2.5.38279的命令字及格式 10
2.5.4本设计中8279的功能 11
3实验中所遇到的问题 11
4实验程序 11
5实验感悟 15
6参考文献 17
1.开发背景
上学期刚刚结束《微型计算机原理与接口技术》课程,本学期为了进一步熟悉和掌握汇编语言,通过选择课题的方式让学生单独分析和实现课题,来加强学生的动手实践能力和独立思考的能力。
2.产品功能及涉及的芯片和硬件
2.1功能简介
按下键盘的A,B,C键实现对键盘高音,中音,低音的选择,按下1-7号键实现do-xi的发音,当按下D键时,可以通过A,B,C选择高音中音低音的预置音乐播放
2.2使用的主要芯片及元件
(1)各芯片及器件地址:
8279的控制端地址为:
20AH,数据端地址为:
208H。
8253的控制端地址为:
213H,数据端地址为:
210H。
I/O输出的地址为:
200H
(2)按键说明:
1——dou音2——ruai音3——mi音4——fa音5——sao音
6——la音7——xi音A——高音转换键
B——中音转换键C——低音转换键D——放音键
芯片:
一片8253(有详细介绍)
一片8279
IO芯片
元件:
蜂鸣器
2.3个音阶频率
使用8279芯片的键盘控制器,通过查看寄存器,读出分别按下不同的键时对应的寄存器值(这里只给出当按下1---7和A、B、C、D键的寄存器值,如图)。
按键
1
2
3
4
5
6
7
A
B
C
D
寄存器键值
02H
0AH
22H
01H
09H
21H
00H
07H
29H
28H
2BH
当某一时刻按下一个键的时,可以通过和各键的寄存器值比较来判断按下键。
又每个音阶都有一个确定的频率。
音阶
1
2
3
4
5
6
7
高音频率(HZ)
552
1812
587
1704
659
1517
700
1429
784
1276
880
1136
988
1012
中音频率(HZ)
262
294
330
349
392
440
494
低音频率(HZ)
131
7634
147
6803
165
6060
175
5714
196
5102
220
4545
247
4049
可以通过各音阶的对应频率值为8253赋初值,然后输出到音响设备,以产生相应音阶的发音。
在发音过程中,可分别为8253的GATE0端输入0和1来控制开始发音和停止发音。
本实验我们对于8253输入频率选择的是1MHz,故,由每个音阶的对应的频率可求出8253输入的计数值。
音阶
1
2
3
4
5
6
7
高音频率(HZ)
1812
1704
1517
1429
1276
1136
1012
中音频率(HZ)
3817
3401
3030
2865
2551
2273
2024
低音频率(HZ)
7634
6803
6060
5714
5102
4545
4049
3.总体设计
3.1电路原理图与说明
实物图:
IO输出
CS
CLK0
8253
GATE0
OUT0
CS
1MHz
1MHz
扬声器
200-207H208-20AH210-213H
8279芯片
5.2功能模块流程图
开始
8259初始化
8253初始化
置空寄存器
有键按下?
N
是A
转入高音区
Y
Y
转入中音区
是B
Y
是1
N
Y
是2
NY
是3
NY
是4
N
NY
是5
Y
是6
NY
是7
N
给8253赋对应初值
NY
音响发音
延时
预置音乐程序流程图:
8259初始化
开始
8253初始化
置空寄存器
有键按下?
N
是D?
N
Y
是C?
是B?
是A?
低音
中音
高音
给8253赋对应初值
音响发音
延时
2.4可编程计数器/定时器8253
2.4.18253内部结构和引脚
8253的内部结构
从上图可见,8253内部包含数据总线缓冲器、读/写控制逻辑、控制字寄存器和3个结构完全相同的计数器,这3个计数器分别称为计数器0、计数器1和计数器2。
8253的引脚
A1、A0:
地址输入线,用来址8253内部的4个端口,即3个计数器和1个控制字寄存器与CPU系统地址线相连。
CLK0-2:
时钟脉冲输入端,用于输入定时脉冲或计数脉冲信号。
CLK可以是系统的时钟脉冲,也可以由系统时钟分频或者其他脉冲源提供。
当用于定时时,这个脉冲必须是均匀的、连续的、周期精确的,而用于计数时,这个脉冲可以是不均匀的、断续的、周期不定的。
GATE0-3:
门控输入端,用于外部控制计数器的启动计数和停止计数的操作。
两个或两个以上计数器连用时,可用此信号同步,也可用于与外部某信号的同步。
OUT0-2:
计数输出,当计数器从初值开始完成计数操作进,OUT引脚输出相应的信号。
2.4.28253方式控制字格式
D7
BCD
SC1
SC0
RL1
RL0
M2
M1
M0
D6
D5
D4
D3
D2
D1
D0
00选择计数器0
01选择计数器1
10选择计数器2
11无效
00计数器锁存操作
01只读/写LSB
10只读/写MSB
11读/写LSB、MSB
0二进制数
1BCD
000模式0
001模式1
x10模式2
x11模式3
100模式4
101模式5
图2-38253的方式控制字
2.4.38253的工作方式3——方波发生器
方式3的波形如下图所示,它的特点是:
(1)输出为周期性的方波。
若计数值为N,则输出方波的周期是N个CLK脉冲的宽度。
(2)写入控制字后,输出将变为高电平,当写入计数初值后,就开始计数,输出仍为高电平;当计数到初值的一半时,输出变为低电平,直至计数到0,输出又变为高电平,重新开始计数。
(3)若计数值为偶数,则输出对称方波;如果计数值为奇数,则前(N+1)/2个CLK脉冲期间输出为高电平,后(N-1)/2个CLK脉冲期间输出为低电平。
(4)GATE信号能使计数过程重新开始,GATE=1允许计数,GATE=0禁止计数。
停止后OUT将立即变高电平,当GATE再次变高以后,计数器将自动装入计数初值,重新开始计数。
8253工作方式3波形
2.4.4本设计中8253的功能
8253的CLK0接1MHz时钟,GATE0接+5V,OUT0接蜂鸣器,编程使计算机的数字键0、1、2、3、4、5、6作为电子琴按键,按下即发出相应的音阶。
本次实验用到的是8253的方式3——方波发生器。
2.5可编程键盘——接口显示芯片8279
2.5.18253内部结构和引脚
8279引脚图
8279是可编程的键盘、显示接口芯片。
它既具有按键处理功能,又具有自动显示功能,在单片机系统中应用很广泛。
8279内部有键盘FIFO(先进先出堆栈)/传感器,双重功能的8*8=64BRAM,键盘控制部分可控制8*8=64个按键或8*8阵列方式的传感器。
该芯片能自动消抖并具有双键锁定保护功能。
显示RAM容量为16*8,即显示器最大配置可达16位LED数码显示。
1)数据线
DB0→DB7是双向三态数据总线,在接口电路中与系统数据总线相连,用以传送CPU和8279之间的数据和命令。
2)地址线
/CS=0选中8279,当A0=1时,为命令字及状态字地址;当A0=0时,为片内数据地址,故8279芯片占用2个端口地址。
3)控制线
CLK:
8279的时钟输入线。
IRQ:
中断请求输出线,高电平有效。
/RD、/WR:
读、写输入控制线。
SL0---SL3:
扫描输出线,用来作为扫描键盘和显示的代码输出或直接输出线。
RL0---RL7:
回复输入线,它们是键盘或传感器矩阵的信号输入线。
SHIFT:
来自外部键盘或传感器矩阵的输入信号,它是8279键盘数据的次高位即D6位的状态,该位状态控制键盘上/下档功能。
在传感器方式和选通方式中,该引脚无用。
CNTL/S:
控制/选通输入线,高电平有效。
键盘方式时,键盘数据最高位(D7)的信号输入到该引脚,以扩充键功能;选通方式时,当该引脚信号上升沿到时,把RL0---RL7的数据存入FIFORAM中。
OUTA0---OUTA3:
通常作为显示信号的高4位输出线。
OUTB0---OUTB3:
通常作为显示信号的低4位输出线。
/BD:
显示熄灭输出线,低电平有效。
当/BD=0时将显示全熄灭。
8279对显示RAM的读/写操作
如果采用非地址自动增加方式对显示RAM进行读/写操作,则每次读/写前都需要通过“读显示RAM命令字”或“写显示RAM命令字”设置显示RAM的地址。
而采用地址自动增加方式,只需设置起始地址,之后地址会自动增加。
2.5.28279的工作方式
8279有三种工作方式:
键盘方式、显示方式和传感器方式。
1)键盘工作方式
8279在键盘工作方式时,可设置为双键互锁方式和N键循回方式。
双键互锁方式:
若有两个或多个键同时按下时,不管按键先后顺序如何,只能识别最后一个被释放的键,并把该键值送入FIFORAM中。
N键循回方式:
一次按下任意个键均可被识别,按键值按扫描次序被送入FIFORAM中。
2)显示方式
8279的显示方式又可分为左端入口和右端入口方式。
显示数据只要写入显示RAM,则可由显示器显示出来,因此显示数据写入显示RAM的顺序,决定了显示的次序。
左端入口方式即显示位置从显示器最左端1位(最高位)开始,以后显示的字符逐个向右顺序排列;右端入口方式即显示位置从显示器最右端1位(最低位)开始,已显示的字符逐个向左移位。
但无论左右入口,后输入的总是显示在最右边。
3)传感器方式
传感器方式是把传感器的开关状态送入传感器RAM中。
当CPU对传感器阵列扫描时,一旦发现传感器状态发生变化就发出中断请求(IRQ置1),中断响应后转入中断处理程序。
2.5.38279的命令字及格式
a.8279内部时钟设置命令字
001D4D3D2D1D0
高三位为本命令字特征位,第五位用于设定对外部时钟CLK的分频值。
b.读显示RAM命令字
011AID3D2D1D0
高三位为本命令字特征位
AI:
地址增加位,AI=1时,每读出一个字节后地址会自动加1,可继续读下一位字节单元的内容,而不必重写读命令。
低四位为显示RAM地址,从0000到1111共16个。
c.写显示RAM命令字
100AID3D2D1D0
高三位为本命令字特征位
AI:
地址增加位,AI=1时,每写入一个字节后地址会自动加1,可继续写下一位字节单元的内容,而不必重写读命令。
低四位为显示RAM地址,从0000到1111共16个。
2.5.4本设计中8279的功能
利用8279的键盘处理功能,连接键盘实现按键输入频率发生功能
4.实验中所遇到的问题
在实验过程中,对于电子琴发生原理不太熟悉,所以一开始一直不知道怎么下手。
对于8279因为有彩灯的基础所以还比较顺手。
实验时一直发音不准,原因在于对于发音频率一直没有输入正确,对于8253的工作方式没有弄明白。
但是在老师同学的帮助下还是解决了问题。
5.实验程序
Z8279EQU212H
D8279EQU210H
LEDMODEQU00H;左边输入,八位显示外部译码八位显示
LEDFEQEQU38H;扫描频率
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE
START:
MOVDX,Z8279 ;8279初始化
MOVAL,00H
OUTDX,AL
MOVAL,38H
OUTDX,AL
MOVDX,20BH ;8253初始化
MOVAL,B
OUTDX,AL
PUSHCS
POPDS
MOVDX,Z8279
MOVAL,LEDMOD
OUTDX,AL
MOVAL,LEDFEQ
OUTDX,AL
MOVDX,D8279
MOVAL,7FH
OUTDX,AL
MOVDX,D8279
MOVAL,7FH
OUTDX,AL
MOVDX,D8279
MOVAL,7DH
OUTDX,AL
MOVDX,D8279
MOVAL,7FH
OUTDX,AL
MOVDX,D8279
MOVAL,70H
OUTDX,AL
MOVDX,D8279
MOVAL,5bH
OUTDX,AL
MOVDX,D8279
MOVAL,70H
OUTDX,AL
MOVDX,D8279
MOVAL,76H
OUTDX,AL ;以上为写(AEDK8688)
NOP
PD:
MOVDX,200H
MOVAL,00H
OUTDX,AL
MOVAL,00H
MOVDX,Z8279
MOVAL,0C2H
OUTDX,AL ;置空FIFO寄存器
WAIIT:
NOP
INAL,DX
MOVBL,AL
ANDAL,80H
CMPAL,80H
JEWAIIT ;FIFO正在清除期间则跳转等待
MOVAL,BL
ANDAL,0FH
CMPAL,00H
JEWAIIT
;MOVAL,40H;写读FIFORAM命令字(问题出在这里)
;OUTDX,AL
;MOVDX,D8279;读入FIFORAM内容
;INAL,DX
;无键按下则等待
NOP ;查表,将键码放入AL中
LEABX,LED
XLAT
MOVDX,D8279 ;将AL中内容写到数码管上
OUTDX,AL
MOVAL,00H
MOVDX,D8279;判断是哪个键
INAL,DX
MOVBL,AL
MOVDX,Z8279;清FIFORAM寄存器
MOVAL,0C2H
OUTDX,AL
MOVAL,BL
CMPAL,28H;高音跳转
JEGG1
CMPAL,02H
JEB1
CMPAL,0AH
JEB2
CMPAL,22H
JEB3
CMPAL,01H
JEB4
CMPAL,09H
JEB5
CMPAL,21H
JEB6
CMPAL,00H
JEB7
B1:
MOVDX,208H
MOVAL,24H
OUTDX,AL
MOVAL,38H
OUTDX,AL
CALLDELAY
JMPPD
B2:
MOVDX,208H
MOVAL,07H
OUTDX,AL
MOVAL,34H
OUTDX,AL
CALLDELAY
JMPPD
B3:
MOVDX,208H
MOVAL,34H
OUTDX,AL
MOVAL,30H
OUTDX,AL
CALLDELAY
JMPPD
B4:
MOVDX,208H
MOVAL,65H
OUTDX,AL
MOVAL,28H
OUTDX,AL
CALLDELAY
JMPPD
GG1:
JMPGG;中转一下
MM:
JMPWAIIT
B5:
MOVDX,208H
MOVAL,51H
OUTDX,AL
MOVAL,25H
OUTDX,AL
CALLDELAY
JMPPD
B6:
MOVDX,208H
MOVAL,72H
OUTDX,AL
MOVAL,22H
OUTDX,AL
CALLDELAY
JMPPD
B7:
MOV