完整word版电子发声实验课程设计.docx
- 文档编号:29313068
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:19
- 大小:229.80KB
完整word版电子发声实验课程设计.docx
《完整word版电子发声实验课程设计.docx》由会员分享,可在线阅读,更多相关《完整word版电子发声实验课程设计.docx(19页珍藏版)》请在冰豆网上搜索。
完整word版电子发声实验课程设计
微机原理课程设计
课题:
电子发声设计实验
专业:
学号:
姓名:
、课题名称及设计组成员
课题名称
电子发声设计实验
设计人
姓名
学号
分工
程序设计及调试
线路连接及查错
报告日期
、课题内容及要求
课题名:
电子发声设计实验
1、要求:
根据实验提供的音乐频率表和时间表,编写程序控制8254,使其输出连接到扬声器上能发
出相应的乐曲。
要求至少要完成下列项目的一项
(1)可播放两首不同的乐曲
(2)根据不同的按键播放不同的音乐
(3)可改变音乐的音调
(4)可显示播放乐曲的名称
2、所设计的电路实现的功能:
设计中完成了实验要求中提出的要求。
设计中实现了,用按键进行随时切换两首音乐(友谊地久天长,两只老虎)和对所播放的当前音乐进行两种不同音调(中音和低音)的随时切换的控制操作,其中用总开关K_7进行播放开关的总控制,开关K_0用于音乐播放的选择,开关K_1用于对当前播放音乐的音调进行选择。
设计中还实现了对16×16的LED管的控制运用点阵汉字输出歌名。
三、方案、系统组成框图和工作原理说明
1、设计方案及原理:
本设计中音乐播放控制为利用对8255和8254芯片的控制操作得以实
现。
音乐名的输出为利用总线对16×16点阵地控制来实现。
(1)本设计中PC发声系统以8254的计数器0为核心。
系统初始化时,计数器0工作在方式3的“方波发声器”方式,同过将音乐频率转换为相应的计数初值,改变计数器0的计数初值就可以使扬声器发出不同的频率的音响。
(2)发生系统控制为受8255芯片控制,外界通过改变对8255芯片的PA口的不同输入来实现播放功能上的选择。
3)演奏但音符,为利用一个音符对应一个频率,将与一个频率对应的计数初值写入
计数器0,扬声器就发出相应的音调。
计数器初值的计算公式为:
计数初值=1MHZ÷输出频率,其中1MHZ转换为16进制为0F4240H。
(4)控制音符的演奏时间,是通过每一个音符规定一个“单位时间”:
单位时间×N=
音符的演奏时间。
其中,N为调试参数,一首歌只有一个调试参数。
2、系统组成(电路图):
图1.对8254与系统的连接
图3.点阵汉字的接线
四、程序功能描述及程序流程
(1)程序功能描述:
如程序流程图所示。
程序下载链接、并运行后,开始通过对外界按键扫描,
来检查应进行采取的操作,根据外界不同的输入,完成不同的程序跳转,从而
实现相应的播放功能。
其中K0、K1为外界电子控制单元。
分为0和1,即低
电平和高电平。
2)程序流程图:
五、程序源代码及注释1.在LED单元中显示歌曲名称
ROW1EQU0600H;端口定义
ROW2EQU0640H
COL1EQU0680H
COL2EQU06C0H
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
;定义为数据段
INCLUDEHZDOTht.ASM;数据字段为汉字点阵库,在HZDOTht.ASM
;文件中
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,ROW1
MOVAL,00H
OUTDX,AL
MOVDX,ROW2
OUTDX,AL
MOVAL,0ffH
MOVDX,COL1
OUTDX,AL
MOVDX,COL2
OUTDX,AL
BG0:
MOVAX,160
MOVSI,OFFSETHZDOTht
BG1:
CALLDISP
ADDSI,2
DECAX
JZBG0
JMPBG1
显示汉字子程序
;入口参数:
SI=存放汉字起始地址
DISP:
MOVCX,000FH
PUSHAX
ML0:
PUSHCX
MOVBL,01H
MOVCX,0008H
ML1:
MOVDX,ROW1
MOVAL,00HOUTDX,ALMOVAL,[SI]notal
;控制0--7行
MOVDX,COL1
OUTDX,AL
INCSI
MOVAL,[SI]notal
;0--7列
MOVDX,COL2
OUTDX,AL
INCSI
;8--15列
MOVDX,ROW1
MOVAL,BLOUTDX,AL
ROLBL,1
CALLDELAY
LOOPML1
MOVDX,ROW1
MOVAL,00HOUTDX,AL
MOVCX,0008H
;控制0--7行
ML2:
MOVDX,ROW2
MOVAL,00HOUTDX,AL
MOVAL,[SI]notal
;控制8--15行
MOVDX,COL1OUTDX,ALINCSI
MOVAL,[SI]notal
;0--7列
MOVDX,COL2
OUTDX,AL
INCSI
;8--15列
MOVDX,ROW2
;控制8--15行
MOVAL,BL
OUTDX,AL
ROLBL,1
CALLDELAY
LOOPML2
MOVDX,ROW2
MOVAL,00H
OUTDX,AL
SUBSI,32
POPCX
LOOPML0
POPAX
RET
DELAY:
PUSHCX;延时子程序
MOVCX,0100H
DL1:
PUSHAX
POPAX
LOOPDL1
POPCX
RET
CODEENDS
ENDSTART
此程序中8255芯片和点阵LED单元的连接,用来实现在点阵LED显示单元来显示汉字的功能。
通过调用汉字存放单元的地址,在LED单元中可以显示出流动的字体。
此程序实现的字体是“友谊天长地久”。
2.此程序用来实现程序流程图中所示的功能,即通过开关来控制播放曲目的的切换和音调的改变。
IOY3EQU06C0H
IOY0
EQU0600H
MY8255
A
EQU
IOY0+00H
MY8255
B
EQU
IOY0+02H
MY8255
C
EQU
IOY0+04H
MY8255
MODE
EQU
IOY0+06H
STACK1SEGMENTSTACK
DW256DUP(?
)
STACK1ENDS
DATASEGMENT
;第一首歌频率
FREQ_LISTDW371,495,495,495,624,556,495,556,624表
DW495,495,624,742,833,833,833,742,624
DW624,495,556,495,556,624,495,416,416,371
DW495,833,742,624,624,495,556,495,556,833
DW742,624,624,742,833,990,742,624,624,495
DW556,495,556,624,495,416,416,371,495,0
TIME_LIST
DB
4,
6,
2,
4,4,
6,
2,
4,
4
表
DB
6,
2,
4,
4,12,
1,
3,
6,
2
DB
4,
4,
6,
2,4,
4,
6,
2,
4,4
DB
12,
4,
6,
2,4,
4,
6,
2,
4,4
DB
6,
2,
4,
4,12,
4,
6,
2,
4,4
DB
6,
2,
4,
4,6,
2,
4,
4,
12
;第一首歌时间
FREQ_LIST1DW330,371,416,330歌频率表
;第二首
DW330,371,416,330
DW416,441,495
DW495,556,495,441,416,330
DW495,556,495,441,416,330
DW330,248,330
DW330,248,330,0
TIME_LIST1DB4,4,4,4DB4,4,4,4DB4,4,8DB4,4,8DB2,2,2,2,4,4DB2,2,2,2,4,4DB4,4,8DB4,4,8
;第二首歌时间表
FREQ_LIST2音后
;第一首歌频率表变
TIME_LIST2歌时间表变音后
;第一首
FREQ_LIST3
DB
4,
6,
2,
4,
4,
6,
2,4,4
DB
6,
2,
4,
4,
2,
1,
3,
6,
2
DB
4,
4,
6,
2,
4,
4,
6,
2,
4,
4
DB
12,
4,
6,
2,
4,
4,
6,
2,
4,
4
DB
6,
2,
4,
4,
2,
4,
6,
2,
4,
4
DB
6,
2,
4,
4,
6,
2,
4,
4,
12
;第二首歌频率表变音后
TIME_LIST3
DB4,4,4,4
DB4,4,4,4
DB4,4,8
DB4,4,8
DB2,2,2,2,4,4
DB2,2,2,2,4,4
DB4,4,8
DB4,4,8
;第二首歌时间表变音后
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,MY8255_MODE
;初始化8254工作方式
MOVAX,90H
INPUT:
MOVDX,AX
;A口作为输入
MOVDX,MY8254_MODE
;初始化
8254工作方式
MOVAL,36H
OUTDX,AL
;定时器0、
方式3
MOVDX,MY8255_A
;检查输入,
是否要设中断问题
INAL,DX
CMPAL,80H
JZNEARPTR
CMPAL,81H
BEGIN
JZNEARPTR
BEGIN1
CMPAL,82H
JZNEARPTR
BEGIN2
CMPAL,83H
JZNEARPTRBEGIN3
JNZINPUT
BEGIN:
MOVSI,OFFSETFREQ
LIST
;装入频率表起始地址
MOVDI,OFFSETTIME_LIST;装入时间表起始地址
PLAY:
MOVDX,MY8255_A
INAL,DX
CMPAL,80H
JNZNEARPTRINPUT
MOVDX,0FH;输入时钟为1MHz,1M=0F4240H
MOVAX,4240H
DIVWORDPTR[SI];取出频率值计算计数初值,0F4240H/输出频率
MOVDX,MY8254_COUNT0
OUTDX,AL;装入计数初值
MOVAL,AH
OUTDX,AL
MOVDL,[DI];取出演奏相对时间,调用延时子程序
CALLDALLY
ADDSI,2
INCDI
;判断是否到曲末?
CMPWORDPTR[SI],0
JENEARPTRINPUT
JMPPLAY
;判断是否到曲末?
;装入频率表起始地址
;装入时间表起始地址
;输入时钟为1MHz,1M=0F4240H
;取出频率值计算计数初值,0F4240H/输出频率;装入计数初值
;取出演奏相对时间,调用延时子程序
;判断是否到曲末?
DALLYPROC;延时子程序
D0:
MOVCX,0010H
D1:
MOVAX,0F00H
D2:
DECAX
JNZD2
LOOPD1
DECDL
JNZD0
RET
DALLYENDP
DONE:
MOVAX,4C00H
INT21H
CODEENDS
ENDSTART
本程序中,分别设定了TIME_LIST1TIME_LIST2TIME_LIST3和FREQ_LIST1FREQ_LIST2FREQ_LIST3,其中TIME_LIST是歌曲时间表,FREQ_LIST是歌曲频率表。
当程序下载链接无误后,执行程序;如程序流程图所示;K0,K1为控制开关,当外设输入为00时,电子发声单元播放“友谊天长地久”的低音调;当为01时,播放“两只老虎”的低音调;当10时播放“友谊天长地久”的原调,当11时播放“两只老虎”的原调。
在播放每
首歌曲时,程序通过一直扫描键盘的输入来判断键盘输入值是否发声变化,如果发声变化,则执行相应的程序,如果没有发生变化则一直播放当前播放的歌曲。
六、电路的连接及调试
1.电路连接电路的连接与调试过程中,由于在试验箱中操作,82548255芯片已内置,所以对照着电路图,电路的连接比较容易完成。
在完成8255单元的连接时候,由于此处没有给出电路图,同过与小组成员的讨论,给出了电路连接方案,如图2所示。
在电路的连接过程中,要注意系统的地址总线与芯片的地址总线相连,单元的A0、A1
分别于系统的XA0XA1相连,IOW与WR、IOR与RD、IOY与CS相连。
实现第二个程序的时候,由于要用到开关单元按键,因此8255的程序总线PA0-PA7要分别与开关按键单元中的K_0-K_7连接。
2.程序调试在试验的调试过程中,会遇到不能加载的情况,检查后发现是因为试验箱与电脑的连接出现了问题:
由于接口的松动,使得在端口测试的过程中总会出现接口通信失败的情况,此时不光要检查连接的接口是否松动,还要在端口中选择合适的端口,来完成试验箱与电脑的连接。
还有,调试时会遇到没有按照程序设计的功能来完成的情况,在这种情况下,应该首先检查程序是否有错,如果没有,再检查试验箱中电路连接是否有错误。
一般来说,错误都出现在连线上面:
或者程序总线插在了地址总线处,或者连线的插口接反了。
这种情况都比较容易来处理。
七、调试中出现的问题、原因及排除方法
调试过程中出现的问题。
1、在程序编译、加载、链接无误的情况下,下载程序后,单击运行,则程序会出现从START直接跳到END的情况。
遇到这种情况,最大的可能是程序中有问题,但不是明显的问题,并不是错误,但是运行会直接结束。
首先就要从程序检查开始,一般这种错误的出现有可能就是长转指令的运用错误,或者在设定时间、判断程序是否执行方面出了问题。
通过仔细检查程序和修改后,这类问题就能得到解决。
2、调试过程中出现jumpoutoftherange的错误这种情况,是由于程序太长,超出了JMP跳转的能力范围。
解决这种问题的方法是增加中间过渡指令,从而缩短每条指令的长度。
3、LED显示单元中显示的字体与实际字体相反。
这种情况是由于把字的点阵的高低位与试验箱的显示方式弄反了,通过调整字的点阵的高低位的位置,就可以使此问题得到解决。
4、在调试过程中还会出现一些原因不明的错误,如乱码,符号等错误。
这类错误的出现是由于在复制程序代码时,同时将程序的注释一起复制到了程序中,而有些汉字的编码不能被识别,从而出现了这些错误。
解决的办法是将出现错误行的汉字注释删掉。
八、收获和体会
这次的课程设计,其实也就是考验我们是否能将所学知识与动手结合起来的一次很好的机会。
微机原理这门课程我们在上学期学过,学习这门课程的目的就是要将所学的汇编知识运用到实际当中来;在这次的课程设计中,有几个题目我们可以选择,为了更好的重温学习过的知识,我选择了电子发声试验这个课题。
整个设计通过了软件和硬件上的调试。
我想这对于自己以后的学习和工作都会有很大的帮助。
在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。
一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。
对于电子发声试验,其程序是比较简单的,主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。
因此在整个设计过程中大部分时间是用在程序上面的。
很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对系统的结构很熟悉。
因此可以说系统的设计是软件和硬件的结合,二者是密不可分的。
通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。
生活就是这样,汗水预示着结果也见证着收获。
劳动是人类生存生活永恒不变的话题。
通过实习,我才真正领略到“艰苦奋斗”这一词的真正含义,我才意识到老一辈电子设计为我们的社会付出。
我想说,设计确实有些辛苦,但苦中也有乐,在如今单一的理论学习中,很少有机会能有实践的机会,但我们可以,而且设计也是一个团队的任务,一起的工作可以让我们有说有笑,相互帮助,配合默契,多少人间欢乐在这里洒下,大学里一年的相处还赶不上这十来天的合作,我感觉我和同学们之间的距离更加近了;我想说,确实很累,但当我们看到自己所做的成果时,心中也不免产生兴奋;正所谓“三百六十行,行行出状元”。
我们同样可以为社会作出我们应该做的一切,这有什么不好?
我们不断的反问自己。
也许有人不喜欢这类的工作,也许有人认为设计的工作有些枯燥,但我们认为无论干什么,只要人生活的有意义就可。
社会需要我们,我们也可以为社会而工作。
既然如此,那还有什么必要失落呢?
于是我们决定沿着自己的路,执着的走下去。
同时我认为我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神。
某个人的离群都可能导致导致整项工作的失败。
实习中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个工作失败。
团结协作是我们实习成功的一项非常重要的保证。
而这次实习也正好锻炼我们这一点,这也是非常宝贵的。
总之,通过这次的课程设计,我收获了许多:
一方面,由于课程设计的过程中涉及了许多专业课的知识,因此在课下我找出了微机原理的课本,将以前学过的东西重新温习了一遍,感觉收获良多;以前有些地方不懂,但是现在看起来有一种恍然大悟的感觉;其实知识也正是在反复学习的过程中得以消化和吸收的;另一方面,由于动手能力一直是我们比较薄弱的一点,这次的锻炼机会,让我们从动脑到动手,得到了全面的锻炼。
很高兴自己能有这次机会,而我对它也很珍惜。
在以后的学习和生活中,我一定会注意将学习和实践结合起来,多多动手,在实践中检验自己所学的知识,从而让自己的能力不断增强。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 word 电子 发声 实验 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)