当前位置:文档之家› 数字录音机课程设计

数字录音机课程设计

实验题目:数字录音机
实验目的:1、了解数字录音机的基本原理
2、进一步掌握A/D转换器与D/A转换器的使用方法
3、巩固和加深汇编语言程序设计的能力
实验平台:1、实验箱1台
2、计算机1台
3、麦克风及喇叭各一个
内容要求:编程实现以每秒5000次的速率采集ADC0809的IN2输入的语言数据并存入内存,共采集30000各数据(录音6秒),然后再以同样的速率将数据送DAC0832
使喇叭发声
实验原理:一、各芯片的使用及工作方式
1、ADC0809在本次设计中的作业及工作方式
ADC0809作数据采集用,用麦克6秒的语音信号并保存到相应的存储单元。

对ADC0809的8个模拟通道,这里是用数据总线的低8位D2、D1、D0来
控制ADC的通道选择信号ADDC、ADDB、ADDA,以实现选择其中之一
模拟通道输入。

在本次设计中,初始值为010(D2=0,D1=1,D0=0),即选择
IN2通道进行数据采集,其地址为29aH。

然后使ADC0809的ALE、START
有效,START和ALE信号通过CPU向选中的通道口执行一条输入指令,启
动A/D转换。

2、DAC0832在本次设计中的作用及工作方式
在本次设计中,DAC0832的ILE信号与+5V连在一起,WR1和WR2 均接
地,总是有效的,DAC0843的输入寄存器和DAC寄存器均处于选通状态,
只要CPU想88H端口执行一条输入指令,就会使XFER有效,CPU输出繁
荣数字量就会顺利通过DAC0832的两个寄存器,然后进行D/A转换,在运
算放大器的输出端得到转换结果。

3、8253、8255A在本次设计中的作业及工作方式
8253在本次设计中用作定时,工作于方式0,与8255A连接使用完成定时操
作。

8255A采用工作方式0进行输入操作,工作方式0是8255A个端口的基
本输入输出方式,CPU可从指定端口输入信息,也可向指定端口输出信息。

当8253写入方式0控制字后,计数输初端OUTO立即变为低电平,并且在
计数过程中一直保持低电平,当计数完成时,OUTO输出百年未高电平,8253
计数器0的OUTO与8255A的PAO连接,因此可通过查询PAO是否为1,
判断计数是否完成。

计数完成,则表示定时时间到。

二、管脚接线图
1、ADC0809:
3、DAC0832:
三、实验流程图
四、实物连接图:
五、程序设计代码
data segment
ioport equ 1200h-0280h
luport equ ioport+29ah ;录音口地址
fangport equ ioport+290h ;放音口地址
io8253a equ ioport+283h
io8253b equ ioport+280h
io8255c equ ioport+28bh
io8255d equ ioport+288h
data_qu db 60000 dup(?) ;录音数据存放数据区news_1 db 'Press any key to record:',24h ;录音提示
news_2 db 0dh,0ah,' Playing:',24h ;放音提示
data ends
code segment
assume cs:code,ds:data,es:data
begin: mov ax,data ;初始化mov ds,ax
mov es,ax
mov dx,offset news_1 ;显示录音提示
mov ah,9
int 21h
test_1: mov ah,1 ;等待键盘输入int 16h
jz test_1 ;若不是则循环等待
call lu ;调用录音子程序
mov dx,offset news_2 ;显示放音提示
mov ah,9
int 21h
fy: call fang ;调用放音子程序mov ax,0c07h
int 21h
cmp al,20h
jz fy
mov ah,4ch ;返回DOS
int 21h
lu proc near ;录音子程序mov di,offset data_qu ;置数据区首地址为DI mov cx,60000 ;录60000个数据
cld
xunhuan: mov dx,luport ;启动A/D out dx,al
call delay ;延时
in al,dx ;从A/D读数据到AL
stosb ;存入数据区,使DI加1 loop xunhuan ;循环
ret;子程序返回
lu endp
fang proc near ;放音子程序mov cx,60000 ;放60000个数据
mov si,offset data_qu ;置数据区首地址为SI cld
fang_yin: mov dx,fangport
lodsb ;从数据区取出数据
sub al,30h
out dx,al ;放音
call delay ;延时
loop fang_yin ;循环
ret;子程序返回
fang endp
delay proc near ;延时子程序push d x
mov al,10h ;设8253通道0工作方式0
mov dx,io8253a
out dx,al
mov al,40 ;写入计数器初值40
mov dx,io8253b
out dx,al
mov dx,io8255c ;设8255的A口为输入
mov al,9bh
out dx,al
mov dx,io8255d ;从8255的A口输入
delay1: in al,dx
and al,1 ;判断PA0是否为1
jz delay1 ;若PA0不为1,转de_lay
pop dx
ret;子程序返回
delay endp
code ends
end begin
六、问题分析
在实验中,主要遇到了以下两个问题:
1)由于试验设备的问题,造成了试验的不成功。

刚开始还不知道是此问题,以为是自己的程序有错误,所以一直在检测自己的程序,后来利用老师的检验测验,
才发现时试验设备出现问题,换一台设备就可以了。

2)入口地址错误,在A/D转换中,由于接线时姐在INT2口,而在程序中用了ioport+298h这个地址,所以造成录音不成功。

经过排查,把ADC0809设置成
为ioport+29ah就可以了。

七、试验小结
本次试验室一个综合型设计试验,所以做起来相对来说有点难度,刚开始时还不知道从何入手,但是通过参考8253、8255、ADC0809和DAC0832等芯片的使用方法及原理,以及参阅试验指导书后,发现本设计实验其实并不难,于是首先画出个芯片的接线方法,然后写成程序的流程图以及编程,最后实验检查错误并纠正错误,最后,成功的实现了设计要求。

通过本次实验,我了解到A/D转换和D/A转换的原理,并对各芯片的使用更加熟练,同时也通过了努力,获得实验的成功,大大增加了对接口技术及汇编语言程序技术的信心,为以后的工作学习打下良好的基础。

八、参考文献。

相关主题