微机原理与接口技术汇编语言.docx
《微机原理与接口技术汇编语言.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术汇编语言.docx(14页珍藏版)》请在冰豆网上搜索。
微机原理与接口技术汇编语言
微机原理与接口技术
课程设计报告
电子琴(八音盒)
1课题描述
随着社会发展,计算机硬件技术越来越多的应用到生活中的各个领域,人们对软硬件技术结合开发出来的产品的要求越来越迫切,需求日益增加,如今用软硬件结合设计电子产品已经成为了一大时尚。
本设计编写的一个用开关模拟电子琴的程序,以8086作为处理器,用8255接八个开关K1~K8,做电子琴按键输入,以8253控制扬声器,拨动不同的开关,发出相应的音阶。
其中K1代表静音,K2发si的音,K3发la的音,K4发sol的音,K5发fa的音,K6发mi的音,K7发re的音,K8发do的音。
开发工具:
汇编语言;DICE-8086K实验系统。
1.1DICE-8086k试验系统
8086k试验系统软硬件配置完善,实验电路采用分模块,开放型设计,使实验电路配置灵活,用户可直接运用。
系统的主要特点:
1)采用主频为4.77mhz的8086cpu为主cpu,并以最小工作方式构成系统
2)配有两片61c256静态ram构成系统的64k基本内存,地址范围为00000h-0ffffh,其中00000h-oofffh监控占用。
3)自带键盘,显示器,能够独立运行,为实验程序调试带来方便。
4)提供标准rs232异步通讯口,以连接IBM-PC机。
5)支持联机与脱机二种工作方式,系统扩展有EPROM,把所有实验程序都固化在该片中,脱机工作时,只需按一键,即可完成实验程序下载。
调用实验程序只须在实验仪键盘输入实验程序入口地址,按[EXEC]键即可,非常便捷。
图1.18086cpu引脚图
1.28255与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.28255引脚图
图1.38255内部结构图
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.48253引脚图
4)8253/8254内部有6个模块:
数据总线缓冲器,读/写逻辑,控制命令寄存器,计数器0,计数器1,计数器2
数据总线缓冲器:
3态,双向8位寄存器和D0~D7相连。
读/写逻辑:
由CPU发来的读/写信号和地址信号来选择读出或写入寄存器。
控制命令寄存器:
接受CPU来控制字。
计数器:
8253有3个结构完全相同的计数器。
其内部由16为初值寄存器、减1计数器和当前计数值锁存器组成。
图1.58253内部结构图
1.3功能说明
1)开关控制:
8255端口A工作在方式0,且为输入方式,端口B、C任意。
开关接在8255端口A的PA0~PA7,这样就可以通过8255读取开关量。
如下图:
图1.6开关控制图
2)扬声器控制:
(1)8253计数器2的输出控制扬声器的发声音调
(2)8253计数器2只能工作在方式3,才能输出一定频率的方波,经滤波后得到近似的正弦波,进而推动扬声器发声(3)扬声器还受控于并行接口(8255A芯片)(4)必须使8255APB0和PB1同时为高电平,扬声器才能发出预先设定频率的声音;关闭则是利用8255APB0和PB1同时为低电平,关闭与门,扬声器关闭。
图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以不同的脉冲频率产生不同的输出方波,方波信号通过滤波器、功率放大器使扬声器发声。
图2.1硬件电路连接图
2.2软件设计
利用汇编语言对接口进行编程控制。
程序模块主要包括8255A、8253的初始化、开关量的输入、扬声器的开启、关闭及程序的退出。
在使8253的初值计数与频率相对应有两种方法,一是利用表的操作,但这种操作不太容易实现,硬件的连接也比较麻烦,易出错;所以我采用的是比较跳转的方式,比较简单明了,容易理解。
程序中的模块关系见程序流程图。
图2.2程序流程图
2.3系统原理说明
1)利用8个逻辑开关做为电子琴的键盘输入,高电平有效,则开关量由8255A的端口A方式0,输入方式(控制字AL=10010000B)送入CPU中。
此时调用的是7号系统功能调用,从标准设备输入单字符置入AL寄存器中,调用格式为:
MOVAH,07H
INT21H
2)CPU根据不同的开关量,将程序跳转到相应频率对应的8253的初始化,并给8253赋上频率对应的初始值,此时利用的是8253的通道2,方式3,产生不同频率的方波。
代码如下:
MOVAL,0B6H
OUT43H,AL
MOVAX,计数值
OUT42H,AL
MOVAL,AH
OUT42H,AL
3)要使8253OUT发出的方波频率与任务中的频率相同,则要给8253设置计数值,计算方法为:
计数值=输入时钟频率/任务要求频率
然后CPU将8255A的PB0、PB1置1,打开8253的GATE和与门(图2.1)。
代码如下:
INAL,61H
ORAL,03H
OUT61H,AL8253
4)产生的方波信号通过滤波器形成正弦信号,然后通过功率放大器,将正弦信号放大,驱动扬声器发声。
再然后CPU将8255A的PB0、PB1置0,关闭扬声器。
代码如下:
INAL,61H
ANDAL,0FCH
OUT61H,AL
再次输入开关量,则循环执行上面过程。
5)当输入为PC键盘任意键输入时,则整个程序退出。
此时是调用的6号和4CH号系统功能调用,系统输入键盘任意键,返回DOS。
调用格式为:
MOVDL,0FFH
MOVAH,6
INT21H
MOVAH,4CH
INT21H
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
由于每个开关的音调发音时间有软件延时控制,所以当开关打开时,就会连续发出音节标称频率的声音。
整体进行硬件电路图和软件测试,把所需程序进行输入一切运行良好,可以完成模拟电子琴,通过开关键实现产生不同音节频率的功能
总结
通过这两周的硬件课程设计,我对微机原理及应用这门课有了更深的认识,系统的掌握了微机原理及接口的应用知识。
这次课程设计我做的是用开关模拟电子琴发声。
在老师确定题目后,我便去图书馆查阅了大量的关于开关输入和发声程序设计的书籍,然后确定好自己的方案,对自己的设计有了一个大概的思路。
通过编程,我学会了如何独立的写出程序,提高了自己的分析解决问题的能力,并且使自己所学的知识与实践相结合,应用到实践当中。
课程设计中涉及到许多接口芯片,使我对这些芯片有了更深的认识,对芯片的各种工作方式有了更深的理解,虽然没有进行硬件的调试,但通过设计,我也学到了很多书本上没有的知识。
在设计当中遇到了很多的问题,但通过查找资料,克服了这些问题,提高了自己在实际当中解决问题的能力。
虽然此次课程设计的过程是艰辛的,但结果还是令我比较欣慰的。
在此特别感谢老师对我的指导。
附录代码
STACKSEGMENTSTACK
STACKENDS
CODESEGMENT
ASSUMECS:
CODE
START:
MOVDX,63H
MOVAL,90H
OUTDX,AL;8255A初始化
INPUT:
MOVDX,60H
INAL,DX;8255A端口A输入
MOVAH,07H
INT21H;从开关输入信号
CMPAL,00000001B
JZK1
CMPAL,00000010B
JZK2
CMPAL,00000100B
JZK3
CMPAL,00001000B
JZK4
CMPAL,00010000B
JZK5
CMPAL,00100000B
JZK6
CMPAL,01000000B
JZK7
CMPAL,10000000B;判断从哪个开关输入并跳
JZK8;转到相应8253初始化
MOVDL,0FFH
MOVAH,6
INT21H
MOVAH,4CH;键盘任意输入则退出程
INT21H;序,返回DOS
K1:
MOVAL,0B6H
OUT43H,AL
MOVAX,0
JMPSING
K2:
MOVAL,0B6H
OUT43H,AL
MOVAX,2420
JMPSING
K3:
MOVAL,0B6H
OUT43H,AL
MOVAX,2712
JMPSING
K4:
MOVAL,0B6H
OUT43H,AL
MOVAX,3044
JMPSING
K5:
MOVAL,0B6H
OUT43H,AL
MOVAX,3419
JMPSING
K6:
MOVAL,0B6H
OUT43H,AL
MOVAX,3627
JMPSING
K7:
MOVAL,0B6H
OUT43H,AL
MOVAX,4072
JMPSING
K8:
MOVAL,0B6H
OUT43H,AL;8253初始化
MOVAX,4572;并给AX赋
JMPSING;值
SING:
OUT42H,AL
MOVAL,AH
OUT42H,AL;传送计数值到8253
INAL,61H
ORAL,03H
OUT61H,AL;打开扬声器
INAL,61H
ANDAL,0FCH
OUT61H,AL;关闭扬声器
JMPINPUT;跳转到INPUT
CODEENDS
ENDSTART
参考文献
[1]郑坤.微型计算机技术实验指导书.2007.
[2]戴梅萼,史嘉权.微型计算机技术与运用.清华大学出版社2003.
[3]王爱英.计算机组成与结构.北京.清华大学出版社.1995.
[4]沈美明,温冬蝉.IBM-PC汇编语言程序设计.北京.清华大学出版社.2003.