jm电子琴.docx
《jm电子琴.docx》由会员分享,可在线阅读,更多相关《jm电子琴.docx(11页珍藏版)》请在冰豆网上搜索。
jm电子琴
目录
1.概述1
2.设计方案2
2.1.设计原理2
2.2.设计思路3
2.3.流程图4
3.源程序5
4.仿真过程及结果10
5.心得体会11
6.参考文献12
1.概述
微型计算机从诞生至今已有30余年,其应用已涉及各个领域。
与此同时,微机原理与接口技术也得到了飞速发展。
显然,掌握微机原理与接口技术是对计算机及自动控制等专业人才的基本要求。
微机原理与接口技术以Intel80X86系列微处理机为背景,主要介绍80X86的基本原理、汇编语言程序设计、微机外围接口技术及应用和微机接口技术虚拟实验,内容包括微型计算机系统的基本组成、80486和Pentium微处理器的内部结构、80X86微处理器的寻址方式及指令系统、汇编语言程序设计、存储器系统、输入/输出和中断系统、并行和串行接口技术、总线技术、微机常用外设接口技术、A/D和D/A接口技术。
学好微机原理与接口技术这门课对我们今后非常有帮助。
对于本次课程设计,需要我们具备数字电路的理论知识;具备微机原理的理论知识和实践能力;熟悉汇编语言编程技术;熟悉80X86的CPU结构和指令系统;熟悉相关常用接口电路的设计使用方法。
汇编语言(AssemblyLanguage)是面向机器的程序设计语言。
在汇编语合中,用助记符(Memoni)代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。
这样用符号代替机器语言的二进制码,就把机器语音变成了汇编语言。
于是汇编语言亦称为符号语言。
使用汇编语言编写的程序,机器个能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。
汇编语言把汇编程序翻译成机器语言的过程称为汇编。
2.设计方案
2.1.设计原理
PC机中有一个小的扬声器,我们可以通过汇编编程来控制它是否发音及发音的频率的高低,该扬声器由主板上可编程并口控制器8255的B口和可编程计数器8253的定时器2来控制:
8255端口B的第一位PB1为扬声器的启动位;8253定时器2对1.19MHZ的输入信号CLK分频后从OUT2输出方波作为扬声器的驱动信号,8255端口B的第0位PB0为定时器2的启动位。
可见,若要扬声器能够发音,则8255的PB0、PB1都应该输出有效高电平(“1”);而OUT2输出方波的频率则确定了扬声器发音频率的高低。
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和与门。
代码如下:
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
2.2.设计思路
在本次课程设计中,根据复杂程序设计思想――模块化程序设计,分析和确定程序总体设计目标:
电子琴基本功能及部分扩展功能后,将总体目标划分为若干模块(子程序,具体可见下)。
程序设计的思路按以下顺序进行:
分析与确定程序总体设计目标;
将总体目标划分为若干模块;
定义每个模块的具体任务,明确它与其他模块间的通信方式。
编写源程序,进行调试,包括:
简单电子琴主程序,发音子程序,录音子程序,放音子程序。
程序开始,显示提示信息,对缓存区初始化。
接着调用发音子程序,键盘子程序,在把AL送缓存区,实现发音和显示。
接着对9键,0键,r键进行逐个判断,当9按下时,调用录音子程序。
当按下0时,播放录制的曲目。
当检测到r时,退出到DOS状态。
当每一个都检测不到时,退回到调用发音子程序,继续发音显示。
从而实现有扩展功能的电子琴。
2.3.流程图
图2-1程序流程图
3.源程序
DATASEGMENT
msgDB0DH,0AH,'[1234567]'
DB0DH,0AH,'_________________'
DB0DH,0AH,'R:
EXIT'
DB0DH,0AH,'_________________','$'
;********音调******后面用到-1判断音乐播是否放完
sound_0DW-1
sound_11DW441,-1
sound_12DW495,-1
sound_13DW556,-1
sound_14DW589,-1
sound_15DW661,-1
sound_16DW742,-1
sound_17DW833,-1
sound_1DW882,-1
sound_2DW990,-1
sound_3DW1112,-1
sound_4DW1178,-1
sound_5DW1322,-1
sound_6DW1484,-1
sound_7DW1655,-1
timeDW25
DATAENDS
;************************
STACKSEGMENT
Db200DUP('STACK')
STACKENDS
;***********************
CODESEGMENT
ASSUMEDS:
DATA,SS:
STACK,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX
MOVaH,0
MOVAL,00
INT10H
;*****定义一个宏*****
SHOWMACROb
LEADX,b
MOVAH,9
INT21H
ENDM
;********一个声音宏********
onesoundmacrosoundis,jumpis,letteris
CMPAL,letteris
JNZjumpis
LEASI,soundis
LEABP,DS:
time
CALLMUSIC
JMPinput
ENDM
showmsg
INPUT:
MOVAH,01H
INT21H
CMPAL,'9'
jnzgo
movah,4ch
int21h
go:
onesoundsound_11,a0,'q'
a0:
onesoundsound_12,b0,'w'
b0:
onesoundsound_13,c0,'e'
c0:
onesoundsound_14,d0,'r'
d0:
onesoundsound_15,e0,'t'
e0:
onesoundsound_16,f0,'y'
f0:
onesoundsound_17,g0,'u'
g0:
onesoundsound_1,h0,'1'
h0:
onesoundsound_2,i0,'2'
i0:
onesoundsound_3,j0,'3'
j0:
onesoundsound_4,k0,'4'
k0:
onesoundsound_5,l0,'5'
l0:
onesoundsound_6,m0,'6'
m0:
onesoundsound_7,n0,'7'
n0:
onesoundsound_0,o0,al
o0:
jmpinput
;********************发声
GENSOUNDPROCNEAR
;-------------
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI
;--------------
MOVAL,0B6H
OUT43H,AL
MOVDX,12H
MOVAX,348ch
DIVDI
OUT42H,AL
MOVAL,AH
OUT42H,AL
INAL,61H
MOVAH,AL
ORAL,3
OUT61H,AL
AIT1:
MOVCX,3314
callwaitf
DELAY1:
DECBX
JNZWAIT1
MOVAL,AH
OUT61H,AL
;----------------
POPDI
POPDX
POPCX
POPBX
POPAX
;-------------------
RET
GENSOUNDENDP
;**************************
waitfprocnear
pushax
waitf1:
inal,61h
andal,10h
cmpal,ah
jewaitf1
movah,al
loopwaitf1
popax
ret
waitfendp
;************************
MUSICPROCNEAR
PUSHDS
SUBAX,AX
PUSHAX
FREG:
MOVDI,[SI]
CMPDI,-1;音乐是否放完?
JEEND_MUS
MOVBX,DS:
[BP]
CALLGENSOUND
ADDSI,2
ADDBP,2
JMPFREG
END_MUS:
RET
MUSICENDP
CODEENDS
ENDSTART
4.仿真过程及结果
进入MF2KP微机原理实验平台,单击文件选择新建,将源程序输入到空白界面中,保存后点击编译,若编译成功则出现如图4-3所示的DOS界面对话框。
图4-1输入源程序,编译运行
图4-2程序运行结果
分别按下1~7,则可以听到相应的音调,按下9,则退出界面。
5.心得体会
短短一周的课程设计已经结束了,通过这次的课程设计锻炼了我们的实践能力,也是对我们以后的实际工作能力的具体训练和考察过程。
现在是一个高科技的时代,微机原理与接口技术已经成为当今电子信息应用中空前活跃的领域,在生活中可以说是无处不在的。
因此对于我们这一专业的同学来说,学好微机原理与接口技术是非常重要的。
此次微机原理与接口技术课程设计,从选题到定稿,从理论到实践,在整整一个星期里,学到了很多的东西。
同时不仅巩固了以前所学过的知识,而且还学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
这次的课程设计还让我学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。
更重要的是,我在这一设计过程中,学会了坚持不懈,不轻言放弃。
设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。
在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。
在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。
而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。
虽然这个设计做的也不太好,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富。
微机原理与接口技术课程设计虽然结束了,但通过设计所学到的东西将长久存在。
相信这次设计带给我们的严谨的学习态度和一丝不苟的科学作风将会给我们未来的工作和学习打下一个更坚实的基础。
6.参考文献
[1]姚燕南,薛均义主编微型计算机原理及接口技术北京:
高等教育出版社,2006
[2]舒贞权等编著Intel8086/8088系列微型计算机原理西安:
西安交通大学出版社,1993
[3]洪志全,洪学海主编现代计算机接口技术北京:
电子工业出版社2002
[4]邹逢兴编著计算机硬件技术基础北京:
高等教育出版社2000
[5]方立友编著微机原理与汇编语言实用教程北京:
清华大学出版社2007