微机实验课-实验四扬声器程序设计

微机实验四操作参考

2018年11月 William

〇、实验准备

         本次实验是设计汇编程序,控制8253和8255的工作原理及其应用编程。8253为微机系统中使用的定时/计数器,8255为并行接口,即提供可用的I/O接口。

         本实验的扬声器控制原理如下。

8255的地址为:60H~63H;PB端口地址为61H,控制口为63H;

8253的地址为:40H~43H;通道2地址42H,控制口地址43H。

微机实验课-实验四扬声器程序设计_第1张图片

PC的扬声器以计数器2为核心。计数器8255CLK2的输入频率为1.193182 MHz,工作于方式3,改变计数器初值可以由得到不同频率的方波输出。

fCLK2频率:1.1931816*1000000=12 34DE H

若要使扬声器输出600Hz频率信号,则8253计数初值为1988(整数商)

对于600 HzN=计数初值=1193182/600=1988

对于1000 HzN=计数初值=1193182/1000=1193

改变8253的输出频率,即可改变扬声器输出声频信号频率。

(1) 给定8253OUT2输出频率,获取对应计数初值:

对于1000 Hz, 这里可以用除法实现计算:(DX,AX)=0012 34DE, (DI)=1000

(DX,AX)/DI

MOV    DX,12H

MOV    AX,34DEH

MOV    DI, 1000

DIV     DI  

这样,计数初值就在AX中。

(2) 初始化8253

MOV        AL, 10110110B        ;初始化,8253计数器2,模式3,初值16,二进制

OUT         43H, AL                       ;8253的控制口地址43H

MOV        AX, 1983                   ;计数初值=1.19 MHz, 600 Hz=1983

OUT         42H, AL                     ;送计数初值低位字节,8253的计数器2的地址42H

MOV        AL, AH

OUT         42H, AL                     ;送计数初值高位字节

扬声器受8255A芯片B口的两个输出端线控制,PB0=1,即GATE2=1,计数器2正常计数; PB1=1,打开输出控制门,扬声器工作。8255工作于方式0输出。

一、任务一操作介绍

任务一要求是,观察并记录61H(即8255的PB端口)和42H(即8253的通道2端口)端口变化,产生的影响。即当我们改变61H和42H端口输出时,扬声器是否发声、发声是否变化呢。

实验指导书中,已将程序完全给出,并进行了详细注释,在此不再赘述分析,见程序如下图。

微机实验课-实验四扬声器程序设计_第2张图片 微机实验课-实验四扬声器程序设计_第3张图片

    将程序完整复制到txt文本中,并重命名为“shiyan4.asm”,建立好汇编文件,如前实验一致,直接进入debug模式。如下图,直接全速运行[-g],进入 wait1 等待键值循环中。

微机实验课-实验四扬声器程序设计_第4张图片

    通过阅读、分析程序可知:

1)按下 a 键时:对8253定时器初始化,设置通道2,方式3;然后用该计数器,计数当输出1000Hz时的计数次数,以产生1000Hz频率的方波,并从42H(OUT2)端口输出。即该子程序功能为:初始化定时器,设置计数初值,并输出1KHz频率信号。

2)按下 b 键时:使PB1=1,输出高电平,驱动扬声器,以开启扬声器。

3)按下 c 键时:使PB1=0,关闭扬声器的驱动,使扬声器无法工作。

4)按下 d 键时:使PB0=1,输出高电平,驱动8253定时器,以开启定时器。

5)按下 e 键时:使PB0=0,关闭定时器驱动电压,使定时器无法工作。

6)按下 ESC 键时:退出整个程序,回到DOS。

    因此,要扬声器发声,按键顺序为:a->b->d,即可发生。如下图,此时就能听到1000Hz频率的蜂鸣声了!

微机实验课-实验四扬声器程序设计_第5张图片

    然后可使用,e 或 c键关闭使用 c 和 d 开启

61H(即8255的PB端口)端口变化: PB0(b和c键控制)和 PB1(d和e键控制)要同时为1,才能开启扬声器,否则,喇叭无声音。

42H(即8253的通道2端口)端口变化:可以为扬声器设置不同频率的方波,频率不同,喇叭音调不同。(在keya子程序中,[MOV DI,1000;将频率转换为计数初值],“1000”即为设置/更改频率的地方)。

到此,完成任务一的要求。

 

任务二:

编写电子琴程序要求程序能响应三个键,每个键对应不同频率的声音,按下发声,松开静音。

1、下面程序是实现:按下x键,每次以100Hz间隔升调发声。程序如下图所示,在任务一的程序上,添加了 keyx 子程序,红框中为添加的程序。

微机实验课-实验四扬声器程序设计_第6张图片

直接debug测试如下,开启abd后,按x可不断升调发声。

微机实验课-实验四扬声器程序设计_第7张图片

2、实现了一个7个音阶(频率)的电子琴,并且实现按下发声,松开静音(感谢x同学的建议)。程序如下图。

微机实验课-实验四扬声器程序设计_第8张图片微机实验课-实验四扬声器程序设计_第9张图片微机实验课-实验四扬声器程序设计_第10张图片

微机实验课-实验四扬声器程序设计_第11张图片

  测试结果如下图,按下ESC时,退出程序;按下q时,关闭声音。程序实现了按键 1,2,3,4,5,6,7 时,发出7个不同的音,可以配合简谱“弹”一首《两只老虎》哦,大家快来感受一下吧~

微机实验课-实验四扬声器程序设计_第12张图片

微机实验课-实验四扬声器程序设计_第13张图片

其他参考程序不再列举,到此本次实验全部结束,也是整个微机实验的全部结束,后会有期!

 

错别字已改,程序已更新,欢迎参考~

你可能感兴趣的:(微机原理实验课)