汇编钢琴发声与两只老虎程序_第1页
汇编钢琴发声与两只老虎程序_第2页
汇编钢琴发声与两只老虎程序_第3页
汇编钢琴发声与两只老虎程序_第4页
汇编钢琴发声与两只老虎程序_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

燕山大学课程设计报告汇编与接口课设学院信息科学与工程学院年级专业计算机科学学生姓名学号指导教师提交日期2011/7/1实验一钢琴程序实验目的进行汇编语言程序设计应用的综合性训练。综合运用汇编语言循环程序和子程序编程方法,巩固提高汇编语言程序设计能力应用水平。二.实验要求按下数字键1-8发出哆来咪发嗖拉西多的声音,当按下 ctrl+c键时退出程序三.设备与环境PC兼容机、Windows操作系统、汇编程序四.实验分析1.程序开始先将查好的频率写入到数据段中,定义主程序,当用户从键盘输入时,先判断是否是结束键,如果是结束键则退出,如果不是,再判断是不是1-8之间的数字键,若不是,则跳转到出错处理部分;如果是,则去频率表中调出相应的频率,并进入到发音子程序中。2.发音PC系列机中,利用8254计数器2的输出,控制扬声器的发生音调,作为机器的报警信号或者伴音信号。计数器2的OUT端经过放大后接扬声器,OUT端还和8255A的B端口输出PB1相与。所以要使扬声器工作,要求8255A的PB1和PB0同时为1。向43端口中写入计数器2控制字,在AX中设置初值为1234DCH,计数值=1234DCH/频率,然后先低后高向42端口写入计数值。之后将8255A的PB1和PB0修改为1并将原来的值保存在AH中,以便恢复。为了建立一个与处理器无关的时间延迟,利用硬件,通过监控端口61H的PB4,使PB4每触发一次,以产生一个固定不变的时间基准。Waitf子程序就是产生一个时间延迟的程序,在CX中放入663产生10ms时延,再向BX中放入100来产生1s的持续时间。五.参考程序:stackssegmentpara'stack';定义堆栈stacks db64dup('stack...')stacksends;------------------------------------dsegsegmentpara'data'tabledw262;1 dw294;2 dw330;3 dw349;4 dw392;5 dw440;6 dw494;7 dw523;8dsegends;------------------------------------csegsegmentpara'code'assumecs:cseg,ds:dseg,ss:stacksmainprocfar;设置数据段的段地址movax,dsegmovds,axnew_note:movah,01h;是否结束int21hcmpal,20hjeexitmovbx,offsettablecmpal,'1';判断是否为1-8的数jbnew_notecmpal,'8'janew_noteandax,0fhshlax,1;(ax-1)*2字存储subax,2movsi,axmovdi,[bx][si]callsoundfjmpnew_notesoundfprocnear;调用子程序 pushax pushbx pushcx pushdx pushdi moval,0b6h out43h,al movdx,12h;设置方式控制字 movax,348Ch divdi out42h,al moval,ah out42h,al inal,61h movah,al oral,3 out61h,almovbx,100delay:movcx,663;10ms通过循环调用实现 callwaitf decbx jnzdelay moval,ah out61h,al;恢复8255A端口原来的值 popdi popdx popcx popbx popax retsoundfendpwaitfprocnearpushax waitf1: inal,61h andal,10h;判断pb4是0还是1 cmpal,ah jewaitf1 movah,al loopwaitf1 popax retwaitfendpexit:movax,4c00h;返回DOSint21hmainendpcsegends;------------------------------------endmain六、代码运行与结果在键盘上按下1-8数字时,扬声器会奏出八个不同的音阶,同时频幕上显示出输入字符;输入Ctrl+C退出,如果输入非1-8或空格字符,程序不予响应。实验二用定时器奏出一段小乐曲课程设计的目的掌握8254的工作方式及应用编程。掌握8254的典型应用电路解法。学会使用定时器产生声音的方法编程。课程设计安排时间:2011年6月27日——2011年7月1日地点:信息馆101课程设计内容要求利用定时器产生声音的方法编程,使PC机或机箱奏出一段小乐曲。一个字符有音高、音长,音高是频率,音长是节拍,定义成两个数据表。产生频率公式:1MHz/给定的频率=1234DCH/给定的频率音阶1234567对应频率262294330349392440494四.实验说明及步骤8254是可编程间隔定时器。为8253的改进型,比8253具有更优良的性能。8254具有一些基本功能:有三个独立的16位计数器;每个二进制可按二进制或十进制计数;每个计数器可编程工作于6种不同的工作方式;8254有读回命令,除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容;计数脉冲可以是有规律的时钟信号,也可以是随机信号。计数初值如下:其中fclki是输入脉冲的频率fouti,n=fclki/fouti8254的工作方式如下:方式0:计数到0结束输出正跃变信号方式。方式1:硬件可重触发单稳方式。方式2:频率发生器方式。方式3:方波发生器。方式4:软件触发选通方式。方式5:硬件触发选通方式。8254的方式控制字格式D7D6D5D4D3D2D1D0计数器选择读写格式选择工作方式选择计数码制选择计数器0计数器110-计数器211-读出控制字标志00-锁存计数值01-读/写低八位10-读/写高八位11-先读/写低八位、再读/写高八位000-方式0001-方式1010-方式2011-方式3100-方式4101-方式50-二进制数1-十进制数8254读出控制字格式D7D6D5D4D3D2D1D0110-锁存计数值0-锁存状态信息计数器选择(同方式控制字)0五.参考程序MY8254_COUNT0EQU0E440HMY8254_COUNT1EQU0E441HMY8254_COUNT2EQU0E442HMY8254_MODEEQU0E443HDATASEGMENTFTABLEDW2DUP(262,294,330,262)DW2DUP(330,349,392)DW2DUP(392,440,392,349,330,262)DW2DUP(294,196,262),-1TTABLEDW8DUP(8)DW2DUP(8,8,16)DW2DUP(6,2,6,2,8,8)DW2DUP(8,8,16);定义频率表和时延表DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,FTABLELEABP,DS:TTABLEFREQ:MOVDI,[SI]CMPDI,-1JESTARTMOVBX,DS:[BP]CALLSOUND;调用发声子程序ADDSI,2ADDBP,2JMPFREQSOUNDPROCNEARPUSHAXPUSHBXPUSHCXPUSHDXPUSHDIMOVDX,MY8254_MODEMOVAL,36HOUTDX,AL;设置控制字寄存器MOVDX,12HMOVAX,34DCHDIVDI;计算频率值并存储到AX中MOVDX,MY8254_COUNT0OUTDX,ALMOVAL,AHOUTDX,AL;将计算得到频率值输入计数器CALLDELAY;调用时延子程序CALLBREAK;调用任意键退出子程序POPDIPOPDXPOPCXPOPBXPOPAXRETSOUNDENDPDELAYPROCNEAR;时延子程序PUSHAXMS250:MOVCX,2801US015:INAL,61HANDAL,10HCMPAL,AHJEUS015MOVAH,ALLOOPUS015DECBLJNZMS250POPAXRETDELAYENDPBREAKPROCNEAR;任意键退出子程序MOVAH,06HMOVDL,0FFHINT21HJE

温馨提示

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

评论

0/150

提交评论