实验四 扬声器程序设计 下载本文

内容发布更新时间 : 2024/6/11 0:27:08星期一 下面是文章的全部内容请认真阅读。

实验四 扬声器程序设计

实验目的:

1.掌握8253的工作原理及其应用编程。 2.掌握8255的工作原理及其应用编程。 实验步骤:

1.扬声器控制原理

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

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

若要使扬声器输出600Hz频率信号,则8253计数初值为1938。 对于600 Hz,N=计数初值=1193182/600=1938。 对于1000 Hz,N=计数初值=1193182/1000=1193。

改变8253的输出频率,即可改变扬声器输出声频信号频率。 扬声器受8255A芯片B口的两个输出端线控制,PB0=1,即GATE2=1,计数器2正常计数; PB1=1,打开输出控制门,扬声器工作。8255工作于方式0输出。 2.编辑

利用编辑器(记事本,也可采用其它编辑器)建立一个名为ASM4.ASM的文本文件,内容如下:

ASSUME CS:seg2,DS:seg1 seg1 SEGMENT pstart DB 'Program start.',0DH,0AH,'$' pend DB 'Program will end when input' DB 27H,'ESC',27H,'.',0DH,0AH,'$' sec DB 10 seg1 ENDS seg2 SEGMENT start: MOV AX,seg1

MOV DS,AX MOV DX,OFFSET pstart MOV AH,09H INT 21H

MOV DX,OFFSET pend MOV AH,09H INT 21H

;--------------键盘控制------------------- wait1: MOV AH,01H ;输入一个字符=AL,DOS系统功能调用

INT 21H CMP AL,1BH ;是否ESC键 JE keyESC CMP AL, 'a' ;是a键? JE keya ;a键处理,初始化定时器8253 CMP AL,'b' JE keyb ;b开启扬声器 CMP AL,'c' JE keyc ;c关启扬声器 CMP AL,'d' JE keyd ;d启动定时器 CMP AL, 'e' JE keye ;e停止定时器 JMP wait1

;-----‘a’键处理,定时器8253通道2初始化,将频率转为计数初值-------- keya: MOV AL,10110110B ;设定时器工作方式,方式3

OUT 43H,AL ;送8253的控制端口43H MOV DX,0012H ;输入频率送DX,AX MOV AX,34DEH MOV DI,1000 ;将频率1000Hz转换为计数初值 DIV DI ;计数初值在AX中 OUT 42H,AL ;计数初值送定时器2,即送42H端口 MOV AL,AH OUT 42H,AL ;输出频率为1000HZ信号 JMP wait1

;------‘b’键处理,并行接口8255,扬声器开启控制-------------- keyb: IN AL,61H ;读8255PB口

OR AL,00000010B ; 并行接口8255,使得PB1=1 OUT 61H,AL ;置PB1=1,开扬声器 JMP wait1

;------‘c’键处理,扬声器关闭控制---------------------------- keyc: IN AL,61H

AND AL,11111101B ; 并行接口8255,PB1=0,关扬声器

OUT 61H,AL JMP wait1

;-------‘d’键处理,定时器开启控制--------------------------- keyd: IN AL,61H

OR AL,00000001B ; 并行接口8255,启动定时器2,GATE=PB0=1 OUT 61H,AL JMP wait1

;------‘e’键处理,定时器关闭控制---------------------------- keye: IN AL,61H

AND AL,11111110B ; 并行接口8255,停止定时器2,GATE=PB0=0 OUT 61H,AL JMP wait1

;------‘ESC’键处理,退出系统-------------------------------- keyESC: MOV AH,4CH

INT 21H seg2 ENDS

END start 2.运行

经过汇编和链接后,运行程序并记录运行过程。 3.调试

利用DEBUG命令载入程序。

利用DEBUG命令单步运行,观察并记录61H端口变化产生的影响。 利用DEBUG命令单步运行,观察并记录42H端口变化产生的影响。 4.编写电子琴程序

要求程序能响应三个键,每个键对应不同频率的声音,按下发声,松开静音。 调试通过。 预习: 1. 学习发声原理。 2. 按要求编写程序。 实验报告要求: 1. 根据步骤4中的要求,画出流程图并写出源程序。 2. 记录调试的操作及其结果。 3. 回答以下问题:

程序中keya部分的作用是什么?计算8253的输出频率是多少?如果要求用BCD码计数,应该怎么改写程序。

程序中keyb、keyc、keyd、keye部分的作用是什么? 按键的先后顺序对程序运行有何影响?