音乐程序设计(软件)
本课程设计是继《微机系统及应用》课程之后的一次综合性设计、一 实验目的
实验训练。根据微机系统及应用课程教学的重点和主要知识点及工程
实际需要,设置汇编语言程序设计、PC 机内部接口和8086系统接口
电路设计等设计题目。要求学生综合本课程和其它相关课程中学到的
80X86系统结构、汇编语言设计、典型接口芯片、电路电子技术等相
关知识进行程序设计、硬件接口电路设计和调试,系统地掌握微机原
理和接口技术的相关知识,实现知识的融会贯通。要求学生通过1.5
周的学习,提高设计汇编语言程序的能力和技巧,培养实现一个简单
应用系统功能的硬件软件设计能力。
二 实验内容
音乐程序设计
编写程序,程序运行时使PC 机成为一架可弹奏的钢琴,当按下
数字键1-8时,依次 发出8个音调。按CTRL-C 则退出钢琴状
态。频率表(524,588,660,698,784,880,988,1048。拓
展功能,比如自动弹奏某一乐曲等,由同学自行扩展。
三 实验原理
PC 机扬声器电路简图如下:
通过给8253/8254定时器装入不同的计数值,可以使其输出不同频率
的波形。当与门打开后,经过放大器放大,可驱动扬声器发出不同频
率的音调,要使该音调的声音持续一段时间,只要插入一段延时程序,
之后再将扬声器切断(关闭与门)。另外,要使计算机成为可弹奏的
钢琴,需在使用系统调用的01H 功能以接收键入字符,并且要建立一
张表,使键入字符与频率值构成一个对应关系。具体频率值与音符的
对应关系见下表:
四 实验步骤
1实验前编好上机程序;
2输入编好的程序;
3编译、连接、调试得到正确程序;
4请实验指导教师检查结果,要求能发出正确的乐声。
五 实验流程图
六 实验程序
DATA SEGMENT TABLE DW 524,588,660,698,784,880,988,1048
DATA ENDS
STACK SEGMENT
STA DB 20 DUP(?)
TOP EQU LENGTH STA STACK
ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV AX,TOP
MOV SP,AX SING:
MOV AH,01
INT 21H ;接收键入字符
CMP AL,03H ;是CTRL-C 键?
JZ FINISH ;是则结束
SUB AL,31H
SHL AL,01 ;转化为相表偏移量
MOV BL,AL
MOV AX,0000H
MOV DX,12H ;常数120000H 作为被除数 MOV BH,00
DIV WORD PTR [TABLE+BX]
MOV BX,AX ;求得频率值→BX
MOV AL,10110110B
OUT 43H,AL ;设置计数器2计数初值低位
MOV AX,BX
OUT 42H,AL ;设置计数器2计数初值低位 MOV AL,AH
OUT 42H,AL ;设置计数初值高位
IN AL,61H
OR AL,03H
OUT 61H,AL ;打开与门
CALL DELAY ;延迟一段时间
IN AL,61H
AND AL,0FCH
OUT 61H,AL ;关闭
JMP SING ;循环
FINISH:MOV AX,4C00H
INT 21H ;
DELAY PROC NEAR
PUSH CX
PUSH AX
MOV AX,03H
X1: MOV CX,0FFFFH
X2: DEC CX
JNZ X2
DEC AX
JNZ X1
POP AX
POP CX
RET
DELAY ENDP
CODE ENDS 结束
END START
七 参考资料
1 杨素行编 微型计算机系统原理及应用,清华大学出版社
2 吴宁主编 80X86/Pentium微型计算机原理及应用,电子工业出版社 3 孙德文主编 微型计算机技术,高等教育出版社
4 沈美明编 IBM-PC 汇编语言程序设计,清华大学出版社 实验原理图