资源描述
汇编语言,单片机设计简易电子琴
———————————————————————————————— 作者:
———————————————————————————————— 日期:
2
个人收集整理 勿做商业用途
学科基础课硬件课程设计
设计说明书
模拟电子琴设计
学生姓名
闵杉
学号
0718042014
班级
专升本071
成绩
指导教师
朱涛
计算机科学与技术系
2008年9月26日
学科基础课硬件 课程设计评阅书
题目
模拟电子琴设计
学生姓名
闵杉
学号
0718042014
指导教师评语及成绩
指导教师签名:
年 月 日
答辩评语及成绩
答辩教师签名:
年 月 日
教研室意见
总成绩:
教研室主任签名:
年 月 日
课程设计任务书
2007—2008学年第二学期
专业: 计算机科学与技术 学号: 0718042014 姓名: 闵杉
课程设计名称: 学科基础课硬件课程设计
设计题目: 学科基础课硬件课程设计
完成期限:自 2008 年 月 日至 2008 年 月 日共 2 周
设计依据、要求及主要内容(可另加附页):
设计内容:用开关模拟电子琴发声
设计任务: 根据所学的微机原理及应用设计一个用开关模拟电子琴发生的程序.
设计目的与要求:开发学生的创新意识,巩固了解汇编语言知识并要掌握8255,8253芯片的使,并熟悉DICE-8086K实验系统.
指导教师(签字): 教研室主任(签字):
批准日期: 年 月 日
摘 要
本设计以8086作为处理器,以8253控制扬声器,并以8255接8个开关K1~K8作为电子琴的按键输入,并利用8253产生一定频率与持续时间的脉冲信号经驱动电路放大后,根据按键K2~K8改变脉冲频率和脉冲持续时间从而使扬声器发出7种不同的音调,从而实现了一个模拟电子琴。该电子琴能实现基本的音调发音,报告的最后对整个设计过程进行了总结。
关键词: 8253芯片;8255芯片;8086cpu;汇编语言
目 录
1 课题描述 1
1.1 DICE-8086k试验系统 1
1。2 8255与8253结构 1
1.3功能说明 4
2 设计过程 6
2。1硬件设计 6
2.2软件设计 6
2.3系统原理说明 7
3 测试 9
总 结 10
附录代码 11
参考文献 13
1 课题描述
随着社会发展,计算机硬件技术越来越多的应用到生活中的各个领域,人们对软硬件技术结合开发出来的产品的要求越来越迫切,需求日益增加,如今用软硬件结合设计电子产品已经成为了一大时尚。本设计编写的一个用开关模拟电子琴的程序,以8086作为处理器,用8255接八个开关K1~K8,做电子琴按键输入,以8253控制扬声器,拨动不同的开关,发出相应的音阶.其中K1代表静音,K2发si的音,K3发la的音,K4发sol的音, K5发fa的音, K6发mi的音,K7发re的音,K8发do的音.
开发工具:汇编语言 ;DICE—8086K实验系统。
1。1 DICE-8086k试验系统
8086k试验系统软硬件配置完善,实验电路采用分模块,开放型设计,使实验电路配置灵活,用户可直接运用。系统的主要特点:
1)采用主频为4。77mhz的8086cpu为主cpu,并以最小工作方式构成系统
2)配有两片61c256静态ram构成系统的64k基本内存,地址范围为00000h-0ffffh,其中00000h-oofffh监控占用.
3)自带键盘,显示器,能够独立运行,为实验程序调试带来方便.
4)提供标准rs232异步通讯口,以连接IBM—PC机。
5) 支持联机与脱机二种工作方式,系统扩展有EPROM,把所有实验程序都固化在该片中,脱机工作时,只需按一键,即可完成实验程序下载。调用实验程序只须在实验仪键盘输入实验程序入口地址,按[EXEC]键即可,非常便捷。
图1.1 8086cpu引脚图
1.2 8255与8253结构
1) 8255是一个40引脚的双列直插式集成电路芯片。它具有三个8位口,其中A口和B口是单纯的数据口,供数据I/O使用。而C口则既可以作数据口,又可以作控制口使用,用于实现A口和B口的控制功能。
2)数据传送中A口所需的控制信号由C口高位部分(PC7~PC4)提供,因此把A口和C口高位部分合在一起称之为A组;同样理由把B口和C口低位部分(PC3~PC0)合在一起称之为B组。
图1。2 8255引脚图
图1.3 8255内部结构图
3) 8253是24脚双列直插式芯片,+5V电源供电。每个芯片内部有3个独立的计数器(计数通道),每个计数器都有自己的时钟输入CLK,计数输出OUT和门控信号GATE.
数据总线D0~D7:为三态输出/输入线。片选信号CS,读信号RD,写信号WR,他们为输入信号,低电平有效。地址线A1、A0,接到系统总线A1、A0上。计数器时钟信号CLK,作用是在8253进行定时或计数工作是,每输入1个时钟脉冲信号CLK,便使计数值减1。
计数器门控选通信号GATE,计数器输出信号OUT,作用是计数工作时,每来1个时钟脉冲,计数器减1,当计数器值减为0,就在输出线上输出一OUT信号,以示定时或计数以到。
图1.4 8253引脚图
4)8253/8254内部有6个模块:数据总线缓冲器,读/写逻辑,控制命令寄存器,计数器0,计数器1,计数器2
数据总线缓冲器:3态,双向8位寄存器和D0~D7相连.
读/写逻辑:由CPU发来的读/写信号和地址信号来选择读出或写入寄存器。
控制命令寄存器:接受CPU来控制字。
计数器:8253有3个结构完全相同的计数器。其内部由16为初值寄存器、减1计数器和当前计数值锁存器组成.
图1。5 8253内部结构图
1.3功能说明
1)开关控制:8255端口A工作在方式0,且为输入方式,端口B、C任意。开关接在8255端口A的PA0~PA7,这样就可以通过8255读取开关量。如下图:
D7-D0
___
RD
WR
A0
A1
8086
A2
A3.
A4.
A5.
A15
M/IO
D7-D0 PA0
___ PA1
RD PA2
WR PA3
A0 PA4
A1 PA5
8255A
__ PA6
CS PA7
译码器
图1.6开关控制图
2)扬声器控制:(1)8253计数器2的输出控制扬声器的发声音调(2)8253计数器2只能工作在方式3,才能输出一定频率的方波,经滤波后得到近似的正弦波,进而推动扬声器发声(3)扬声器还受控于并行接口(8255A芯片)(4)必须使8255APB0和PB1同时为高电平,扬声器才能发出预先设定频率的声音;关闭则是利用8255APB0和PB1同时为低电平,关闭与门,扬声器关闭。
CLK2
OUT2
8253
GATE2
PB0 PB1
8255A
&
滤波器
功
放
图1.7 扬声器控制图
2 设计过程
本次设计的模拟电子琴是以8253控制扬声器,以8255接8个开关K1—K8作为电子琴的按键输入。
2.1硬件设计
采用并口8255A接8个开关K1-K8,利用8255A方式0,端口A输入方式,即AL=10010000B,可以将开关的量输入到CPU中,利用8个开关做电子琴的8个按键。
驱动控制扬声器利用8253与8255A共同执行(如图2。1)。利用8255A的PB0、PB控制扬声器的开启、关闭.利用定时器8253驱动发声,CPU通过对8253通道2(端口地址42H)进行编程,利用8253方式3以不同的脉冲频率产生不同的输出方波,方波信号通过滤波器、功率放大器使扬声器发声。
D7-D0
___
RD
WR
A0
A1
8086
A2
A3
A4
A5
A15
M/IO
D7-D0
___
RD CLK2
WR
A0 OUT2
A1
8253
GATE2
__
CS
D7-D0 PB0
PB1
___
RD PA0
PA0 PA1
WR PA2
A0 PA3
A1
8255A
PA4
__ PA5
CS PA6
PA7
&
滤波器
功放
译码器2
译码器
1
图2.1 硬件电路连接图
2。2软件设计
利用汇编语言对接口进行编程控制。程序模块主要包括8255A、8253的初始化、开关量的输入、扬声器的开启、关闭及程序的退出。在使8253的初值计数与频率相对应有两种方法,一是利用表的操作,但这种操作不太容易实现,硬件的连接也比较麻烦,易出错;所以我采用的是比较跳转的方式, 比较简单明了,容易理解。程序中的模块关系见程序流程图。
开 始
8255A初始化
开关输入
由AL的不同跳转到相应8253初始化
打开扬声器
关闭扬声器
计数值装人8253
返回DOS
结 束
图2。2 程序流程图
2。3系统原理说明
1)利用8个逻辑开关做为电子琴的键盘输入,高电平有效,则开关量由8255A的端口A方式0,输入方式(控制字AL=10010000B)送入CPU中.此时调用的是7号系统功能调用,从标准设备输入单字符置入AL寄存器中,调用格式为:
MOV AH,07H
INT 21H
2)CPU根据不同的开关量,将程序跳转到相应频率对应的8253的初始化,并给8253赋上频率对应的初始值,此时利用的是8253的通道2,方式3,产生不同频率的方波。代码如下:
MOV AL,0B6H
OUT 43H,AL
MOV AX,计数值
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
3)要使8253OUT发出的方波频率与任务中的频率相同,则要给8253设置计数值,计算方法为:
计数值=输入时钟频率/任务要求频率
然后CPU将8255A的PB0、PB1置1,打开8253的GATE和与门(图2。1)。代码如下:
IN AL,61H
OR AL,03H
OUT 61H,AL8253
4)产生的方波信号通过滤波器形成正弦信号,然后通过功率放大器,将正弦信号放大,驱动扬声器发声。
再然后CPU将8255A的PB0、PB1置0,关闭扬声器。代码如下:
IN AL,61H
AND AL,0FCH
OUT 61H,AL
再次输入开关量,则循环执行上面过程。
5)当输入为PC键盘任意键输入时,则整个程序退出.此时是调用的6号和4CH号系统功能调用,系统输入键盘任意键,返回DOS.调用格式为:
MOV DL,0FFH
MOV AH,6
INT 21H
MOV AH,4CH
INT 21H
3 测试
接通电路之后,按下开关键,依次拨动各个开关来控制作为扬声器的8253发声,发出静音、Si、La、Sol、 Fa、Mi、Re、Do音调。
表3.1 音阶频率表
音阶
静音
Si
La
Sol
Fa
Mi
Re
Do
频率
0
493
440
392
349
329
293
241
计数值
0
2420
2712
3044
3419
3627
4072
4572
由于每个开关的音调发音时间有软件延时控制,所以当开关打开时,就会连续发出音节标称频率的声音。
整体进行硬件电路图和软件测试, 把所需程序进行输入一切运行良好,可以完成模拟电子琴,通过开关键实现产生不同音节频率的功能
9
总 结
通过这两周的硬件课程设计,我对微机原理及应用这门课有了更深的认识,系统的掌握了微机原理及接口的应用知识。
这次课程设计我做的是用开关模拟电子琴发声。在老师确定题目后,我便去图书馆查阅了大量的关于开关输入和发声程序设计的书籍,然后确定好自己的方案,对自己的设计有了一个大概的思路。通过编程,我学会了如何独立的写出程序,提高了自己的分析解决问题的能力,并且使自己所学的知识与实践相结合,应用到实践当中。课程设计中涉及到许多接口芯片,使我对这些芯片有了更深的认识,对芯片的各种工作方式有了更深的理解,虽然没有进行硬件的调试,但通过设计,我也学到了很多书本上没有的知识.在设计当中遇到了很多的问题,但通过查找资料,克服了这些问题,提高了自己在实际当中解决问题的能力。
虽然此次课程设计的过程是艰辛的,但结果还是令我比较欣慰的。在此特别感谢老师对我的指导.
附录代码
STACK SEGMENT STACK
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE
START: MOV DX,63H
MOV AL,90H
OUT DX,AL ;8255A初始化
INPUT: MOV DX,60H
IN AL,DX ;8255A端口A输入
MOV AH,07H
INT 21H ;从开关输入信号
CMP AL,00000001B
JZ K1
CMP AL,00000010B
JZ K2
CMP AL,00000100B
JZ K3
CMP AL,00001000B
JZ K4
CMP AL,00010000B
JZ K5
CMP AL,00100000B
JZ K6
CMP AL,01000000B
JZ K7
CMP AL,10000000B ;判断从哪个开关输入并跳
JZ K8 ;转到相应8253初始化
MOV DL,0FFH
MOV AH,6
INT 21H
MOV AH,4CH ;键盘任意输入则退出程
INT 21H ;序,返回DOS
K1: MOV AL,0B6H
OUT 43H,AL
MOV AX,0
JMP SING
K2: MOV AL,0B6H
OUT 43H,AL
MOV AX,2420
JMP SING
K3: MOV AL,0B6H
OUT 43H,AL
MOV AX,2712
JMP SING
K4: MOV AL,0B6H
OUT 43H,AL
MOV AX,3044
JMP SING
K5: MOV AL,0B6H
OUT 43H,AL
MOV AX,3419
JMP SING
K6: MOV AL,0B6H
OUT 43H,AL
MOV AX,3627
JMP SING
K7: MOV AL,0B6H
OUT 43H,AL
MOV AX,4072
JMP SING
K8: MOV AL,0B6H
OUT 43H,AL ;8253初始化
MOV AX,4572 ;并给AX赋
JMP SING ;值
SING: OUT 42H,AL
MOV AL,AH
OUT 42H,AL ;传送计数值到8253
IN AL,61H
OR AL,03H
OUT 61H,AL ;打开扬声器
IN AL,61H
AND AL,0FCH
OUT 61H,AL ;关闭扬声器
JMP INPUT ;跳转到INPUT
CODE ENDS
END START
12
参考文献
[1] 郑坤.微型计算机技术实验指导书。2007。
[2] 戴梅萼,史嘉权.微型计算机技术与运用。清华大学出版社2003。
[3] 王爱英。计算机组成与结构。北京. 清华大学出版社.1995。
[4] 沈美明,温冬蝉.IBM—PC汇编语言程序设计.北京。清华大学出版社。2003.
13
展开阅读全文