微机原理(音乐播放器.doc_第1页
微机原理(音乐播放器.doc_第2页
微机原理(音乐播放器.doc_第3页
微机原理(音乐播放器.doc_第4页
微机原理(音乐播放器.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微机原理课程设计报告题 目: 音乐播放器 学生姓名: 学 号: 专业班级: 同组姓名: 指导教师: 杨红杰 设计时间: 2010年上学期第17周 指导老师意见:评定成绩: 签名: 日期: 年 月 日 课程设计任务书题目:音乐播放器课程设计内容要求:要求:1根据确定的主题进行分析,确定采用的微机芯片,并复习掌握相关知识;2设计整体结构、框架;分析硬件框架、流程和软件框架、流程;实现汇编程序;3测试完成汇编程序;4按要求完成课程设计和报告、答辩。目的:课程设计注重提高学生应用能力、创新能力。在掌握了基本的实验方法和实验技能且理论教学完成的基础上,要求学生通过一周的集中工作,初步锻炼综合运用所学知识的能力,通过讨论与合作,完成一项完整的设计工作。更深入的了解微机芯片的用法和程序的完成过程,调试方法及技巧。通过这个环节来加深对微机原理与接口技术所学内容的理解和融会贯通。设计者姓名: 指导老师意见:指导老师签名:目 录一 课程设计任务和目的31.1 课程设计目的31.2课程设计任务3二、课程设计相关知识32.1 定时/计数器8253A32.2 8253A内部结构42.3 8253A外部引脚52.5 8253A端口地址62.6 8253A功能72.7 8253A控制字72.8 8253A工作方式8三、总体设计方案93.1 总体设计方案一93.2 总体设计方案二93.3 各个音符的对应频率表10四.部分电路设计及功能解说114.1 频率发生电路114.2 扬声器开关控制电路11五.硬件接线图11六.软件设计流程图126.1 总流程图126.2 音乐播放子程序流程图13七.程序段功能汇总137.1 MAIN程序137.2 PLAY子程序147.3 DELAY子程序和DELAY_OFF子程序14八.程序清单14九.试验结果和分析199.1 试验结果199.2 分析20十.课程设计总结和体会20十一.参考文献21一 课程设计任务和目的 1.1 课程设计目的本课程设计注重提高学生应用能力、创新能力。在掌握了基本的实验方法和实验技能且理论教学完成的基础上,要求学生通过一周的集中工作,初步锻炼综合运用所学知识的能力,通过讨论与合作,完成一项完整的设计工作。更深入的了解微机芯片的用法和程序的完成过程,调试方法及技巧。通过这个环节来加深对微机原理与接口技术所学内容的理解和融会贯通。设计音乐播放器主要目的: 通过D/A装换器产生模拟信号,在实验平台上实现简易音乐播放器。 了解利用数模转换器产生音乐的基本方法。 掌握定时/计数器8253A 的使用。1.2课程设计任务本次课程设计题目是:设计并实现一个键控音乐播放器。要求:(1) 自己选用合适的芯片,不少于两种。和其他硬件。(2) 自行设计电路并使用汇编语言编写程序完成键控音乐播放器功能。(3) 该播放器有若干首歌曲可以选择,开始时输出说明,要用户选择要播放的歌曲,然后根据用户按键进行播放、退出或出错提示。(4)利用8253作为音阶频率发生器,对一段音乐进行编码后存入音符表,程序中可调用音符表自动播放音乐,从中了解音乐播放的原理。(5)利用8253A和PC机,设计并实现简易音乐播放器(6)使用汇编语言编写音乐播放程序。(7)上机调试程序并联机,利用试验箱提供的扬声器发声。(8)完成实验报告。二、课程设计相关知识2.1 定时/计数器8253A 在微机及控制系统中,经常要用到定时信号。如系统的日历时钟,动态存储器刷新。对外部执行机构控制时也需要定时中断、定时检测、定时查询等。定时的方法主要是两种:软件定时:利用指令的执行时间设计循环程序,使CPU 执行延迟子程 序的时间就是定时时间。缺点:执行延迟时,CPU 一直被占用,降低了CPU 的效率。硬件定时:用计数器/定时器作为主要硬件,在软件简单指令的控制下产生精确的时间延迟。突出优点为计数时不占用CPU 时间,如利用定时器/计数器产生中断信号,可建立多作业环境,提高了CPU 效率。主要功能:(1)每片上有3 个独立的16 位的减计数器通道。(2)对于每个计数器,都可以单独作为定时器或计数器使用,并且都可以按照二进制或十进制来计数。(3)每个通道都有6 种工作方式,都可以通过程序设置或改变。(4)每个计数器的速率可高达2MHz。最高的计数时钟频率为26MHz。2.2 8253A内部结构8253的内部结构如图所示,它主要包括以下几个主要部分:图21 8253的内部结构(1)数据总线缓冲器实现8253与CPU数据总线连接的8位双向三态缓冲器,用以传送CPU向8253的控制信息、数据信息以及CPU从8253读取的状态信息,包括某时刻的实时计数值。(2)读/写控制逻辑控制8253的片选及对内部相关寄存器的读/写操作,它接收CPU发来的地址信号以实现片选、内部通道选择以及对读/写操作进行控制。(3)控制字寄存器在8253的初始化编程时,由CPU写入控制字,以决定通道的工作方式,此寄存器只能写入,不能读出。(4)计数通道0#、1#、2#:这是三个独立的,结构相同的计数器/定时器通道,每一个通道包含一个16位的计数寄存器,用以存放计数初始值,一个16位的减法计数器和一个16位的锁存器,锁存器在计数器工作的过程中,跟随计数值的变化,在接收到CPU发来的读计数值命令时,用以锁存计数值,供CPU读取,读取完毕之后,输出锁存器又跟随减1计数器变化。2.3 8253A外部引脚8253芯片是具有24个引脚的双列直插式集成电路芯片,其引脚分布如图所示。8253芯片的24个引脚分为两组,一组面向CPU,另一组面向外部设备,各个引脚及其所传送信号的情况,介绍如下:(1)D7D0:双向、三态数据线引脚,与系统的数据线连接,传送控制、数据及状态信息。(2):来自于CPU的读控制信号输入引脚,低电平有效。(3):来自于CPU的写控制信号输入引脚,低电平有效。(4):芯片选择信号输入引脚,低电平有效。图21 8253的引脚(5)A1、A0:地址信号输入引脚,用以选择8253芯片的通道及控制字寄存器。(6)VCC及GND:+5V电源及接地引脚(7)CLKi:i=0,1,2,第i个通道的计数脉冲输入引脚,8253规定,加在CLK引脚的输入时钟信号的频率不得高于2.6MHZ,即时钟周期不能小于380ns。(8)GATEi:i=0,1,2,第i个通道的门控信号输入引脚,门控信号的作用与通道的工作方式有关。(9)OUTi:i=0,1,2,第i个通道的定时/计数到信号输出引脚,输出信号的形式由通道的工作方式确定,此输出信号可用于触发其它电路工作,或作为向CPU发出的中断请求信号。2.4 计数器内部结构每个计数器由一个16位可预置的减1计数器组成,计数初值可保存在16位的锁存器中,该锁存器只写不能读。在计数器工作时,初值不受影响,以便进行重复计数。图中每个计数器有一个时钟输入端CLK作为计数脉冲源, 计数方式可以是二进制,计数范围110000H,也可以是十进制,计数范围165536。门控端GATE用于控制计数开始和停止。输出OUT端当计数器计数值减到零时,该端输出标志信号 。图22 计数器内部结构2.5 8253A端口地址图23 8253A端口地址2.6 8253A功能 8253 A既可作定时器又可作计数器: (1) 计数: 计数器装入初值后,当GATE为高电平时,可用外部事件作为CLK 脉冲对计数值进行减1 计数,每来一个脉冲减1,当计数值减至0时,由OUT 端输出一个标志信号。(2) 定时: 计数器装入初值后,当GATE为高电平时,由CLK 脉冲触发开始自动计数,当计数到零时,发计数结束定时信号。除上述典型应用外,8253A还可作频率发生器、分频器、实时钟、单脉冲发生器等。2.7 8253A控制字图24 8253A控制字说明 : (1) 8253 A每个通道对输入CLK按二进制或二十进制从预置值开始减1计数,减到0时从OUT输出一个信号。 (2) 8253 A编程时先写控制字,再写时间常数。2.8 8253A工作方式 (1) 方式0:计数结束产生中断方式 当写入控制字后,OUT变为低电平,当写入初值后立即开始计数,当计数结束时,变成高电平。 (2) 方式1:可编程单次脉冲方式 当初值装入后且GATE由低变高时,OUT变为低电平,计数结束变为高电平。 (3) 方式2:频率发生器方式 当初值装入时,OUT变为高;计数结束,OUT变为低。该方式下如果计数未结束,但GATE为低时,立即停止计数,强制OUT变高,当GATE再变高时,便启动一次新的计数周期。 (4) 方式3:方波发生器当装入初值后,在GATE上升沿启动计数,OUT 输出高电平; 当计数完成一半时,OUT输出低电平。图25 方波图方式3与方式2的工作方式类似,也是在初始化完成后能重复循环计数,只是输出的波形不同。 计数过程 当把方式3的控制字写入控制字寄存器后,输出端OUT变成高电平,作为初始电平。再将计数初值写入计数初值寄存器CR中,再经过一个时钟周期,计数初值被移入计数执行单元CE中,从下一个时钟脉冲开始作减1 计数,方式3的计数过程分为两种情况:第一种情况:计数初值为偶数,当作减1计数减到N/2时,输出端OUT端变成低电平,减到0时,输出端OUT变成高电平,并重新从初值开始新的计数过程。若GATE为高电平,则一直重复同样的计数过程。可见,输出端OUT输出连续的方波,故称方波发生器。第二种情况:计数初值为奇数,当作减1计数减到(N+1)/2以后,输出端OUT变成低电平,减到0时,输出端OUT又变成高电平。并重新从初值开始新的计数过程。这时输出端的波形为连续的近似方波。门控信号的影响工作在方式3时,门控信号GATE的功能与工作方式2一样,即GATE 为高电平时,允许计数;GATE为低电平时停止计数。GATE引脚上的信号从低电平跳到高电平时,将会重新把计数初值寄存器CR中的内容移入计数执行单元CE中,并以新装入的值重新开始计数。新的计数初值对计数过程的影响如果在计数过程中写入新的初值,而GATE信号一直维持高电平,则新的初值不会影响当前的计数过程,只有在计数结束后的下一个计数周期,才按新的初值计数。若写入新的初值后,遇到门控信号的上升沿,则结束现行的计数过程,从下一个时钟脉冲下降沿开始按新的计数初值进行计数。可见,工作在方式3时,当计数初值为偶数,OUT端输出连续的标准方波;当计数初值为奇数,在每个计数周期内,有(N+1)/2个周期输出高电平,(N-1)/2个时钟周期输出低电平,OUT端输出连续的近似的方波。 三、总体设计方案3.1 总体设计方案一所有音乐都是由各个不同频率的音阶和其延续时间的长短来实现的。不同的音乐是由各个音阶按某种排列各自播放一定时间形成的,将各音乐音阶和其延续时间存在数据段中,然后根据不同按键值选择不同的音阶和时间表,再使用计数器产生该音阶频率。而我们学过的有计数器可以产生各种频率,所以我们主要采用计数器8253产生各音符,用8255并行接口来控制扬声器的开关,达到播放音乐的功能。3.2 总体设计方案二可以使用0832(数模转换器)来产生频率,原理图: 提出这个方案是因为我想产生模拟信号,来驱动扬声器,这样产生的声音更加圆润感觉更连续,效果更好点。我们想把一个周期的波形分成32份,然后每份给8253一个值让他转换成模拟信号,不同的频率可以用8253计数器控制,比如要产生261Hz的频率,使用1MHz的话,周期就为1/261=3.83ms,分成32份,每份间隔时间就是3.83ms/32=0.12ms,换句话说就是送计数器0的初值为1M/261/32=120次。3.3 各个音符的对应频率表:音符 频率/HZ 半周期/us音符频率/HZ半周期/us低1DO2621908 #4FA#7400676#1DO#2771805中5SO7840638低2RE2941700#5SO#8310602#2RE#3111608中6LA8800568低3M3301516#6LA#9320536低4FA3491433中7SI9880506#4FA#3701350高1DO10460478低5SO3921276#DO#11090451#5SO#4151205高2RE11750426低6LA4401136#2RE#12450402#6LA#4661072高3M13180372低7SI4941012高4FA13970358中1DO5230956#4FA#14800338#1DO#5540903高5SO15680319中2RE5780842#5S0#16610292#2RE#6220804高6LA17600284中3M6590759#6LA#18650268中4FA6980716高7SI19760253四.部分电路设计及功能解说4.1 频率发生电路使用8253产生音符频率。8253采用方式3,产生方波信号,根据输入计数初值的不同产生不同频率的方波信号来驱动扬声器。 设某音符频率为fHz,而CLK脉冲是1MHz,则计数初值N=1M/f。8253的控制端口为28BH,控制字为36H。4.2 扬声器开关控制电路使用8255并行接口芯片来控制扬声器的开和关,PC0始终接低电平,PA0和8253的OUT0接在与门上,这样只有PA0=1时扬声器才有可能开通,否则不发声。关闭的方法是,从PC口读入数据再从PA口输出;而开扬声器时只要在输出PA口数据前对数据进行一个取反操作就可以了。五.硬件接线图 六.软件设计流程图6.1 总流程图6.2 音乐播放子程序流程图七.程序段功能汇总7.1 MAIN程序MAIN程序是总程序,输出说明,等待用户按键并读取键值。根据不同的按键选择调用播音子程序播放不同的歌曲。7.2 PLAY子程序PLAY子程序是播音子程序,SI指向音节表中的频率,BP指向音节表中的时间。从SI的指向的音节表中取一个频率,只要不是-1,即有效就再读取时间,然后计算计数初值送入计数器,产生各种频率。开启扬声器,根据所取的时间调用若干次延时子程序。这段时间扬声器就发出该频率的声音,延时结束,就关闭扬声器,调用音节之间的小延时程序。最后修改SI和BP,指向下一个频率,重复上面的工作。7.3 DELAY子程序和DELAY_OFF子程序两个都是子程序,采用空操作循环多次的方法,只是第二个延时时间较短,大概为5ms。八.程序清单SSEG SEGMENT PARA STACK stack dw 100h dup(0) ;Resize the stack by changing the number 100SSEG ENDSDSEG SEGMENT ;TO DO: Add your programs data hereINFO1 DB 0DH,0AH,-,0DH,0AH,THERE ARE 3 SONGS:,0DH,0AH,0DH,0AH,$INFO2 DB 1.HAPPY BIRTHDAY,0DH,0AH,$INFO3 DB 2.SHEEP,0DH,0AH,$INFO4 DB 3.RIVER,0DH,0AH,$INFO5 DB 0.EXIT,0DH,0AH,$INFO6 DB YOU HAVE CHOSEN :$INFO7 DB THANK YOU FOR YOUR USE,0DH,0AH,$INFO8 DB -,0DH,0AH,PRESS THE KEY TO SELECT SONG!,0DH,0AH,$INFO9 DB 0DH,0AH,-,0DH,0AH,|INVALID SELECTION|,0DH,0AH,-,0DH,0AH,$FREG1 DW 2 dup(262),294,262,349,262,262,294,262,392,249,262,262,523,440,349 ;曲1的频率DW 330,294,466,266,440,349,392,349,-1TIME1 DW 1,1,2,2,2,4,1,1,2,2,2,4,1,1,2,2,2,2,4,1,1,2,2,2,4 ;曲1的时间FREG2 DW 330,294,262,294,3 DUP(330) ;曲2的频率DW 3 DUP(294),330,392,392DW 330,294,262,294,4 DUP(330)DW 294,294,330,294,262, -1TIME2 DW 6 DUP(1),2 ;曲2的时间DW 2 DUP(1,1,2)DW 12 DUP(1),4FREG3 DW 330,392,330,294,330,392,330,294,330,330,392,330,294,262,294,330,392,294 ;曲3的频率DW 262,262,220,196,220,262,294,332,262, -1TIME3 DW 3 DUP(2),1,1,2,1,1,4 ;曲3的时间DW 2 DUP(2,2,1,1),4DW 3 DUP(2,1,1,1),4DSEG ENDSCSEG SEGMENT assume cs:CSEG, ds:DSEG, es:DSEG, ss:SSEG INIT PROC ;Initialize procedure mov ax, dsegmov ds, axmov es, ax;TO DO: Add your initialize code here (as your requirement)ret ;return to the MAIN procedure INIT ENDP MAIN PROC ;Here is your program entry point call INIT ;call the INIT procedure to initialize the program ;*TO DO: Add your main code here* RE: MOV DX,28BH ;关闭扬声器MOV AL,89HOUT DX,ALMOV DX,28AHIN AL,DXMOV DX,288HOUT DX,AL LEA DX,INFO1 ;输出说明信息MOV AH,09HINT 21HLEA DX,INFO2INT 21HLEA DX,INFO3INT 21HLEA DX,INFO4INT 21HLEA DX,INFO5INT 21HLEA DX,INFO8INT 21HMOV AH,01H ;读取按键INT 21HCMP AL,1 ;根据不同的按键播放不同的曲子JE MUSIC1CMP AL,2JE MUSIC2CMP AL,3JE MUSIC3CMP AL,0JE EXITLEA DX,INFO9 ;无效选择,输出错误提示MOV AH,09HINT 21HJMP RE MUSIC1:MOV SI,OFFSET FREG1 ;指向曲1的表MOV BP,OFFSET TIME1CALL PLAYJMP REMUSIC2:MOV SI,OFFSET FREG2 ;指向曲2的表MOV BP,OFFSET TIME2CALL PLAYJMP REMUSIC3:MOV SI,OFFSET FREG3 ;指向曲3的表MOV BP,OFFSET TIME3CALL PLAYJMP REEXIT:MOV DX,28BH ;关闭扬声器MOV AL,89HOUT DX,ALMOV DX,28AHIN AL,DXMOV DX,288HOUT DX,ALLEA DX,INFO7 ;输出欢迎使用信息,增加界面友好度MOV AH,09HINT 21Hmov ax, 4c00h ;The end of the program, return to the system int 21h MAIN ENDP ;TO DO: Add other procedures(PROC) here (as your requirement) ;THE PROGRAMME OF PLAYING THE MUSIC PLAY PROC ;PLAY子程序,功能上面介绍过 L1:MOV BX,DS:SI ;取频率 CMP BX,-1 ;看是否有效 JE L0 ;无效就退出 MOV CX,DS:BP ;读取时间 MOV DL,CL ;保存时间 ADD DL,30H MOV AH,02H INT 21H MOV DX,0FH ;计算计数初值,1M的十六进制为0F4240H MOV AX,4240H DIV BX MOV BX,AX MOV DX,283H ;设置计数器工作方式 MOV AL,36H OUT DX,AL MOV DX,280H ;输入计数初值 MOV AX,BX OUT DX,AL MOV AL,AH OUT DX,AL MOV DX,28BH ;开扬声器MOV AL,89HOUT DX,ALMOV DX,28AHIN AL,DXNOT ALMOV DX,288HOUT DX,AL ROD:CALL DELAY ;延时 LOOP ROD MOV DX,28BH ;关扬声器MOV AL,89HOUT DX,ALMOV DX,28AHIN AL,DXMOV DX,288HOUT DX,ALCALL DELAY_OFF ;音节间延时 ADD SI,2 ADD BP,2 JMP L1 L0:RET PLAY ENDP DELAY PROC ;延时子程序 PUSH AX PUSH BX PUSH CX PUSH DX MOV BX,09FHLL1:MOV CX,0FFFFH ;循环这么多次LOP: LOOP LOPDEC BXJNZ LL1POP DX POP CX POP BX POP AX RET DELAY ENDP DELAY_OFF PROC PUSH AX PUSH BX PUSH CX PUSH DX MOV BX,0FHLL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论