微机原理与接口技术简单的音乐选择播放器.docx
《微机原理与接口技术简单的音乐选择播放器.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术简单的音乐选择播放器.docx(12页珍藏版)》请在冰点文库上搜索。
微机原理与接口技术简单的音乐选择播放器
微机原理与接口技术
课程设计报告
题目名称:
简单的音乐选择播放器
学生姓名:
学号:
专业年级:
09级计算计科学与技术
指导教师:
时间:
2012年1月1日
1.课程设计方案
本次课程设计,由于个人能力有限最终将设计改为利用汇编制作音乐选择播放器,PC机上的大多数I/O都是由主板上的8255可编程序外围接口芯片管理的。
由其输出寄存器中的0和1两位来控制扬声器的驱动方式。
2.课程设计任务和技术要求
根据所选题目和所用的接口电路芯片设计出完整的接口电路,并在实验系统上完成电路的连接和调试通过。
要求画出程序框图,设计出全部程序并给出程序设计说明和程序注释,并在实验系统上调试通过。
能实现播放音乐并且实现单首音乐播放。
扩展功能有实现多首音乐连续播放和选择播放。
3、总体设计方案
3.1基本设计
本次所使用音乐都是由各个不同频率的音阶和其延续时间的长短来实现的。
不同的音乐是由各自播放一定时间形成的,将各音乐音阶和其延续时间存在数据段中,然后根据不同字母选择不同的音乐播放。
而我们学过的有计数器可以产生各种频率,所以我们主要采用计数器8253产生各音符,用8255并行接口来控制扬声器的开关,达到播放音乐的功能。
3.2扬声器驱动
经过放大器后控制扬声器交替地接通与断开,从而推动扬声器的
纸盆振动,发出声音PPI包括三个8位寄存器,两个用于输入功能,一个用于输出功能。
输入寄存器分配的I/O端口号为61H。
由其输出寄存器中的0和1两位来控制扬声器的驱动方式如图3-1所视。
图3-1
3.3程序运行
3.3.1主要界面
程序主要界面如图3-2所示,按A、B、C进行选择。
图3-2
4、程序设计方案
4.1数据段设计
采用固定位置的方法,将所要显示的数据放入固定位置
datasegment
messagedb0dh,0ah,9,'thisisamusicprogram!
'
db0dh,0ah,9,'amusic1',9,'bmusic2',9,'cmusic3'
db0dh,0ah,9,'pleaseselect(escexit)',0dh,0ah,'$'
4.1代码段设计
采用音乐地址宏
addressmacroa,b
leasi,a
leabp,ds:
b
endm
5.心得体会
本次课程设计随着报告的完成也将告一段落,这次实践要求我们有很扎实的理论知识做基础,把课本上各章节的内容学懂,学透,融会贯通才能达到课题的要求。
通过这次设计,我对计算机接口这门课程有了更深的理解.本次课程设计在灵活运用汇编语言编写程序的基础上,通过对8255芯片的具体功能的深刻理解,对计算机接口的硬件的设计及其驱动程序的编制和调试的方法的运用,最终完成的设计要求.在设计的过程中我对原来学过的各种知识,有了更加明确的概念,曾经觉得很抽象的问题在这次设计中通过跟同学一起讨论以及查阅参考资料也逐渐解决了不少。
通过这次课程设计我感到学到了很多东西的,一方面加强了对硬件的了解:
很好的掌握了8253的功能。
但在将理论知识转化为实际应用的过程中,我也发现了许多问题,比如说编程能力差,不能够正确熟练的操作示波器,基础知识欠缺等。
这次设计中遇到的还没有解决的问题应该成为我们追求更深层次知识的动力,努力不懈的继续向前。
6.主要参考文献
[1]沈美明•IBM-PC汇编语言程序设计•(第2版)•清华大学出版社,2007
[2]胡钢•微机原理及应用•(第1版)•机械工业出版社,2006
[3]戴梅萼,史嘉权•微型计算机技术及应用•(第4版)•清华大学出版社,2008
附页:
datasegment
messagedb0dh,0ah,9,'thisisamusicprogram!
'
db0dh,0ah,9,'amusic1',9,'bmusic2',9,'cmusic3'
db0dh,0ah,9,'pleaseselect(escexit)',0dh,0ah,'$'
;**************************音乐一*****************************
mus_freg1dw262,262,294,262,349
dw330,262,262,294,262
dw392,349,262,262,523
dw440,349,262,262,466
dw466,440,262,392,349,-1
mus_time1dw50,50,100,100,100
dw100,100,50,50,100,100
dw100,100,100,50,50,100
dw100,100,100,100,100,50
dw50,100,100,100,100,100
;***************************音乐二****************************
mus_freg2dw262,294,330,262
dw262,294,330,262
dw330,349,392
dw330,349,392
dw392,440,392,349,330,262
dw392,440,392,349,330,262
dw294,196,262
dw294,196,262,-1
mus_time2dw50,50,100,100,100
dw100,100,50,50,100,100
dw100,100,100,50,50,100
dw100,100,100,100,100,50
dw50,100,100,100,100,100
;****************************音乐三***************************
mus_freg3dw330,392,330,294,330,392,330,294,330
dw330,392,330,294,262,294,330,392,294
dw262,262,220,196,196,220,262,294,332,262,-1
mus_time3dw3dup(50),25,25,50,25,25,100
dw2dup(50,50,25,25),100
dw3dup(50,25,25),100
dataends
stacksegment
db200dup('stack')
stackends
codesegment
assumeds:
data,ss:
stack,cs:
code
start:
;**********************音乐地址宏
addressmacroa,b
leasi,a
leabp,ds:
b
endm
;***********************
movax,data;数据段装入段寄存器ds
movds,ax
movax,0b800h
moves,ax
cld
movax,3
int10h;十号doc中断
leadx,message
movah,9
int21h
input:
movah,0
int16h
cmpah,01h;按下esc键时演奏结束。
jzretu;退出
cmpah,1eh;'a'
jnzb0
moval,70h
movdx,707h
addressmus_freg1,mus_time1
callmusic
jmphere
b0:
cmpah,30h;'b'
jnzc0
moval,7
movdx,7007h
addressmus_freg2,mus_time2
callmusic
jmphere
c0:
cmpah,2eh;'c'
jnzhere
moval,7
movdx,770h
addressmus_freg3,mus_time3
callmusic
here:
jmpinput
retu:
movah,4ch
int21h
;******************************************发声
gensoundprocnear;清屏子程序
pushax;保存将要用到的寄存器
pushbx
pushcx
pushdx
pushdi
moval,0b6h
out43h,al
movdx,12h;设置被除数
movax,348ch
divdi;其商(ax)为预置值
out42h,al;后送msb
moval,ah
out42h,al;先送lsb
inal,61h;读8255端口b(61h)原值
movah,al;保存端口原值
oral,3
out61h,al;接通扬声器
wait1:
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
callkkk
freg:
movdi,[si]
cmpdi,-1
jeend_mus
movbx,ds:
[bp]
callgensound
addsi,2
addbp,2
jmpfreg
end_mus:
ret;子程序结束返回
musicendp
;***************************
kkk:
movdi,(80*2+8)*2+1
movcx,8
k1:
stosb
incdi
loopk1
adddi,8*2
moval,dh
movcx,8
k2:
stosb
incdi
loopk2
adddi,8*2
moval,dl
movcx,8
k3:
stosb
incdi
loopk3
ret
codeends
endstart