TDX_PITE_80X86微机接口应用技术实验_电子发声设计实验

目录

3.1实验目的

3.2实验设备

3.3实验内容

3.4实验说明及步骤


3.1实验目的

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

3.2实验设备

PC 机一台,TDX-PITE 实验装置一套

3.3实验内容

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

3.4实验说明及步骤

        一个音符对应一个频率,将对应一个音符频率的方波通到扬声器上,就可以发出这个音符的声音。将一段乐曲的音符对应频率的方波依次送到扬声器,就可以演奏出这段乐曲。利用8254 的方式 3一-“方波发生器”,将相应一种频率的计数初值写入计数器,就可产生对应频率的方波。计数初值的计算如下:
                                                计数初值 = 输入时钟 / 输出频
        例如输入时钟采用 1MHz,要得到 800Hz 的频率,计数初值即为 1000000800。音符与频率对照关系如表 3.1 所示。对于每一个音符的演奏时间,可以通过软件延时来处理。首先确定单位延时时间程序 (根据 CPU 的频率不而有所变化)。然后确定每个音符演需要几个单位时间,将这个值送入 DL 中,调用 DALLY 子程序即可。

单位延时时间DALLY PROC
DO: MOV CX,0010H
D1: MOV AX,OFOOH
D2: DEC AX
JNZ D2
LOOP D1
RET
DALLY ENDP
;N 个单位延时时间 (N 送至 DL)DALLY PROC
DO: MOV CX,0010H
D1: MOV AX,OFOOH
D2:DEC AX
JNZ D2
LOOP D1
DEC DL
JNZ D0
RET
DALLY ENDP

        下面提供了乐曲《友谊地久天长》实验参考程序。程序中频率表是将曲谱中的音符对应的频率值依次记录下来(B 调、四分之二拍),时间表是将各个音符发音的相对时间记录下来(由曲谱中节拍得出)。 

;=================================================================
; SOUND.asm
; 电子发声设计实验 歌曲《天长地久》
;=================================================================

; 端口定义
IOY0			EQU 0600H
MY8254_COUNT0	EQU IOY0+00H*2   		;8254计数器0端口地址
MY8254_COUNT1	EQU IOY0+01H*2   		;8254计数器1端口地址
MY8254_COUNT2	EQU IOY0+02H*2   		;8254计数器2端口地址
MY8254_MODE		EQU IOY0+03H*2   		;8254控制寄存器端口地址
STACK1	SEGMENT STACK
		DW 256 DUP(?)
STACK1	ENDS
DATA	SEGMENT
FREQ_LIST	DW	371,495,495,495,624,556,495,556,624
			DW	495,495,624,742,833,833,833,742,624
			DW	624,495,556,495,556,624,495,416,416,371
			DW	495,833,742,624,624,495,556,495,556,833
			DW	742,624,624,742,833,990,742,624,624,495
			DW	556,495,556,624,495,416,416,371,495,0
TIME_LIST	DB	4,	6,	2,	4,	4,	6,	2,	4,	4
			DB	6,	2,	4,	4,	12,	1,	3,	6,	2
			DB	4,	4,	6,	2,	4,	4,	6,	2,	4,	4
			DB	12,	4,	6,	2,	4,	4,	6,	2,	4,	4
			DB	6,	2,	4,	4,	12,	4,	6,	2,	4,	4
			DB	6,	2,	4,	4,	6,	2,	4,	4,	12
DATA	ENDS


DATA		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					;输入时钟为1MHz,1M = 0F4240H  
		MOV AX,4240H 
		DIV WORD PTR [SI]			;取出频率值计算计数初值,0F4240H / 输出频率
		MOV DX,MY8254_COUNT0
		OUT DX,AL					;装入计数初值
		MOV AL,AH
		OUT DX,AL
		MOV DL,[DI]					;取出演奏相对时间,调用延时子程序 
		CALL DALLY
		ADD SI,2
		INC DI
		CMP WORD PTR [SI],0			;判断是否到曲末?
		JE  BEGIN
		JMP  PLAY
DALLY	PROC						;延时子程序
D0:		MOV CX,0010H
D1:		MOV AX,0F00H
D2:		DEC AX
		JNZ D2
		LOOP D1
		DEC DL
		JNZ D0
		RET
DALLY	ENDP
CODE	ENDS
		END START

 还有别的歌曲可以经行替换,注意只要把歌曲部分代码进行替换就可以了!!!

//《茉莉花》
FREQ_LIST   DW  416,416,495,556,165,661,556             ;频率表

            DW  495,495,556,495

            DW  416,416,495,556,165,661,556

            DW  495,495,556,495

            DW  495,495,495,416,495

            DW  556,556,495,0

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

            DB    4,2,2,8

            DB    4,2,2,2,2,2,2

            DB    4,2,2,8

            DB    4,4,4,2,2

            DB    4,4,4,12

DATA        ENDS

//《我和我的祖国》
FREQ_LIST1  DW 495,556,495,441,393,350,330,248

             DW 330,393,661,624,556,393,495,495

             DW 556,624,556,495,441,393,393,278

             DW 312,278,248,495,330,350,393,393,0

TIME_LIST1   DB 4,2,2,4,2,2,8,8

             DB 3,3,3,3,3,3,8,8

             DB 3,3,3,3,3,3,8,8

             DB 3,3,3,3,3,3,8,8

//《虫儿飞》
FREQ_LIST  DW  330,330,330,350,393,330,294    ;频率表

           DW  262,262,262,294,330,330,248,248

            DW  221,330,294,221,330,294

            DW  221,330,294,262

            DW  262,0     ; 时间表

TIME_LIST  DB   4,2,2,4,4,8,8

            DB   4,2,2,4,4,6,2,8

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

            DB   4,4,6,2

            DB   16

        频率表和时间表是一一对应的,频率表的最后一项为 0,作为重复的标志。根据频率表中的频率算出对应的计数初值,然后依次写入 8254 的计数器将时间表中相对时间值带入延时程序来得到音符演奏时间。实验参考程序流程如图 3. 所示电子发声电路图如图 3.2 所示。


实验步骤如下:
1.参考图 3.3 所示连接实验线路。


2.编写实验程序(例程文件名为: CSOUND.C),经编译、连接无误后装入系统

3.运行程序,听扬声器发出的音乐是否正确。 

  • 20
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

STM32单片机定制

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值