




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
陕西电子信息职业技术学院毕业论文目录摘要 . 1 绪论 . 2 1 设计思路 . 3 2 乐理知识 . 4 2.1 乐理知识简述 . 4 2.2 音符与频率的关系 . 4 3 设计原理 . 4 3.1 8259A的功能 . 5 3.2 8253 的功能 . 6 3.3 发声原理 . 8 3.4 DOS功能调用 . 11 3.4.1 1号功能调用 . 11 3.4.2 2号功能调用 . 11 3.4.3 9号功能调用 . 12 3.4.4 10号功能调用 . 12 3.4.5 16号功能调用 . 13 3.5 子程序调用 . 14 4 程序 . 13 4.1 程序流程图 . 13 4.2 程序代码 . 14 4.3 程序的运行 . 20 结束语 . 23 致谢 . 24 参考文献 . 24 摘要 用计算机来解决实际问题,需要编写程序。程序是由指令组成的,一条条指令规定了计算机究竟要执行什么样的操作,计算机只要按编写的顺序执行完程序中的指令,问题也就解决了。汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。 本设计是基于汇编语言与接口技术的音乐盒设计。依据PC机系统发声的基本原理,制作成多功能音乐盒。 该音乐盒主要实现的功能有: 1、程运行后首先在屏幕上显示出乐曲菜单,制作者姓名。 2、用键盘键A、B、C选择相应的乐曲。 3、输入错误时要有适当提示,并允许重新输入。 4、选择Q键后可以正常退出程序。 5、允许中断。可以在没有听完整首歌曲时人为中断听下一首歌曲,或退出。 本设计利用8255A、8253的工作原理发声。用masm、link软件对音乐盒源程序进行调试。 关键词:汇编语言 计算机接口技术 音乐盒 8253 8255A 绪论编写程序的语言有三种:高级语言,汇编语言和机器语言。机器语言是一种面向机器的程序设计语言。指令系统是机器语言的基础,其指令是由0和1构成的二进制代码串,其编写的程序可以被计算机直接识别,直接执行。一般说来,机器言程序的执行速度快,占用的内存空间小。汇编又称为符号语言,实际上是一种符号化的机器语言。汇编语言比机器语言直观,容易记忆和理解,用汇编语言编写的程序也比机器语言程序易读、易检查、易修改。汇编语言程序设计在微机应用中占有重要地位.一般来说,凡是在微机中涉及与硬件电路有关的应用系统,如微机控制系统中的检测和控制部分,仪器仪表中的计算机控制和数据处理部分,家用电器的计算机控制部分等,其应用程序部分都是用汇编语言来编写的。 在计算机系统中除了CPU以及基本硬件之外,还有各种外部设备,比如显示器、键盘、打印机、磁盘驱动器、光盘驱动器等。这些外部设备需要与CPU进行大量的信息交换,根据CPU的要求进行各种操作。进行信息交换时,由于各种原因(比如电平、时序等的不同),这些外部设备不能与CPU直接相连,它们之间的信息交换必须经过一个中间电路,也就是接口电路才能实现。 本设计是基于汇编基础上,利用接口电路中的8253,8255功能使电脑发声而设计的音乐盒。 音乐盒的主要功能是,根据按键不同,而选择播放不同的歌曲,和退出等操作。 设计思路 PC的扬声器驱动系统如图1-1所示。 图1-1 PC的扬声驱动系统 扬声器的发声是由输出寄存器(即8255A的PB口)的两位进行控制的。输出寄存器的端口地址为61H。 扬声器发声最简单的方式:直接对端口61H的D1位交替输出0或1(同时61H的D0位清0),使扬声器交替地通与断,推动扬声器发声。 由于扬声器总是随时可用的,因此CPU可用直接I/O方式对其进行操作。 8253定时计数器的计数通道2用于提供系统的扬声器音频信号,但8253计数器通道2输出的方波受8255A PB0输出高电平时才允许计数通道2的方波输出。该方波又与PB1相与后送扬声器的驱动电路,去驱动扬声器发声。一般情况下,可让PB0输出高电平,通过对8253编程设置方波输出频率以控制发声频率。通过控制8255A PB1输出以控制发声时间。 8253计数值的计算方法为: 计数值时钟频率音符频率(时钟频率1.19318 MHz1234DCH) 所以利用8255和8253来制作音乐盒,详细步骤见下面设计原理部分. 2乐理知识 2.1 乐理知识简述1 2 3 4 5 6 7 do re mi fa sol la si 七个音不都一样高,而是从左到右一个比一个高上去的,一这七个音为基础,在它们的上方或下方加圆点来表明更高或更低的音,上方的圆点叫“高音点”下方加的圆点叫“低音点” 。 长短音:音乐中的音不光有高低,还要有长短,一个音可以唱得时间很长,也可以唱得很短促。长短音的标记方法,主要用“增时线”和“减时线” ,加写在音的右边或下边,如在5的右边加写一条横线(5),就使5延长了一倍,要是在5的下边写一条横线( 5 ),就使5减短了一半,也即减短1/2。附点在音符右方加一个圆点,这个音叫“附点音符” ,附点的作用是把音符的时值延长1/2。 2.2 音符与频率的关系不包括钢琴键盘的黑键,用简譜表示的C大调音符与频率近似值的对应关系如下: . 音符 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 . . . . . . . 频率131 147 165 175 196 220 247 262 294 330 349 392 440 494 523 (C) 130.8(D) 146.8(E) 164.8(F) 174.6(G) 196.0(A) 220.0(B) 246.9(C) 261.7( 中)(D) 293.7(E) 329.6(F) 349.2(G) 392.0(A) 440.0(B) 493.9(C) 523.3138.6(C#, Db)155.6(D#, Eb)185.0(F#, Gb)207.7(G#, Ab)233.1(A#, Bb)277.2(C#, Db)311.1(D#, Eb)370.0(F#, Gb)415.3(G#, Ab)466.2(A#, Bb)3 设计原理3.1 8259A的功能 8255A是一种功能很强的可编程并行接口芯片,采用NMOS工艺制造,它有三个8位并行输入/输出端口;可工作于三种工作方式,分别为方式0、方式1、方式2;能按无条件传送、查询传送和中断传送方式进行数据传送。 8255A的内部结构如图3-1所示。 图3-1 8255A的内部结构 控 寄计 A组端 A(8)A组控 部 PA7PA0A组端 C(只4位)PC7PC4B组端 C( 4位)PC3PC0B组控 部 B组端 B(8)PB7PB0内部DB(8) 数缓 数D7D0读/ 控 逻 RESETA0A1RDWRCS68255A的功能如表31所示 表3-1 8255A的端口寻址和操作功能表 海南软件职业技术学院毕业设计(论文) 73.2 82533.2 82533.2 82533.2 8253的功能8253的内部结构 8253的内部结构如图3-2a所示 图3-2a 8253的内部结构 8253读/写逻辑信号组合的功能以及各计数器通道、控制字寄存器在PC机中的地址分配如表3-2a所示 表3-2a 8253读/写逻辑信号组合功能及地址分配 计 0号9CLK011GATE010OUT0计 1号15CLK114GATE113OUT1计 2号18CLK216GATE217OUT2 数缓 读/只逻 2223192021控 寄 内部 数2412GNDVCCA0RDWRA1CS控 数D7D0 数18=第9页=海南软件职业技术学院毕业设计(论文) 88253的控制字 8253的控制字用于选择哪个计数器通道工作,三个通道可同时工作,但是要分别进行初始化;用于规定读/写操作格式或类型,8253可以有8位的计数值或16位的计数值,可以按二进制计数或按二十进制计数;用于选择工作方式,8253共有六种工作方式。 8253是由主机编程设定的,通过把一个8位的控制字写入8253的控制字寄存器,使8253按照某种给定的方式工作。控制字的定义如图3-2b所示。 图3-2b 8253的控制字 3333.3 .3 .3 .3 发声原理D7 数 D6D5D4D3D2D1D01 BCD 0 二 000 方 0001 方 1010 方 2011 方 3100 方 4101 方 5110 方 2111 方 3工 方 数 00 计 01 8位10 只8位11 先 8位 再 只8位读/ 写 00 001 110 211 无 , 不 数 98253在PC机中的应用 IBM PC/XT机系统板上使用了一片8253,其连接如图3-3所示。计数器通道2用于驱动扬声器发声。8253的端口地址范围是40H43H,片选 图3-3 PC/XT中的8253 单拍脉冲的宽度n1输入时钟CLK的周期n1Tclkn1(1/Fclk) n1单拍脉冲的宽度/输入时钟CLK的周期 计数器2的发声程序 计数器2的输出送往扬声器发声电路。门控信号GATE2接8255并行接口电路的PB0,因此计数器2的计数过程将受到PB0的控制,而PB0又受I/O端口61H的D0位的控制, 当PB0=1时,OUT2才能输出方波。OUT2和PB1经过一个与门接至扬声器驱动电路。因此OUT2也将受到PB1的控制,而PB1又受I/O端口61H的D1位的控制。ROM-BIOS中的发声子程序BEEP使计数器2工作于方式3,产生约为1 kHz的方波,程序如下: BEEP PROC MOV AL, 10110110B ;计数器2,方式3,16位计数,二进制计数 OUT 43H, AL ;写入控制字 MOV AX, 0533H ;计数初值为0533H1331(1.193 18 MHz/1331896 Hz) OUT 42H, AL ;写入计数初值低8位 MOV AL, AH OUT 42H, AL ;写入计数初值高8位 IN AL, 61H ;读8255端口B的原值 =第11页=海南软件职业技术学院毕业设计(论文) 10MOV AH, AL ;暂存AH OR AL, 03H ;使PB01、PB11 OUT 61H, AL ;输出,使扬声器发声 SUB CX, CX LOP: LOOP LOP ;延时 DEC BL ;BL值由入口参数提供,决定发声长短 JNZ LOP ;BL6发长声,BL1发短声 MOV AL, AH OUT 61H, AL ;恢复8255端口B的原值,停止发声 RET ;返回 BEEP ENDP 利用PC机中的定时器/计数器电路8253可以使扬声器发声并且还可以用来演奏简单的乐曲。 声音的产生 在PC机中产生声音可以通过使用8253的计数器2,工作于方式3来实现。设置控制字的指令为 MOV AL,0B6H ;计数器2,方式3,16位计数,二进制计数 OUT 43H,AL 设置好控制字后要根据声音的频率对计数器2(也就是42H端口),设定对应的计数初值。指令如下: MOV AL,计数初值低8位 OUT 42H,AL MOV AL,计数初值高8位 OUT 42H,AL 然后通过设定PC机中的并行接口电路8255的PB0、PB1,打开扬声器的门电路,就可以发出该频率的声音了。实现该功能的指令如下: IN AL, 61H ;读取8255端口B的值 MOV AH, AL ;暂存AH OR AL, 03H ;使PB01、PB11 OUT 61H, AL ;输出,使扬声器发声 如果提供给8253计数器2的CLK的时钟频率为1 193 180 Hz,即1234DCH,并把要求发出的声音的频率值放入DI中,使AX获得对应的计数初值的指令为 MOV DX,12H MOV AX,34DCH DIV DI 11 上述指令执行后计数初值在AX中,然后可以分别按低字节和高字节输出至42H端口,使计数器产生所需频率的声音(音符)。在实际应用中,计数初值要根据实际系统中的时钟频率来计算。 延时程序及其作用 当时钟为1 193 180 Hz时,延时10 ms可用如下延时程序实现: DELAY:MOV CX,2801 LOP10: LOOP LOP10 如果实际应用环境中的时钟频率较高,则应重新计算并设置延时时间。 编写演奏乐曲需要把与音符所对应的频率放在FREQ表中,把与音符所对应的节拍(延时次数值)放在TIME表中。然后由主程序控制,逐一按音符的频率和节拍值,使扬声器发出声音。当与音符对应的频率值为0时,停止演奏。 子程序PLAY的功能是使扬声器发出声音,演奏乐曲。由DI指定音符的频率,BX指定与音符对应的节拍。SI指向频率表FREQ,BP指向节拍表TIME。频率表以0结尾,用于作为程序结束的条件:如果取来的频率值为0,则程序结束。 3.4 DOS功能调用. .4.1 1号功能调用号功能调用号功能调用号功能调用 从键盘输入一个字符(1号调用) 调用格式: MOV AH,1 INT 21H 扫描键盘将从键盘输入的一个字符的ASCII码送入AL中(回显 )。 .4.2 2号功能调用号功能调用号功能调用号功能调用 屏幕显示一个字符(2功能号调用) 调用格式: MOV AH,2 MOV DL,字符的ASCII码 INT 21H .4.3 9号功能调用号功能调用号功能调用号功能调用 屏幕显示一个字符串(9功能号调用) 调用格式: MOV AH,9 MOV DX,字符串的首地址(偏移地址) INT 21H 4.4 10号功能调用从键盘输入字符串 (10功能号调用) 功能: 从键盘接收字符串送入内存的输入缓冲区,同时送显示器显示。 调用前要求: 先定义一个输入缓冲区 MAXLEN DB 100 ;第1个字节指出缓冲区能容纳的字符个数,即缓冲区长度,不能为0 ACLEN DB ? ;第2个字节保留,以存放实际输入的字符个数 STRING DB 100 DUP(?);第3个字节开始存放从键盘输入的字符串。 调用格式: LEA DX,MAXLEN(缓冲区首偏移地址) MOV AH,10 INT 21H 注意:调用时,要求DS:DX指向输入缓冲区 4.5 16号功能调用键盘驱动程序 (16号功能调用) 1、当某个BIOS程序中具有多种不同功能时,用不同的编号功能号加以区分,并约定功能号存放在寄存器AH中。其调用方法与DOS功能调用类似: (1) 功能号AH (2) 入口参数指定寄存器 (3) 指令“INT n”实现对BIOS子程序的调用 下面以键盘I/O中断调用为例介绍BIOS中断调用的方法。 5 子程序调用 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。调用子程序的程序称为主调程序或主程序 子程序的结构: 1、 子程序与循环程序的区别 2、子程序的调用与返回 3、入口参数与出口参数的传递 4、现场的保护与恢复 子程序的定义 子程序的定义是由过程定义伪指令PROC和ENDP来完成的。其格式如下: 过程名 PROC NEAR/FAR 子程序体 过程名 ENDP 其中PROC表示过程定义开始,ENDP表示过程定义结束。过程名是过程入口地址的符号表示。 一般过程名同标号一样,具有三种属性,即段属性、偏移地址属性以及类型属性 子程序体一般包括: 1、保护现场 2、根据入口参数进行处理 3、产生出口参数 4、恢复现场 5、RET 子程序的调用与返回: 调用 CALL 标号 功能: 1、主程序的下一条指令入栈,即IP指针入栈 2、转向子程第的第一条指令,既标号指定的子程序第1条指令的偏移地址送IP 返回 RET 功能:返回到主程序CALL指令的下一条指令,即将下一条指令地址送IP。 4.1 程序流程图 4.2 程序代码程序代码程序代码程序代码 DATA SEGMENT STR1 DB 0DH,0AH,welcom you come to here! Wenguanghong dian zi gong cheng xi 09 dian 301ban STR2 DB 0DH,0AH,this is a music program !$ STR3 DB 0DH,0AH,please select !$ STR4 DB 0DH,0AH,input error !$ STR5 DB 0DH,0AH,please input again !$ 15STR6 DB 0DH,0AH,A shao nian zhuang zhi bu yan chou $ STR7 DB 0DH,0AH,B wo niu yu huang li niao $ STR8 DB 0DH,0AH,C mei li de tong hua $ STR9 DB 0DH,0AH,Q EXIT $ FREQ1 DW 294,392,392,294,330,262,220,262,196,262,262,220,262,294,330,392,294,294 DW 294,392,392,294,330,262,220,262,220,196,196,220,262,294,330,220,196,196 DW 392,392,392,330,392,440,392,330,440,440,392,330,294,392,294,330,262,220 DW 392,220,262,220,392,440,392,330,392,294,392,392,392,330,392,440,440,392 DW 330,440,440,392,440,392,330,294,294,392,294,330,262,220,196,220,262,220,294,262,294,220,196 DW 392,294,330,262,220,196,220,262,220,294,262,294,220,196,196,0 TIME1 DW 25,25,37,6,6,25,12,12,50,19,6,12,12,25,12,12,50,50 DW 25,25,37,6,6,25,12,12,50,19,6,12,12,12,25,12,50,50 DW 19,6,12,6,6,37,12,12,12,6,6,12,50,12,6,6,12,12 DW 19,6,25,12,12,6,6,6,6,50,19,6,12,6,6,12,25,12 DW 12,12,12,6,6,6,6,12,25,12,6,6,12,12,19,6,25,12,12,6,6,12,50 DW 12,6,6,12,12,19,6,25,12,12,6,6,12,50,50 FREQ2 DW 392,392,392,392,330,392,262,440,392,392,392,392,392,330,294,262,330,294 DW 294,330,392,392,392,330,330,294,262,262,294,330,262,262,220,196,220,196 DW 392,392,392,330,392,262,440,392,392,392,392,392,330,294,262,330,294 DW 262,330,294,294,330,392,392,330,330,294,262,262,294,330,262,262,220 DW 196,392,392,392,392,330,294,262,440,392,392,440,262,294,262,294,330,294,262,0 TIME2 DW 6,12,6,12,6,6,12,12,25,6,12,6,12,6,6,12,12,25 DW 19,6,12,6,6,12,6,6,12,12,19,6,12,6,6,12,12,25 DW 6,12,6,12,6,6,12,12,25,6,12,6,12,6,6,12,12,25 16 DW 12,12,12,12,12,6,6,12,12,19,6,12,6,6 DW 12,12,25,6,12,6,12,6,6,12,12,12,6,6,12,12,12,12,25,25,50 FREQ3 DW 220,330,247,220,262,294,262,330,220,440,392,440,392,294,349,330,330,330 DW 220,440,392,294,330,349,330,294,262,220,330,294,247,220,220 DW 220,247,262,294,330,262,247,196,220,262,294,330,330 DW 220,247,262,294,330,262,247,196,220,262,294,262,262 DW 220,247,262,294,330,262,247,196,220,262,294,262,330,330 DW 220,247,262,294,330,262,247,196,220,262,294,262,262,262 DW 262,262,294,330,262,247,196,262,247,196,247,220,220,220,0 TIME3 DW 25,25,50,12,12,19,6,50,25,25,12,12,12,12,12,12,25,50 DW 25,25,19,6,12,12,25,25,50,25,25,37,12,50,25 DW 12,12,12,12,12,12,25,25,12,12,12,12,25 DW 12,12,12,12,12,12,25,25,12,12,12,12,25 DW 12,12,12,12,12,12,25,25,12,12,6,12,12,25 DW 12,12,12,12,12,12,25,25,6,6,12,12,12,50 DW 12,6,6,12,12,25,25,25,25,50,12,12,25,50 DATA ENDS STACK SEGMENT DB 200 DUP (?) STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START:MOV AX,DATA MOV DS,AX MOV DX,OFFSET STR1 MOV AH,9 INT 21H LEA DX,STR2 MOV AH,9 INT 21H LEA DX,STR3 MOV AH,9 INT 21H LEA DX,STR6 17MOV AH,9 INT 21H LEA DX,STR7 MOV AH,9 INT 21H LEA DX,STR8 MOV AH,9 INT 21H LEA DX,STR9 MOV AH,9 INT 21H MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H JMP INPUT XSH:MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H LEA DX,STR5 MOV AH,9 INT 21H MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H INPUT: MOV AH,1 INT 21H 18CMP AL,Q JE EXIT CMP AL,A JNE N1 LEA SI,FREQ1 LEA BP,TIME1 LOP:MOV DI,SI CMP DI,0 JZ XSH MOV BX,DS:BP CALL PLAY ADD SI,2 ADD BP,2 JMP LOP JMP XSH N1:CMP AL,B JNE N2 LEA SI,FREQ2 LEA BP,TIME2 JMP LOP N2:CMP AL,C JNE ERROR LEA SI,FREQ3 LEA BP,TIME3 JMP LOP ERROR: LEA DX,STR4 MOV AH,9 INT 21H LEA DX,STR5 MOV AH,9 INT 21H LEA DX,STR6 MOV AH,9 INT 21H 19LEA DX,STR7 MOV AH,9 INT 21H LEA DX,STR8 MOV AH,9 INT 21H LEA DX,STR9 MOV AH,9 INT 21H MOV AH,02H MOV DL,0AH INT 21H JMP INPUT JMP INPUT EXIT:MOV AH,4CH INT 21H PLAY PROC PUSH AX PUSH BX PUSH CX PUSH DX PUSH DI MOV AH,1 INT 16H JZ PLAY1 JMP START play1:MOV AL,0B6H OUT 43H,AL MOV DX,12H MOV AX,348CH DIV DI OUT 42H,AL MOV AL,AH OUT 42H,AL IN AL,61H 20MOV AH,AL OR AL,03H OUT 61H,AL CALL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阜平租房合同模板简单版(3篇)
- 辅助材料合同模板下载(3篇)
- 创新离婚协议范本:财产分割与子女监护权公证合同
- 北京印刷学院印刷专业人才培养共建协议
- (正式版)DB65∕T 4396-2021 《成龄枣树移栽技术规程》
- (正式版)DB65∕T 4378-2021 《滴灌冬小麦化肥农药减施增效技术规程》
- 旅游企业游客信息数据安全保密及旅游安全协议
- 离婚协议中房产过户及补偿条款的执行细则
- 篮球运动场地施工与体育器材集成服务协议
- 电力能源生产车间劳务承包与节能减排协议
- 福州市晋安区社区工作者招聘笔试真题2024
- 教学课件模板美术
- 抑郁症的患者护理查房
- 2024年一建水利水电真题答案
- 主播岗位职业生涯规划与管理
- 老年综合评估各种表格
- 2025至2030中国牙科手机消耗行业项目调研及市场前景预测评估报告
- NBT 11551-2024 煤矿巷道TBM法施工及验收标准
- 口腔瓷贴面诊疗沟通指南
- 山东安全管理人员大考试题库
- 2025-2030冲牙器行业市场深度调研及发展趋势与投资前景预测研究报告
评论
0/150
提交评论