微机实验四操作参考
2018年11月 William
〇、实验准备
本次实验是设计汇编程序,控制8253和8255的工作原理及其应用编程。8253为微机系统中使用的定时/计数器,8255为并行接口,即提供可用的I/O接口。
本实验的扬声器控制原理如下。
8255的地址为:60H~63H;PB端口地址为61H,控制口为63H;
8253的地址为:40H~43H;通道2地址42H,控制口地址43H。
PC的扬声器以计数器2为核心。计数器8255的CLK2的输入频率为1.193182 MHz,工作于方式3,改变计数器初值可以由得到不同频率的方波输出。
fCLK2频率:1.1931816*1000000=12 34DE H
若要使扬声器输出600Hz频率信号,则8253计数初值为1988(整数商)。
对于600 Hz,N=计数初值=1193182/600=1988。
对于1000 Hz,N=计数初值=1193182/1000=1193。
改变8253的输出频率,即可改变扬声器输出声频信号频率。
(1) 给定8253的OUT2输出频率,获取对应计数初值:
对于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端口输出时,扬声器是否发声、发声是否变化呢。
实验指导书中,已将程序完全给出,并进行了详细注释,在此不再赘述分析,见程序如下图。
将程序完整复制到txt文本中,并重命名为“shiyan4.asm”,建立好汇编文件,如前实验一致,直接进入debug模式。如下图,直接全速运行[-g],进入 wait1 等待键值循环中。
通过阅读、分析程序可知:
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频率的蜂鸣声了!
然后可使用,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 子程序,红框中为添加的程序。
直接debug测试如下,开启abd后,按x可不断升调发声。
2、实现了一个7个音阶(频率)的电子琴,并且实现按下发声,松开静音(感谢x同学的建议)。程序如下图。
测试结果如下图,按下ESC时,退出程序;按下q时,关闭声音。程序实现了按键 1,2,3,4,5,6,7 时,发出7个不同的音,可以配合简谱“弹”一首《两只老虎》哦,大家快来感受一下吧~
其他参考程序不再列举,到此本次实验全部结束,也是整个微机实验的全部结束,后会有期!
错别字已改,程序已更新,欢迎参考~