汇编钢琴发声与两只老虎程序.docx

上传人:b****5 文档编号:8629097 上传时间:2023-02-01 格式:DOCX 页数:10 大小:63.54KB
下载 相关 举报
汇编钢琴发声与两只老虎程序.docx_第1页
第1页 / 共10页
汇编钢琴发声与两只老虎程序.docx_第2页
第2页 / 共10页
汇编钢琴发声与两只老虎程序.docx_第3页
第3页 / 共10页
汇编钢琴发声与两只老虎程序.docx_第4页
第4页 / 共10页
汇编钢琴发声与两只老虎程序.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

汇编钢琴发声与两只老虎程序.docx

《汇编钢琴发声与两只老虎程序.docx》由会员分享,可在线阅读,更多相关《汇编钢琴发声与两只老虎程序.docx(10页珍藏版)》请在冰豆网上搜索。

汇编钢琴发声与两只老虎程序.docx

汇编钢琴发声与两只老虎程序

燕山大学

课程设计报告

汇编与接口课设

学院信息科学与工程学院

年级专业计算机科学

学生姓名

学号

指导教师

提交日期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

六、代码运行结果

实验箱中播放出《两只老虎》的音乐曲调。

通过调节延迟可以控制音乐播放的速度。

七.心得体会

通过这两周的课程设计,使我对汇编语言有了更深的理解,之前有一些模糊的东西,也都得到了巩固,两外学习了也很多,总之,是充实了自己,当然也发现了很多不足,像很多程序,书上都有固定的,但是真正弄的透彻不容易,要不断的学习,我们学的东西还很多。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 企业管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1