微机原理课程设计音乐播放器.docx
《微机原理课程设计音乐播放器.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计音乐播放器.docx(19页珍藏版)》请在冰豆网上搜索。
微机原理课程设计音乐播放器
《微型计算机系统原理与应用》
课程设计报告
设计题目:
音乐播放器
姓名:
学号:
指导老师:
日期:
课程设计任务书
题目:
音乐播放器
课程设计容要求:
要求:
1.根据确定的主题进行分析,确定采用的微机芯片,并复习掌握相关知识;
2.设计整体结构、框架;分析硬件框架、流程和软件框架、流程;实现汇编程序;
3.测试完成汇编程序;
4.按要求完成课程设计和报告、答辩。
目的:
课程设计注重提高学生应用能力、创新能力。
在掌握了基本的实验方法和实验技能且理论教学完成的基础上,要求学生通过一周的集中工作,初步锻炼综合运用所学知识的能力,通过讨论与合作,完成一项完整的设计工作。
更深入的了解微机芯片的用法和程序的完成过程,调试方法与技巧。
通过这个环节来加深对《微机原理与接口技术》所学容的理解和融会贯通。
设计者:
指导老师意见:
指导老师签名:
第一章课程设计的任务和目的
1.1课程设计任务
本课程设计题目是:
设计并实现一个音乐播放器。
1.自己选用芯片和其它的硬件。
2.自行设计电路并使用汇编语言编写程序完成音乐播放器功能。
3.利用8253作为音阶频率发生器,对一段音乐进行编码后存入音符表,程序中可调用音符表自动播放音乐,从中了解音乐播放的原理。
4.利用8253A和PC机,设计并实现简易音乐播放器
5.使用汇编语言编写音乐播放程序。
6.上机调试程序并联机,利用试验箱提供的扬声器发声。
7.完成实验报告。
1.2课程设计目的
本课程设计注重提高学生应用能力、创新能力。
在掌握了基本的实验方法和实验技能且理论教学完成的基础上,要求学生通过一周的集中工作,初步锻炼综合运用所学知识的能力,通过讨论与合作,完成一项完整的设计工作。
更深入的了解微机芯片的用法和程序的完成过程,调试方法与技巧。
通过这个环节来加深对《微机原理与接口技术》所学容的理解和融会贯通。
设计音乐播放器主要目的:
Ø通过D/A装换器产生模拟信号,在实验平台上实现简易音乐播放器。
Ø了解利用数模转换器产生音乐的基本方法。
Ø掌握定时/计数器8253A的使用。
第二章课程设计基础知识
2.1定时/计数器8253A
在微机与控制系统中,经常要用到定时信号。
如系统的日历时钟,动态存储器刷新。
对外部执行机构控制时也需要定时中断、定时检测、定时查询等。
定时的方法主要是两种:
软件定时:
利用指令的执行时间设计循环程序,使CPU执行延迟子程序的时间就是定时时间。
缺点:
执行延迟时,CPU一直被占用,降低了CPU的效率。
硬件定时:
用计数器/定时器作为主要硬件,在软件简单指令的控制下产生精确的时间
延迟。
突出优点为计数时不占用CPU时间,如利用定时器/计数器产生中断信号,可建立多作业环境,提高了CPU效率。
主要功能:
(1)每片上有3个独立的16位的减计数器通道。
(2)对于每个计数器,都可以单独作为定时器或计数器使用,并且都可以按照二进
制或十进制来计数。
(3)每个通道都有6种工作方式,都可以通过程序设置或改变。
(4)每个计数器的速率可高达2MHz。
最高的计数时钟频率为2.6MHz。
2.28253A部结构
8253的部结构如图所示,它主要包括以下几个主要部分:
图2-18253的部结构
(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.38253A外部引脚
8253芯片是具有24个引脚的双列直插式集成电路芯片,其引脚分布如图所示。
8253芯片的24个引脚分为两组,一组面向CPU,另一组面向外部设备,各个引脚与其所传送信号的情况,介绍如下:
(1).D7~D0:
双向、三态数据线引脚,与系统的数据线连接,传送控制、数据与状态信息。
(2).
:
来自于CPU的读控制信号输入引脚,低电平有效。
(3).
:
来自于CPU的写控制信号输入引脚,低电平有效。
(4).
:
芯片选择信号输入引脚,低电平有效。
图2-18253的引脚
(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作为计数脉冲源,计数方式可以是二进制,计数围1~10000H,也可以是十进制,计数围1~65536。
门控端GATE用于控制计数开始和停止。
输出OUT端当计数器计数值减到零时,该端输出标志信号。
图2-2计数器部结构
2.58253A端口地址
图2-38253A端口地址
2.68253A功能
8253A既可作定时器又可作计数器:
(1)计数:
计数器装入初值后,当GATE为高电平时,可用外部事件作为CLK脉冲对计数值进行减1计数,每来一个脉冲减1,当计数值减至0时,由OUT端输出一个标志信号。
(2)定时:
计数器装入初值后,当GATE为高电平时,由CLK脉冲触发开始自动计数,当计数到零时,发计数结束定时信号。
除上述典型应用外,8253A还可作频率发生器、分频器、实时钟、单脉冲发生器等。
2.78253A控制字
图2-48253A控制字
说明:
(1)8253A每个通道对输入CLK按二进制或二十进制从预置值开始减1计数,减到0时从OUT输出一个信号。
(2)8253A编程时先写控制字,再写时间常数。
2.88253A工作方式
(1)方式0:
计数结束产生中断方式
当写入控制字后,OUT变为低电平,当写入初值后立即开始计数,当计数结束时,变成高电平。
(2)方式1:
可编程单次脉冲方式
当初值装入后且GATE由低变高时,OUT变为低电平,计数结束变为高电平。
(3)方式2:
频率发生器方式
当初值装入时,OUT变为高;计数结束,OUT变为低。
该方式下如果计数未结束,但GATE为低时,立即停止计数,强制OUT变高,当GATE再变高时,便启动一次新的计数周期。
(4)方式3:
方波发生器
当装入初值后,在GATE上升沿启动计数,OUT输出高电平;当计数完成一半时,OUT输出低电平。
图2-5方波图
方式3与方式2的工作方式类似,也是在初始化完成后能重复循环计数,只是输出的波形不同。
<1>计数过程
当把方式3的控制字写入控制字寄存器后,输出端OUT变成高电平,作为初始电平。
再将计数初值写入计数初值寄存器CR中,再经过一个时钟周期,计数初值被移入计数执行单元CE中,从下一个时钟脉冲开始作减1计数,方式3的计数过程分为两种情况:
第一种情况:
计数初值为偶数,当作减1计数减到N/2时,输出端OUT端变成低电平,减到0时,输出端OUT变成高电平,并重新从初值开始新的计数过程。
若GATE为高电平,则一直重复同样的计数过程。
可见,输出端OUT输出连续的方波,故称方波发生器。
第二种情况:
计数初值为奇数,当作减1计数减到(N+1)/2以后,输出端OUT变成低电平,减到0时,输出端OUT又变成高电平。
并重新从初值开始新的计数过程。
这时输出端的波形为连续的近似方波。
<2>门控信号的影响
工作在方式3时,门控信号GATE的功能与工作方式2一样,即GATE为高电平时,允许计数;GATE为低电平时停止计数。
GATE引脚上的信号从低电平跳到高电平时,将会重新把计数初值寄存器CR中的容移入计数执行单元CE中,并以新装入的值重新开始计数。
<3>新的计数初值对计数过程的影响
如果在计数过程中写入新的初值,而GATE信号一直维持高电平,则新的初值不会影响当前的计数过程,只有在计数结束后的下一个计数周期,才按新的初值计数。
若写入新的初值后,遇到门控信号的上升沿,则结束现行的计数过程,从下一个时钟脉冲下降沿开始按新的计数初值进行计数。
可见,工作在方式3时,当计数初值为偶数,OUT端输出连续的标准方波;当计数初值为奇数,在每个计数周期,有(N+1)/2个周期输出高电平,(N-1)/2个时钟周期输出低电平,OUT端输出连续的近似的方波。
第三章详细设计
3.1硬件设计
音乐播放器用到相关硬件:
(本课程设计主要在DVCC-598JH+微机仿真实验系统实现)
1.定时/计数器8253A
2.扬声器和喇叭驱动模块
3.频率发生芯片74LS393
硬件连接:
1定时/计数器8253A芯片模块的CLK2接时钟频率选择模块74LS393的T7端口,分频器的频率源为5000HZ。
2定时/计数器8253A芯片模块的GATE2接+5V,提供高电平。
3定时/计数器8253A芯片模块的OUT2接喇叭驱动驱动模块的SIN端口。
4喇叭驱动驱动模块的J5插座接扬声器的J5插座。
8253A的CLK2接分频器74LS393(右上方)的T7插孔,分频器的频率源为5000。
图3-1硬件连接框架图
图3-2扬声器电路
图3-3扬声器J5插口
如图3-2为音响电路的控制输入插口SIN,控制输入信号经放大后接喇叭。
图3-474LS393引脚图
图3-6DVCC-598JH仿真实验系统框图
3.2软件设计
图3-7软件流程图
music子程序是音乐子程序,SI指向曲中的频率,BP指向曲中的时间节拍。
从SI的指向的音节表中取一个频率,只要不是0,即有效就再读取时间,然后调用speaker子程序,计算计数初值送入计数器,产生各种频率信号,再送至扬声器,根据所取的时间调用若干次延时子程序。
这段时间扬声器就发出该频率的声音,延时结束,再修改SI和BP,指向下一个频率,重复上面的工作。
播放两首音乐后自动停止。
第四章程序调试
把程序输入PC机后,保存为.asm文件。
启用DVCC系统:
1建立汇编源程序.
2建立连接。
3编译为目标文件
4调试。
5不通过,重新修改(语句错误、音调频率不准、音调节拍不符合)
6重新修改、调试。
7正确运行。
第五章总结
经过一个星期的课程设计,完成任务的效果和预想中有很大的出入,虽然中间遇到了一些问题,但经过我们的努力,还是把问题给解决了。
这次课程设计对我综合运用所学知识的能力的提高有不小的帮助,之前做的实验都是很简单的编程,跟硬件结合也没有这么复杂,实现的功能都比较简单,可是这次要实现的功能相对来说比较复杂,要求掌握的知识比较全面。
经过这次的课程设计,再一次的印证了理论来源于实践,而实践又能升华理论这一个观点。
首先,要实现题目要求的功能并有所创新,我们必须全心地投入其中,养成一种敢于钻研敢于创新的习惯。
在把课程要现到实际中来的过程中,首先必须清楚明白地了解几个参考程序的每一行的意思,这就需要敢于静心钻研。
为了把使得程序更加完整,就必须进行创新,这就需要敢于创新。
其次,通过课程设计,让我在课本的基础上,更深入的了解了各种芯片的用法和程序的完成过程,调试方法与技巧。
总之,这次的课程设计在很大程度上提升了我的动手能力了加深了我对理论知识的理解。
第六章参考文献
1.《微机原理与接口技术》(第二版)人民邮电周明德主编
2.《汇编语言程序设计》中国水利水电相伟主编
3.《DVCC系列单片机微机仿真实验指导书启东计算机厂著
4.《单片机接口技术》复旦大学王修才编著
5.《单片机原理与其接口技术》(第二版)清华大学胡汉才编著
6.《单片微机原理与应用》机械工业丁元杰主编
7.《单片机原理与接口技术》(修订版)航空航天大学朝青编著
8.《单片机原理与应用》希望电子木马科技编著
9.《单片机原理与接口技术学习辅导》电子工业朱定华编著
10.《单片微机接口与系统设计》哈工大高明编著
11.网上资料
第七章附录
7.1源代码
CODESEGMENT
ASSUMECS:
CODE
ORG1000H;首地址
START:
JMPmusic;跳转进music
music:
leasi,freq;取freq的偏移地址
leabp,time;取time的偏移地址
Lop:
movdi,cs:
[si];把[si]的容放到di
cmpdi,0;0用于判断是否结束歌曲
jemusic2;结束则跳转
movbx,[bp];把[bp]的容放到bx
callspeaker
addSI,2;取下一频率值
addBP,2;取下一时间节拍值
jmpLop;跳回lop循环
music2:
;音乐2子程序
leasi,freq2
leabp,time2
Lop2:
movdi,[si]
cmpdi,0
jefin;music2结束后转到fin关闭扬声器
movbx,[bp]
callspeaker
addSI,2
addBP,2
jmpLop2
fin:
moval,ah;写回扬声器端口61H
out61h,al
;_________-音乐子程序-________________________________________
speakerproc
pushax;保存堆栈
pushbx
pushcx
pushdx
pushdi
;___________初始化部分__________
moval,10110110B;对计数器写控制字,选计数器2,先写低8位,后写高8位。
out43h,al;方式3(方波发生器)、双字节写和二进制计数方式写到控制口
movdx,00h;设置被除数
movax,5000
divdi;(DI)=频率,商→AL,余数→AH
out42h,al;先送LSB最低有效位,42H为8253的通道2端口
moval,ah
out42h,al;后送MSB最高有效位
wait1:
movcx,6;设循环次数6
delay1:
loopdelay1
decbx;循环持续bx次,即传进来的节拍时间
jnzwait1
;
popdi;恢复堆栈
popdx
popcx
popbx
popax
ret
speakerendp
;_______歌曲乐谱________________
;歌曲1:
《两只老虎》
freqdw2dup(262,294,330,262)
dw2dup(330,349,392)
dw2dup(392,440,392,349,330,262)
dw2dup(294,196,262),10dup(-1),0;歌曲频率
timedw8dup(10000)
dw2dup(10000,10000,20000)
dw12dup(9000)
dw6dup(18000);歌曲时间节拍值
dw10dup(10000)
;歌曲2:
《MerryChristmas》
freq2dw7dup(330),392,262,294,330,4dup(349),2dup(330),330,294,294,262,294,392
dw7dup(330),392,262,294,330,4dup(349),2dup(330),392,392,349,294,262,0
time2dw2dup(25*400,25*400,50*400),4dup(25*400),100*400,2dup(25*400,25*400,50*400)
dw4dup(25*400),2dup(50*400),2dup(25*400,25*400,50*400)
dw4dup(25*400),100*400,2dup(25*400,25*400,50*400),4dup(25*400),100*400
CODEENDS
ENDSTART
7.2各个音符的对应频率
音符 频率/HZ半周期/us 音符 频率/HZ 半周期/us
低1DO 262 1908 #4FA# 740 0676
#1DO# 277 1805 中5SO 784 0638
低2RE 294 1700 #5SO# 831 0602
#2RE# 311 1608 中6LA 880 0568
低3M 330 1516 #6LA# 932 0536
低4FA 349 1433 中7SI 988 0506
#4FA# 370 1350 高1DO 1046 0478
低5SO 392 1276 #DO# 1109 0451
#5SO# 415 1205 高2RE 1175 0426
低6LA 440 1136 #2RE# 1245 0402
#6LA# 466 1072 高3M 1318 0372
低7SI 494 1012 高4FA 1397 0358
中1DO 523 0956 #4FA# 1480 0338
#1DO# 554 0903 高5SO 1568 0319
中2RE 578 0842 #5S0# 1661 0292
#2RE# 622 0804 高6LA 1760 0284
中3M 659 0759 #6LA# 1865 0268
中4FA 698 0716 高7SI 1976 0253