电子琴
一、实验目的
1. 通过 D/A 转换器产生模拟信号,使 PC 机作为简易电子琴
2. 了解利用数模转换器产生音乐的基本方法
二、实验内容
实验电路如图所示,8253 的 CLK0 接 1MHz 时钟,GATE0 接+5V,OUT0 接 8255 的
PA0,J1 接喇叭,编程使计算机的数字键 1、2、3、4、5、6、7 作为电子琴按键,
按下即发出相应的音阶。
三、编程提示
1.对于一个特定的 D/A 转换接口电路,CPU 执行一条输出指令将数据送入 D/A,
即可在其输出端得到一定的电压输出,给 D/A 转换器输入按正弦规律变化的数
据,在其输出端即可产生正弦波,对于音乐,每个音阶都有确定的频率。
各个音阶标称频率值:
音阶
1
2
3
4
5
6
7
261.1
293.7
329.6
349.2
392.0
440.0
493.9
频率:(单位 Hz)
2.产生一个正弦波的数据可取 32 个(小于亦可),不同频率的区别,可通过调
节向 A/D 转换器输出数据的时间间隔,例如:发“1”频率为 261.1Hz 周期为
1/261.1=3.83.ms,输出数据的时间间隔为 3.83/32=0.12ms,定时时间可以由
8253 配合 8255 实现,按下某键后发音时间的长短可以由发出的正弦波的个数多
少来控制。
3.程序流程
4.源程序
data
data1
db
segment
80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh;正弦波数据数据区
db
db
db
0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h
80h,66h,4eh,38h,25h,15h,09h,04h
00h,04h,09h,15h,25h,38h,4eh,66h
db
120,106,94,89,79,70,63,59;发不同音时的计数器初值
1,2,3,4,5,6,7,8,Esc:',0dh,0ah,'$'
;8253 计数器初值的序号
time
msg
num
data
'Press
?
db
db
ends
code
segment
assume
cs:code,ds:data
start:
sss:
mov
mov
mov
int
mov
int
cmp
je
cmp
jl
cmp
jg
sub
mov
mov
ax,data
dx,offset
ah,9
21h
msg
;显示提示信息
ah,7
21h
al,1bh
;从键盘接收字符不回显
exit
;若为 Esc 键,则转 Exit
al,31h
sss
al,38h
sss
;若不在'1'~'8'之间转 sss
al,31
num,al
cx,60
;求出相应的时间常数的序号
;取次个正弦波数据
ddd:
lll:
mov
si,0
al,data[si]
dx,290h
dx,al
;取正弦波数据
;放音
;调延时子程序
;是否取完个数据
;总循环次数是否完,若没有,则继续
mov
mov
out
call
inc
cmp
jl
loop
jmp
delay
si
si,32
lll
ddd
sss
exit:
mov
int
ah,4ch
21h
delay
ccc:
proc
near
;延时子程序
mov
bx,offset
time
mov
mov
out
mov
mov
out
mov
xlat
mov
out
dx,283h
al,10h
dx,al
dx,28bh
al,9bh
dx,al
al,num
dx,280h
dx,al
kkk:
;设 A 口输入
;取相应的时间常数
;向计数器输出
dx,288h
al,dx
al,01
kkk
mov
in
test
jz
ret
;从 A 口读一个字节
;判 PA0 口是否为
;子程序返回
ends
endp
delay
code
end
start
四、实验现象
在 DOS 环境下,用汇编程序进行汇编,生成 DZQ.EXE 可执行程序,并运行可执行
程序。分别按下 1、2、3、4、5、6、7 分别发出哆、唻、咪、发、唆、喇、嘁等
键音。
五、实验体会
本次实验的主要难处在于汇编程序的编写,但编译通过后看到运行的结果便感到
由衷的高兴。
在接好电路,运行程序后,注意按下键后,声音延长作用的长短的变化。同时增
大取正弦波,可以看到延长变大,减小次数,则声音变短,这正是由于取了正弦
波数变了的原因。说明正弦波的个数使声音延长时间的关键。
同时我深入了解了 8253 等芯片的工作方式、作用,锻炼了自己的动手能力和分
工协作能力,使我对微机接口课程产生了更大的兴趣。