汇编钢琴发声与两只老虎程序.docx
- 文档编号:8629097
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:10
- 大小:63.54KB
汇编钢琴发声与两只老虎程序.docx
《汇编钢琴发声与两只老虎程序.docx》由会员分享,可在线阅读,更多相关《汇编钢琴发声与两只老虎程序.docx(10页珍藏版)》请在冰豆网上搜索。
汇编钢琴发声与两只老虎程序
燕山大学
课程设计报告
汇编与接口课设
学院信息科学与工程学院
年级专业计算机科学
学生姓名
学号
指导教师
提交日期2011/7/1
实验一钢琴程序
一.实验目的
进行汇编语言程序设计应用的综合性训练。
综合运用汇编语言循环程序和子程序编程方法,巩固提高汇编语言程序设计能力应用水平。
二.实验要求
按下数字键1-8发出哆来咪发嗖拉西多的声音,当按下ctrl+c键时退出程序
三.设备与环境
PC兼容机、Windows操作系统、汇编程序masm5.0
四.实验分析
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每15.08us触发一次,以产生一个固定不变的时间基准。
Waitf子程序就是产生一个N*15.08us时间延迟的程序,在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;8
dsegends
;------------------------------------
csegsegmentpara'code'
assumecs:
cseg,ds:
dseg,ss:
stacks
mainprocfar;设置数据段的段地址
movax,dseg
movds,ax
new_note:
movah,01h;是否结束
int21h
cmpal,20h
jeexit
movbx,offsettable
cmpal,'1';判断是否为1-8的数
jbnew_note
cmpal,'8'
janew_note
andax,0fh
shlax,1;(ax-1)*2字存储
subax,2
movsi,ax
movdi,[bx][si]
callsoundf
jmpnew_note
soundfprocnear;调用子程序
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,al
movbx,100
delay:
movcx,663;10ms通过循环调用实现
callwaitf
decbx
jnzdelay
moval,ah
out61h,al;恢复8255A端口原来的值
popdi
popdx
popcx
popbx
popax
ret
soundfendp
waitfprocnear
pushax
waitf1:
inal,61h
andal,10h;判断pb4是0还是1
cmpal,ah
jewaitf1
movah,al
loopwaitf1
popax
ret
waitfendp
exit:
movax,4c00h;返回DOS
int21h
mainendp
csegends
;------------------------------------
endmain
六、代码运行与结果
在键盘上按下1-8数字时,扬声器会奏出八个不同的音阶,同时频幕上显示出输入字符;输入Ctrl+C退出,如果输入非1-8或空格字符,程序不予响应。
实验二用定时器奏出一段小乐曲
一、课程设计的目的
1、掌握8254的工作方式及应用编程。
2、掌握8254的典型应用电路解法。
3、学会使用定时器产生声音的方法编程。
二、课程设计安排
时间:
2011年6月27日——2011年7月1日
地点:
信息馆101
三、课程设计内容要求
利用定时器产生声音的方法编程,使PC机或机箱奏出一段小乐曲。
一个字符有音高、音长,音高是频率,音长是节拍,定义成两个数据表。
产生频率公式:
1MHz/给定的频率=1234DCH/给定的频率
音阶
1
2
3
4
5
6
7
对应频率
262
294
330
349
392
440
494
四.实验说明及步骤
8254是可编程间隔定时器。
为8253的改进型,比8253具有更优良的性能。
8254具有一些基本功能:
(1)有三个独立的16位计数器;
(2)每个二进制可按二进制或十进制计数;
(3)每个计数器可编程工作于6种不同的工作方式;
(4)8254有读回命令,除了可以读出当前计数单元的内容外,还可以读出状态寄存器的内容;
(5)计数脉冲可以是有规律的时钟信号,也可以是随机信号。
计数初值如下:
其中fclki是输入脉冲的频率fouti,n=fclki/fouti
8254的工作方式如下:
(1)方式0:
计数到0结束输出正跃变信号方式。
(2)方式1:
硬件可重触发单稳方式。
(3)方式2:
频率发生器方式。
(4)方式3:
方波发生器。
(5)方式4:
软件触发选通方式。
(6)方式5:
硬件触发选通方式。
本实验采用计数器0产生基本时钟,选择方式3(方波发生器),初值为0,也就是最大的65536,则其方波的输出频率1.193MHZ/65536=18.2
8254的方式控制字格式
D7
D6
D5
D4
D3
D2
D1
D0
计数器选择
读写格式选择
工作方式选择
计数码制选择
01-计数器0
02-计数器1
10-计数器2
11-读出控制字标志
00-锁存计数值
01-读/写低八位
10-读/写高八位
11-先读/写低八位、再读/写高八位
000-方式0
001-方式1
010-方式2
011-方式3
100-方式4
101-方式5
0-二进制数
1-十进制数
8254读出控制字格式
D7
D6
D5
D4
D3
D2
D1
D0
1
1
0-锁存计数值
0-锁存状态信息
计数器选择(同方式控制字)
0
五.参考程序
MY8254_COUNT0EQU0E440H
MY8254_COUNT1EQU0E441H
MY8254_COUNT2EQU0E442H
MY8254_MODEEQU0E443H
DATASEGMENT
FTABLEDW2DUP(262,294,330,262)
DW2DUP(330,349,392)
DW2DUP(392,440,392,349,330,262)
DW2DUP(294,196,262),-1
TTABLEDW8DUP(8)
DW2DUP(8,8,16)
DW2DUP(6,2,6,2,8,8)
DW2DUP(8,8,16);定义频率表和时延表
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
LEASI,FTABLE
LEABP,DS:
TTABLE
FREQ:
MOVDI,[SI]
CMPDI,-1
JESTART
MOVBX,DS:
[BP]
CALLSOUND;调用发声子程序
ADDSI,2
ADDBP,2
JMPFREQ
SOUNDPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHDI
MOVDX,MY8254_MODE
MOVAL,36H
OUTDX,AL;设置控制字寄存器
MOVDX,12H
MOVAX,34DCH
DIVDI;计算频率值并存储到AX中
MOVDX,MY8254_COUNT0
OUTDX,AL
MOVAL,AH
OUTDX,AL;将计算得到频率值输入计数器
CALLDELAY;调用时延子程序
CALLBREAK;调用任意键退出子程序
POPDI
POPDX
POPCX
POPBX
POPAX
RET
SOUNDENDP
DELAYPROCNEAR;时延子程序
PUSHAX
MS250:
MOVCX,2801
US015:
INAL,61H
ANDAL,10H
CMPAL,AH
JEUS015
MOVAH,AL
LOOPUS015
DECBL
JNZMS250
POPAX
RET
DELAYENDP
BREAKPROCNEAR;任意键退出子程序
MOVAH,06H
MOVDL,0FFH
INT21H
JERETURN
MOVAX,4C00H
INT21H
RETURN:
RET
BREAKENDP
CODEENDS
ENDSTART
六、代码运行结果
实验箱中播放出《两只老虎》的音乐曲调。
通过调节延迟可以控制音乐播放的速度。
七.心得体会
通过这两周的课程设计,使我对汇编语言有了更深的理解,之前有一些模糊的东西,也都得到了巩固,两外学习了也很多,总之,是充实了自己,当然也发现了很多不足,像很多程序,书上都有固定的,但是真正弄的透彻不容易,要不断的学习,我们学的东西还很多。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 钢琴 发声 老虎 程序