1、汇编语言,单片机设计简易电子琴 ———————————————————————————————— 作者: ———————————————————————————————— 日期: 2 个人收集整理 勿做商业用途 学科
2、基础课硬件课程设计 设计说明书 模拟电子琴设计 学生姓名 闵杉 学号 0718042014 班级 专升本071 成绩 指导教师 朱涛 计算机科学与技术系 2008年9月26日 学科基础课硬件 课程设计评阅书 题目 模拟电子琴设计 学生姓名 闵杉 学号 0718042014 指导教师评语及成绩 指导教师签名: 年 月 日 答辩评语及成绩 答辩教师签名: 年
3、 月 日 教研室意见 总成绩: 教研室主任签名: 年 月 日 课程设计任务书 2007—2008学年第二学期 专业: 计算机科学与技术 学号: 0718042014 姓名: 闵杉 课程设计名称: 学科基础课硬件课程设计 设计题目: 学科基础课硬件课程设计 完成期限:自 2008 年 月 日至 2008 年 月 日共 2 周 设计依据、要求及主要内容(可另加
4、附页): 设计内容:用开关模拟电子琴发声 设计任务: 根据所学的微机原理及应用设计一个用开关模拟电子琴发生的程序. 设计目的与要求:开发学生的创新意识,巩固了解汇编语言知识并要掌握8255,8253芯片的使,并熟悉DICE-8086K实验系统. 指导教师(签字): 教研室主任(签字): 批准日期: 年 月 日 摘 要 本设计以8086作为处理器,以8253控制扬声器,并以8255接8个开关K1~K8作为电子琴的按键输入,并利用
5、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
6、 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试验系
7、统 8086k试验系统软硬件配置完善,实验电路采用分模块,开放型设计,使实验电路配置灵活,用户可直接运用。系统的主要特点: 1)采用主频为4。77mhz的8086cpu为主cpu,并以最小工作方式构成系统 2)配有两片61c256静态ram构成系统的64k基本内存,地址范围为00000h-0ffffh,其中00000h-oofffh监控占用. 3)自带键盘,显示器,能够独立运行,为实验程序调试带来方便. 4)提供标准rs232异步通讯口,以连接IBM—PC机。 5) 支持联机与脱机二种工作方式,系统扩展有EPROM,把所有实验程序都固化在该片中,脱机工作时,只需按一键,即可完成实验
8、程序下载。调用实验程序只须在实验仪键盘输入实验程序入口地址,按[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 82
9、55内部结构图 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信号,以示
10、定时或计数以到。 图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的
11、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
12、 __ PA6 CS PA7 译码器 图1.6开关控制图 2)扬声器控制:(1)8253计数器2的输出控制扬声器的发声音调(2)8253计数器2只能工作在方式3,才能输出一定频率的方波,经滤波后得到近似的正弦波,进而推动扬声器发声(3)扬声器还受控于并行接口(8255A芯片)(4)必须使8255APB0和PB1同时为高电平,扬声器才能发出预先设定频率的声音;关闭则是利用8255APB0和PB1同时为低电平,关闭与门,扬声器关闭。 CLK2 OUT2 8253
13、 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驱动发声,
14、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
15、 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的初始化、开关量的输入、扬声器的开启
16、关闭及程序的退出。在使8253的初值计数与频率相对应有两种方法,一是利用表的操作,但这种操作不太容易实现,硬件的连接也比较麻烦,易出错;所以我采用的是比较跳转的方式, 比较简单明了,容易理解。程序中的模块关系见程序流程图。 开 始 8255A初始化 开关输入 由AL的不同跳转到相应8253初始化 打开扬声器 关闭扬声器 计数值装人8253 返回DOS 结 束 图2。2 程序流程图 2。3系统原理说明 1)利用8个逻辑开关做为电子琴的键盘输入,高电平有效,则开关量由8255A的端口A方式0,输入方式(控制字AL=10010000B)送入CPU中.此时调用的是7号系统
17、功能调用,从标准设备输入单字符置入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将8255
18、A的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,0FF
19、H 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 由于每个开关的音调发音时间有软件延时控制,所以当开关打开时,就会连续发出
20、音节标称频率的声音。 整体进行硬件电路图和软件测试, 把所需程序进行输入一切运行良好,可以完成模拟电子琴,通过开关键实现产生不同音节频率的功能 9 总 结 通过这两周的硬件课程设计,我对微机原理及应用这门课有了更深的认识,系统的掌握了微机原理及接口的应用知识。 这次课程设计我做的是用开关模拟电子琴发声。在老师确定题目后,我便去图书馆查阅了大量的关于开关输入和发声程序设计的书籍,然后确定好自己的方案,对自己的设计有了一个大概的思路。通过编程,我学会了如何独立的写出程序,提高了自己的分析解决问题的能力,并且使自己所学的知识与实践相结合,应用到实践当中。课程设计中涉及到
21、许多接口芯片,使我对这些芯片有了更深的认识,对芯片的各种工作方式有了更深的理解,虽然没有进行硬件的调试,但通过设计,我也学到了很多书本上没有的知识.在设计当中遇到了很多的问题,但通过查找资料,克服了这些问题,提高了自己在实际当中解决问题的能力。 虽然此次课程设计的过程是艰辛的,但结果还是令我比较欣慰的。在此特别感谢老师对我的指导. 附录代码 STACK SEGMENT STACK STACK ENDS CODE SEGMENT ASSUME CS:CODE START: MOV DX,63H MOV AL,90H OUT
22、 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
23、 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
24、 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:
25、 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
26、 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
27、 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






