电子音乐盒课程设计.doc

上传人:文库蛋蛋多 文档编号:2916257 上传时间:2023-03-03 格式:DOC 页数:16 大小:470.50KB
返回 下载 相关 举报
电子音乐盒课程设计.doc_第1页
第1页 / 共16页
电子音乐盒课程设计.doc_第2页
第2页 / 共16页
电子音乐盒课程设计.doc_第3页
第3页 / 共16页
电子音乐盒课程设计.doc_第4页
第4页 / 共16页
电子音乐盒课程设计.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《电子音乐盒课程设计.doc》由会员分享,可在线阅读,更多相关《电子音乐盒课程设计.doc(16页珍藏版)》请在三一办公上搜索。

1、微机原理与接口技术课程设计报告设 计 题 目: 电子音乐盒的设计 学 院 名 称:专 业: 通信工程 班 级: 组 员:指 导 教 师 :2011年1月7日星期五电子音乐盒的设计一设计目的1.掌握电子音乐盒的设计原理与设计方法2.熟悉汇编的上机环境,会利用轻松汇编和proteus 7设计一个程序和电路图的链接3.掌握8253A的使用方法,学会写8253A的方式控制字和计数器初值二 设计内容 设计一个电子音乐盒,其内部能装入两首乐曲,并分别受两个按键控制,1#控制第一首乐曲,2#控制第二首乐曲。按键没按下时,没乐曲播放,当按下1#时,第一首乐曲播放,按下2#时,第一首乐曲播放停止,第二首乐曲开始

2、播放,当再按下1#时,第二首乐曲停止播放,如此循环下去。三 总体设计1.系统的硬件设计框图如图一所示:按键锁存器74LS244微机系统乐曲输出电路8253方波信号发生器根据设计要求,初步设计思路如下:(1)定时器2工作在方式3(方波发生器),可产生不同频率的方波,由此方波控制扬声器就可得到频率不同的声波。定时器2发出的方波频率可以控制声音频率;调节定时器2的工作时间,则可以控制发声的音长。(2)两个按键通过锁存器74LS244来控制播放乐曲时时几号键按下的,当1#按下时,锁存器地址为7FH, 执行比较指令,若是则转入第一首乐曲播放子程序处执行,播放第一首乐曲。当2#按下时,锁存器地址为0BFH

3、,再执行比较指令,若是则转入第二首乐曲播放子程序执行,此时播放第二首乐曲。2.硬件设计1)乐曲输出电路如图2所示 图2 乐曲输出电路2)8253A结构框图如图3所示 图3 8253A结构框图8253具有3个独立的计数通道,采用减1计数方式。在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。当计数脉冲是已知周期的时钟信号时,计数就成为定时。 一、8253内部结构 8253芯片有24条引脚,封装在双列直插式陶瓷管壳内。 1.数据总线缓冲器 数据总线缓冲器与系统总线连接,8位双向,与CPU交换信息的通道。这是8253与CPU之间的数据接口,它由8位双向三态缓冲存储器构成,是CPU与8253之

4、间交换信息的必经之路。 2.读写控制 读写控制分别连接系统的IOR#和IOW#, 由CPU控制着访问8253的内部通道。接收CPU送入的读写控制信号, 并完成对芯片内部各功能部件的控制功能, 因此, 它实际上是8253芯片内部的控制器。A1A0:端口选择信号,由CPU输入。8253内部有3个独立的通道和一个控制字寄存器, 它们构成8253芯片的4个端口,CPU可对3个通道进行读写操作3对控制字寄存器进行写操作。 这4个端口地址由最低2位地址码A1A0来选择。如表9.3.1所示。 3.通道选择 (1) CS#片选信号,由CPU输入,低电平有效,通常由端口地址的高位地址译码形成。 (2) RD#、

5、WR#读写控制命令,由CPU输入, 低电平有效。RD#效时,CPU读取由A1A0所选定的通道内计数器的内容。WR#有效时,CPU将计数值写入各个通道的计数器中, 或者是将方式控制字写入控制字寄存器中。CPU对8253的读写操作如表9.3.2所示。 4.计数通道02 每个计数通道内含1个16位的初值寄存器、减1计数器和1个16位的(输出)锁存器。8253内部包含3个功能完全相同的通道,每个通道内部设有一个16位计数器,可进行二进制或十进制(BCD码)计数。采用二进制计数时, 最大计数值是FFFFH, 采用BCD码计数时。 最大计数值是9999。与此计数器相对应, 每个通道内设有一个16位计数值锁

6、存器。必要时可用来锁存计数值。 当某通道用作计数器时,应将要求计数的次数预置到该通道的计数器中、被计数的事件应以脉冲方式从CLK端输入, 每输入一个计数脉冲,计数器内容减“1”,待计数值计到“0”。 OUT端将有输出。表示计数次数到。当某个通道用作定时器时。 由CLK输入一定频率的时钟脉冲。根据要求定时的时间长短确定所需的计数值。并预置到计数器中,每输入一个时钟脉冲,计数器内容减“1”, 待计数值计到“0”。OUT将有输出,表示定时时间到。允许从CLK输入的时钟频在12MHz范围内。因此,任一通道作计数器用或作定时器用,其内部操作完全相同,区别仅在于前者是由计数脉冲进行减“1”计数。 而后者是

7、内时钟脉冲进行减“1”计数。作计数器时, 要求计数的次数可直接作为计数器的初值预置到减“1”计数器中。作定时器时, 计数器的初值即定时系数应根据要求定时的时间进行如下运算才能得到: 定时系数需要定时的时间时钟脉冲周期 设置通道:向方式控制字寄存器端口写入方式选择控制字,用于确定要设置的通道及工作方式; 计数/定时:向通道写入计数值,启动计数操作; 读取当前的计数值:向指定通道读取当前计数器值时,8253将计数器值存入锁存器,从锁存器向外提供当前的计数器值,计数器则继续作计数操作。 计数到:当计数器减1为0时,通过引脚OUTi向外输出“到”的脉冲信号。 计数初值输入存放在初值寄存器中,计数开始或

8、重装入时被复制到计数器中。 锁存器在非锁存状态,其值随计数器的变化而变化;一旦锁存了计数器的当前值,直到锁存器值被读取后才能解除锁存状态。 5.方式选择控制字3)按键显示电路如图4所示 图4 按键显示电路4)CPU模块结构框图如图5所示 图5 CPU结构模块5)硬件设计整体电路图如图6所示 图6 硬件设计整体框图3.程序流程图如图7所示4.源程序如下 DATA SEGMENT MUS_FREQ DW 196,262,294,330,349,330,262,294,262,220,262 DW 196,262,294,330,330,349,392,262,349,330,392,294,330

9、,330,294,294 DW 330,392,262,493,440,440,392,392,440,493,440,392,330 DW 349,349,392,440,392,349,330,294,247,247,440,196,220,262 DW 262,440,349,392,440,493,493,493,493,440,392,330 DW 262,440,349,392,440,220,220,220,440,349,330,294 DW 196,262,294,330,349,330,262,262,294,294,294,294,262,440,440 DW 247,2

10、47,220,196,440,392,294,330,349,349,349,330,294,392 DW 440,262,262,262,262 DW -1 MUS2_FREQ DW 168,586,468,789,123,567,456,889,687,465,892 DW 587,598,789,457,468,236,265,698,578,154,568,478,963,574,485,963 DW 489,785,789,654,123,587,456,215,654,478,258,369,147 DW 456,471,458,123,459,478,365,471,259,35

11、4,159,657,148,258 DW 489,687,145,259,357,486,159,257,357,147,258,368 DW 789,471,578,612,125,147,368,147,256,258,147,369,147,259,357 DW 789,455,478,369,147,258,471,369,582,147,258,354,147,852,147 DW 147,159,587,247,369,477,486,258,148,265,258,414,147,258 DW 147,596,588,147,358,145 DW -1 MUS_TIME DW 5

12、0,6 DUP (25),50,25,25,100 DW 50,14 DUP (25),75 DW 50,4 DUP (25),50, 6 DUP (25),100 DW 13 DUP (25),75 DW 50,50,25,25,50,6 DUP (25),100 DW 50,50,25,25,50,6 DUP (25),100 DW 50,13 DUP(25),75 DW 50,12 DUP (25),100 DW 25,75,25,100,75 MUS2_TIME DW 49,5 DUP (47),38,57,47,57 DW 48,10 DUP (47),45 DW 45,3 DUP

13、(45),65, 2 DUP (47),14 DW 12 DUP (36),47 DW 12,12,70,14,52,7 DUP (25),100 DW 14,50,24,25,36,6 DUP (25),100 DW 17,13 DUP(25),75 DW 36,12 DUP (25),100 DW 25,75,20,100,75 DATA ENDS STCK SEGMENT STK DB 200 DUP(?) TOP EQU LENGTH STK STCK ENDS CODE SEGMENT ASSUME DS:DATA, SS:STCK, CS:CODE A8255 EQU 0040H

14、B8255 EQU 0042H C8255 EQU 0044H CON8255 EQU 0046H START: MOV AX,DATA MOV DS,AX MOV AX,STCK MOV SS,AX MOV AX,TOP MOV SP,AX I: MOV DX,40H ;从244读取键值 IN AL,DX CMP AL,0EH ;处理键值 JZ AB ; CMP AL,0DH JZ AC JMP I AB: MOV AL,0B6H MOV DX,56H OUT DX,AL ;设置8253方式3 AA: LEA SI, MUS_FREQ ;SI?频率表首地址 LEA BP,DS: MUS_TI

15、ME ;BP?音长表首地址 FREG1: MOV DI,SI ;当前音符的频率?DI CMP DI,-1 ;判断是否是结束符号 JE END_MUS ;结束符,转到END_MUS1 MOV BX,DS:BP ;当前音符的音长?BX CALL GENSOUND ;调用发声子程序 ADD SI,2 ADD BP,2 ;SI和BP分别指向下一个音 ;符的频率和音长 MOV DX,40H IN AL,DX CMP AL,0EH ;处理键值 JZ AA CMP AL,0DH JZ CC JMP FREG1 ;转到FREG1,继续发声 AC: MOV AL,0B6H MOV DX,56H OUT DX,A

16、L ;设置8253方式3 CC: LEA SI, MUS2_FREQ ;SI?频率表首地址 LEA BP,DS: MUS2_TIME ;BP?音长表首地址 FREG2: MOV DI,SI ;当前音符的频率?DI CMP DI,-1 ;判断是否是结束符号 JE END_MUS1 ;结束符,转到END_MUS1 MOV BX,DS:BP ;当前音符的音长?BX CALL GENSOUND2 ;调用发声子程序 ADD SI,2 ADD BP,2 ;SI和BP分别指向下一个音 ;符的频率和音长 MOV DX,40H IN AL,DX CMP AL,0EH ;处理键值 JZ AA CMP AL,0DH

17、 JZ CC JMP FREG2 ;转到FREG1,继续发声 END_MUS: JMP END_MUS1 ;程序结束 GENSOUND PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV DX,12H MOV AX,3280H DIV DI ;计算计数初值 MOV DX,54H OUT DX,AL MOV AL,AH OUT DX,AL ;向定时器2写入计数值 WAIT1: MOV CX,3000 DELAY1: LOOP DELAY1 DEC BX JNZ WAIT1 ;延时,控制音长 MOV AL,AH POP DI POP DX P

18、OP CX POP BX POP AX RET GENSOUND ENDP GENSOUND2 PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV DX,12H MOV AX,3280H DIV DI ;计算计数初值 MOV DX,54H OUT DX,AL MOV AL,AH OUT DX,AL ;向定时器2写入计数值 ;启动发声 WAIT2: MOV CX,3000 DELAY2: LOOP DELAY2 DEC BX JNZ WAIT2 ;延时,控制音长 POP DI POP DX POP CX POP BX POP AX RET

19、GENSOUND2 ENDP END_MUS1: MOV AL,0 OUT 42H,AL CODE ENDS END START四. 设计心得体会在学期的最后迎来了汇编课程设计使我受益匪浅,上课的时候许多程序都能看的懂,经过这次之后才知道,看的懂并不等于自己会动手编程序,此次编程便是对我的一个巨大挑战。这次的设计题目是电子音乐盒的设计,知道老师上课的时候讲过这类型的题目,经过几天的整理资料和上机,程序的大体步骤已经确定下来了,但是始终没能达到实验结果。在老师及同学的帮助下,程序慢慢的有了苗头。在设计过程中有太多的疑问和困难,例如8253的方式选择字和各个端口的地址都需准确的读出并在程序中运行出

20、来,这给我带来很大的困惑。然后暂时撇下设计重新拿起书本开始看书,从理论知识开始慢慢到上机实践,仔细看过老师上课的课件和例题之后才了解几款芯片的控制字和怎样写控制字。另一个难题便是画电路图,对于刚接触protues的我动起手来显得特别的慢,由于以前做过实验,画电路图的时候还有点基础,慢慢的上机一段时间过后也变的熟悉起来。此次课程设计不仅让我加强了动手能力,在学期的最后也帮我对汇编语言这门课有了一次很好的系统复习,这让我轻松很多,对汇编语言这门课增添了不少兴趣。五,参考资料1.80X86汇编语言程序设计 清华大学出版社杨季和2. 汇编语言与接口技术 清华大学出版社 王让定,朱莹,叶富乐,史旭华编著

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号