8255与8253的综合应用实例发声及音乐.docx

上传人:b****4 文档编号:5191716 上传时间:2022-12-13 格式:DOCX 页数:18 大小:1.20MB
下载 相关 举报
8255与8253的综合应用实例发声及音乐.docx_第1页
第1页 / 共18页
8255与8253的综合应用实例发声及音乐.docx_第2页
第2页 / 共18页
8255与8253的综合应用实例发声及音乐.docx_第3页
第3页 / 共18页
8255与8253的综合应用实例发声及音乐.docx_第4页
第4页 / 共18页
8255与8253的综合应用实例发声及音乐.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

8255与8253的综合应用实例发声及音乐.docx

《8255与8253的综合应用实例发声及音乐.docx》由会员分享,可在线阅读,更多相关《8255与8253的综合应用实例发声及音乐.docx(18页珍藏版)》请在冰豆网上搜索。

8255与8253的综合应用实例发声及音乐.docx

8255与8253的综合应用实例发声及音乐

实验一8255与8253的综合应用实例:

发声及音乐

一、实验要求

利用定时/计数器8253和并行接口8255控制扬声器发声。

8253的输入时钟CLK的频率1.19318MHz。

二、实验设计

(1)硬件设计(如下图)

(2)软件设计:

音乐程序如下:

stacksegmentparastack'stack'

db64dup('stack...')

stackends

dsegsegmentpara'data'

mus_fredw330,392,330,294,330,392,330,294,330

dw330,392,330,294,262,294,330,392,294

dw262,262,220,196,196,220,262,294,330,262

dw-1

mus_timdw3dup(100),50,50,100,50,50,200

dw2dup(100,100,50,50),200

dw3dup(100,50,50),200

dsegends

csegsegmentpara'code'

assumecs:

cseg,ss:

stack,ds:

dseg

musicprocfar

movax,dseg

movds,ax

freq1:

leasi,mus_fre

leabp,ds:

mus_tim

freq:

movdi,[si]

cmpdi,-1

jeend_mus

movbx,ds:

[bp]

callsoundf

addsi,2

addbp,2

jmpfreq

end_mus:

jmpfreq1

movah,4ch

int21h

soundfprocnear

pushax

pushbx

pushcx

pushdx

pushdi

moval,0b6h;B

out43h,al;送控制字

movdx,12h;12348C为1.1931M

movax,348ch

divdi;除以频率为延时

out42h,al;送延时常数

moval,ah

out42h,al

inal,61h;保护并口状态,开并口

movah,al

oral,3

out61h,al

wait1:

movcx,600;发声延时

pushax

waitf1:

inal,61h

andal,10h;10h

cmpal,ah

jewaitf1

movah,al

loopwaitf1

popax

delay:

loopdelay

decbx

jnzwait1

moval,ah

out61h,al;还原并口

popdi

popdx

popcx

popbx

popax

ret

soundfendp

musicendp

csegends

end

三、实验步骤

1、打开“MasmForWindows集成实验环境”,新建一个文件。

2、将发声程序代码复制粘贴到文件中并保存

3、编译成目标文件

4、生成可执行文件

5、运行

四、实验结果

可以听到电脑扬声器发出《太湖船》的曲调

五、实验总结分析

我了解了怎样利用定时/计数器8253和并行接口8255控制扬声器发声,并且我把程序改成了一个死循环,可以让扬声器不停地发声。

在实验中我发现把每个数据后面添一个0,可以使声音变大,如果再添一个0就不会有声音了。

这是一个很有趣味的实验。

实验二微机键盘、8259与8255综合实验

一、实验目的

1、理解键盘的基本工作原理和过程。

2、掌握8259中断控制器的工作原理、编程方法。

3、掌握中断服务程序的设计方法。

4、熟悉8255作为数据接口和控制端信号引脚的作用。

二、实验内容

1、编写一键盘中断处理程序:

计算键盘中断次数,并用该程序替换系统键盘中断处理程序,使当按键8次(键盘中断产生16次)后,显示中断次数并结束应用。

2、置换系统的09H型中断服务程序,完成对键盘中断次数的统计。

在该中断服务程序中,必须对键盘控制器(口地址61H)复位。

复位键盘控制器只需读出端口61H的内容,并将最高位置1,再写入该端口。

此外,按键按下和抬起均会引起中断,所以实际中断次数等于按键次数乘2。

3、将按键的扫描码输出到屏幕上,并统计中断次数。

三、实验步骤

1、打开“MasmForWindows集成实验环境”,新建一个asm文件。

2、将发声程序代码复制粘贴到新建的asm文件中并保存

3、编译成目标文件

4、生成可执行文件

5、运行

四、实验结果

当按下基本键区的“”时出现的结果如下图:

当按下副键盘区的“1234”再按基本键区的“5678”时,出现的结果:

当按下光标移动键或者专用键时只要两次就会出现下面结果:

五、实验总结分析

通过这次实验我基本理解了键盘的基本工作原理和过程;掌握了8259中断控制器的工作原理、编程方法;掌握了中断服务程序的设计方法;熟悉了8255作为数据接口和控制端信号引脚的作用。

六、附录程序代码

DATASEGMENT

OLD_OFFDW?

OLD_SEGDW?

MKBAKDB?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

STARTPROCFAR

MOVAX,DATA

MOVDS,AX

INAL,21H;保留8259初始屏蔽字的状态

MOVMKBAK,AL

CLI;关中断

ANDAL,B;打开键盘屏蔽

OUT21h,AL

;中断向量修改程序

MOVAH,35H;取原中断向量

MOVAL,9H;9为键盘的中断类型号

INT21H

MOVOLD_OFF,BX;保存原中断向量到字变量中

MOVBX,ES

MOVOLD_SEG,BX

MOVAH,25H;设置新的中断向量

MOVAL,9H

MOVDX,SEGMYINT

MOVDS,DX

MOVDX,OFFSETMYINT

INT21H

XORDX,DX;清计数器

A1:

STI;开中断

CMPDX,10H;是否按了8次键

JZA2;是则结束程序运行

JMPA1;否则继续等待键盘中断

A2:

PUSHDX;保存计数值

CLI;关中断

;恢复原中断向量

MOVAH,25H

MOVAL,9H

MOVDX,OLD_SEG

MOVDS,DX

MOVDX,OLD_OFF

INT21H

MOVAL,MKBAK;恢复系统8259屏蔽字

OUT21h,AL

STI;开中断

POPDX;显示计数值

CALLSHWORD

MOVAX,4C00H

INT21H

RET

STARTENDP

MYINTPROCFAR;自定义键盘中断处理程序

STI;开中断

INCDX;计数加一

INAL,60H;读入扫描码(用户可对此键值进行处理)

PUSHDX

MOVDL,AL

CALLSHWORD

POPDX

INAL,61H;读入控制字节

MOVAH,AL

ORAL,80H

OUT61H,AL;复位键盘

CLI;关中断

MOVAL,61H;中断结束命令送中断控制器

OUT20H,AL

IRET;中断返回

MYINTENDP

SHWORDPROCNEAR;2→16进制显示

MOVCL,4

AGA:

ROLDX,CL

MOVAL,DL

ANDAL,0FH

CMPAL,10

JCNEXT2

ADDAL,7

NEXT2:

ADDAL,30H

MOVAH,0EH

INT10H

LOOPAGA

MOVDL,0AH

MOVAH,02H

INT21H

MOVDL,0DH

MOVAH,02H

INT21H

RET

SHWORDENDP

CODEENDS

ENDSTART

 

实验三8253与键盘综合实验模拟钢琴

一、实验目的:

1、了解键盘作为人机交互设备的基本功能;

2、熟悉键盘操作的常用系统功能函数;

3、键盘与8253的交互。

二、实验内容:

通过键盘模拟钢琴琴键控制8253发声实现钢琴的模拟弹奏

三、实验原理

通过给8253定时器装入不同的计数值,可以使其输出不同频率的波形。

当与门打开后,经过放大器放大的作用,便可驱动扬声器发出不同频率的音调,要使该音调的声音持续一段时间,只要插入一段延时程序,之后再将扬声器切断(关闭与门)即可。

另外,若要使计算机成为可直接演奏的钢琴,则需要使用系统调用的01H功能以接收键入字符,并且要建立一张表,使表上字符与频率值构成一个对应关系。

表上字符:

12345678

音符:

1234567i

频率值5245886606987848809881048

四、实验步骤

1、打开“MasmForWindows集成实验环境”,新建一个文件。

2、将发声程序代码复制粘贴到文件中并保存

3、编译成目标文件

4、生成可执行文件

5、运行

五、实验结果

按下数字键“1、2、3、4、5、6、7、8”,相对应发出的声音就是“多、来、米、发、梭、拉、西、多(高音)”,按“CTRL+C”则会退出“钢琴”状态。

按照五线谱弹奏就可以弹出乐曲了,只是要控制好节奏才弹得出美妙的音乐。

六、实验总结分析

这是一个趣味性实验,很有意思,既能满足娱乐的心,又能学到知识。

此次实验重点要掌握发音对应的频率值,还要知道发音的原理(要插入一段延时程序),有个缺点就是觉得声音有点小。

七、附录程序代码

datasegment

f1dw524,588,660,698,784,880,988,1048

dataends

codesegment

assumecs:

code,ds:

data

hhhprocnear

movdx,08ffh

movcx,0ffffh

yyy:

loopyyy

decdx

jnzyyy

ret

hhhendp

start:

movax,data

movds,ax

xxx:

movah,1h

int21h

cmpal,'1';判断是否为数字1~8

jbover

cmpal,'8'

jaover

subal,31h

movbl,2

mulbl

movah,0;ax高8位为0

movsi,ax;保护AL于SI中,以待后用,作为参数传递

movbx,f1[si]

movax,0000h

movdx,0012h

divbx

movbx,ax

movdx,43h;控制字

moval,0b6h

outdx,al;写入控制端口

moval,bl

out42h,al;先写低8位

moval,bh

out42h,al;后写高8位

inal,61h;读PB口当前状态

movah,al

oral,03h;使PB0、PB1均为1,打开与门

out61h,al;接通扬声器

callhhh;调用hhh

moval,ah

andal,0fch;使PB0、PB1均为0,关闭与门

out61h,al

jmpxxx

over:

movah,4ch

int21h

codeends

endstart

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

当前位置:首页 > 总结汇报 > 实习总结

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

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