电子发声设计实验

  • 格式:doc
  • 大小:18.00 KB
  • 文档页数:3

下载文档原格式

  / 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子发声设计实验

试验目的:学习用8254定时/计数器使蜂鸣器发声的编程方法

实验设备:PC微机一台、TD-PITC试验箱一台

实验内容:使其输出连接到根据实验提供的音乐频率表和时间表,编写程序控制8254,使其输出连接到扬声器上能发出相应的乐曲。

实验说明及步骤:一个音符对应一个频率,将对应一个音符频率的方波传输到扬声器上,就可以发出音符的声音。将一段乐曲的音符对应频率的方波依次送到扬声器,就可以演奏出这段乐曲。利用8254的方式3——“方波发生器”,将相应一种频率的计数初值写入计数器,就可以产生对应频率的方波。计数初值的计算如下:

计数初值=输入时钟/输出频率

源代码:略

初始效果:播放了《友谊天长地久》

修改点:FREQ_LIST 和TIME_LIST

重新编排了了频率表和时间表的内容

修改效果:发出了音乐《两只老虎》

修改后代码:

;Sound.asm

;电子发声设计实验

;****************根据查看端口资源修改下列符号值*******************

IOY0 EQU 0d800H

;*****************************************************************

MY8254_COUNT0 EQU IOY0+00H*4 ;8254计数器0端口地址

MY8254_COUNT1 EQU IOY0+01H*4 ;8254计数器1端口地址

MY8254_COUNT2 EQU IOY0+02H*4 ;8254计数器2端口地址

MY8254_MODE EQU IOY0+03H*4 ;8254控制寄存器端口地址

STACK1 SEGMENT STACK

DW 256 DUP(?)

STACK1 ENDS

DA TA SEGMENT

FREQ_LIST DW 262,294,330,262,262,294,330,262,330,350,393,330,350,393 ;频率表DW 393,441,393,350,330,262,393,441,393,350,330,262

DW 294,196,262,294,196,262

TIME_LIST DB 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 8 ;时间表DB 2, 2, 2, 2, 4, 4, 2, 2, 2, 2, 4, 4

DB 4, 4, 8, 4, 4, 8

DA TA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:MOV AX,DATA

MOV DS,AX

MOV DX,MY8254_MODE ;初始化8254工作方式

MOV AL,36H ;定时器0、方式3

OUT DX,AL

BEGIN:MOV SI,OFFSET FREQ_LIST ;装入频率表起始地址

MOV DI,OFFSET TIME_LIST ;装入时间表起始地址

PLAY: MOV DX,0FH ;输入时钟为 1.0416667MHz,1.0416667M = 0FE502H

MOV AX,0E502H

DIV WORD PTR [SI] ;取出频率值计算计数初值,0F4240H / 输出频率

MOV DX,MY8254_COUNT0

OUT DX,AL ;装入计数初值

MOV AL,AH

OUT DX,AL

MOV DL,[DI] ;取出演奏相对时间,调用延时子程序

CALL DALL Y

ADD SI,2

INC DI

CMP WORD PTR [SI],0 ;判断是否到曲末?

JE BEGIN

MOV AH,1 ;判断是否有按键按下?

INT 16H

JZ PLAY

QUIT: MOV DX,MY8254_MODE ;退出时设置8254为方式2,OUT0置0 MOV AL,10H

OUT DX,AL

MOV AX,4C00H ;结束程序退出

INT 21H

DALL Y PROC ;延时子程序

D0: MOV CX,0A00H

D1: MOV AX,0FFFFH

D2: DEC AX

JNZ D2

LOOP D1

DEC DL

JNZ D0

RET

DALL Y ENDP

CODE ENDS

END START