接口技术综合实验报告.docx
- 文档编号:9425162
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:14
- 大小:102.79KB
接口技术综合实验报告.docx
《接口技术综合实验报告.docx》由会员分享,可在线阅读,更多相关《接口技术综合实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
接口技术综合实验报告
华北科技学院计算机系综合性实验
实验报告
课程名称接口技术
实验学期2010至2011学年第二学期
学生所在系部
专业班级
学生姓名学号
任课教师
实验成绩
计算机系制
《接口技术》课程综合性实验报告
开课实验室:
接口技术实验室年月日
实验题目
数字录音机
一、实验目的
1、了解数字录音技术的基本原理。
2、掌握A/D转换器与D/A转换器的使用方法。
3、掌握对语音数据进行压缩的算法。
二、设备与环境
TPC-2003A实验箱、微机、传感器及ASM编译器。
三、实验内容
1、设计一个声音录放系统,通过传感器及ADC0809以每秒5000次的速率采集语言信号,共采集60000个数据,录音12秒后,再以同样的速率将语音数据通过DAC0832送出至喇叭发声放音。
按实验原理图连接电路,将声传感器接J2,把代表语音的电信号送给ADC0809通道2(IN2);D/A转换器的输出端通过K8跳线接喇叭。
实验原理图
2、总体设计思想
根据设计要求,本次数字录音机的汇编语言设计所需芯片有模数转换芯片ADC0809、数模转换芯片DAC0832、定时计数器8253、可编程并行I/O接口8355A及译码器74LS138。
设计过程可简述为:
利用传感器和ADC0809采集语音数据,以每秒5000的速率采集IN0输入的语音数据并存入内存,共采集数据60000个,即录音12秒。
DAC0832进行数模转换,以同样的速率将数据送DAC0832使喇叭发声。
8253用作定时,定时0.2ms,设置成方式0,计数初值为200。
8253计数器0的OUT0与8255A的PA0连接,利用PA0查询OUT0电平,如果为高点平则表示定时时间到。
用译码器74LS138对地址线进行译码以产生各接口芯片所需的信号。
3、各芯片的作用及工作方式
(1)ADC0809在本次设计中的作用及工作方式
ADC0809作数据采集用,用来采集12秒的语音信号并保存到相应的存储单元。
对ADC0809的8个模拟通道,这里是用数据总线的低8位D2、D1、D0来控制ADC的通道选择信号ADDC、ADDB、ADDA,以实现选择其中之一模拟通道输入。
在本次设计中,初始值为000(D2=0、D1=0、D0=0),即选择IN0通道进行数据采集,然后使ADC0809的ALE、START有效,START和ALE信号通过CPU向选中的通道口执行一条输出指令,启动A/D转换。
转换结束后,发出EOC信号,当EOC为高电平时,可供CPU查询,读取每次采集的A/D转换结果。
当CPU知道转换已完成,执行一条输入指令使OE信号有效,此时输出缓冲器被打开,数据送到数据总线。
系统时钟经分频后接到ADC0809芯片的时钟引脚CLK上。
(2)DAC0832在本次设计中的作用及工作方式
在本次设计中,我使用的DAC0832采用直通方式与CPU连接,从硬件图中可以看出,该片DAC0832只有一个端口地址,即88H。
DAC0832的ILE信号与+5V连在一起,、WR1和WR2均接地,总是有效的,DAC0832的输入寄存器和DAC寄存器均处于选通状态,只要CPU想88H端口执行一条输出指令,就会使XFER有效,CPU输出繁荣数字量就会顺利通过DAC0832的两个寄存器,然后进行D/A转换,在运算放大器的输出端得到转换结果。
(3)8253、8255A在本次设计中的作用及工作方式
8253在本次设计中用作定时,工作于方式0,与8255A连接使用完成定时操作。
8255A采用工作方式0进行输入操作,工作方式0是8255A个端口的基本输入输出方式,CPU可从指定端口输入信息,也可向指定端口输出信息。
当8253写入方式0控制字后,计数输出端OUT0立即变为低电平,并且在计数过程中一直保持低电平,当计数完成时,OUT0输出变为高电平。
8253计数器0的OUT0与8255A的PA0连接,因此可通过查询PA0是否为1,判断计数是否完成。
计数完成,则表示定时时间到。
(4)74LS138在本次设计中的作用
译码器74LS138对地址线进行译码以产生各接口芯片所需的信号,各接口芯片端口地址分配如下:
芯片
A7A6A5
A4A3A2
A1A0
选中的芯片
端口地址
8253
100
100
000
000
00
01
Y0选中8253计数器0
选中8253控制口
80H
81H
8255A
100
100
001
001
00
01
Y1选中8255A的A口
选中8255A控制口
84H
85H
DAC0832
100
010
00
Y2选中DAC
88H
ADC0809
100
100
100
011
100
101
00
00
00
Y3选中ADCIN0
选中ADC转换结果端口
选中ADC的EOC端口
8CH
90H
94H
4、各芯片的工作原理和功能简介
(1)ADC0809
ADC0809是CMOS工艺制成的双列直插式8位A/D转换芯片,内部采用逐次逼近原理,单极性,量程为0~+5V。
片内部有8路模拟开关,可控制选择输入8个模拟量之中的一个,并带有三态输出锁存缓冲器,可直接与CPU总线连接,不需要外部锁存器,是应用较广泛的一种A/D转换芯片。
①ADC0809内部结构
ADC0809内部由两部分电路组成:
第一部分:
8路模拟通道选择开关,地址锁存器和译码器。
第二部分:
比较器、8位逐次逼近寄存器SAR、8位开关树型D/A转换电路、控制逻辑、三态输出缓冲锁存器。
工作原理:
由ADDA、ADDB、ADDC及ALE选择8个模拟量之一,并通过通道选择开关加至比较器一端。
由START信号启动A/D转换开始且SAR清0。
在CLOCK的控制下,将SAR从高位逐次置1,并将每次置位后的SAR送D/A转换器转换成与SAR中数字量成正比的模拟量。
DAC的输出加至比较器的另一端与输入的模拟电压进行比较,若Vi大于等于V0保留SAR中该位的1;若Vi小于V0则该位清0。
经过8次比较(8个CLOCK)后,SAR中的8位数字量即是结果。
在OE有效时,将SAR中的8位二进制数输出至锁存器,并通过D7~D0输出,同时发出EOC转换结束信号。
②ADC0809引脚功能如下:
IN0~IN7:
8路模拟输入通道。
D0~D7:
8位数字量输出端。
START:
启动转换命令输入端,由1→0时启动A/D转换,要求信号宽度>100n
OE:
输出使能端,高电平有效
ADDA、ADDB、ADDC:
地址输入线,用于选通8路模拟输入中的一路进入A/D转换。
其中ADDA是LSB位,这三个引脚上所加电平的编码为000~111,分别对应IN0~IN7,例如,当ADDC=0,ADDB=1,ADDA=1时,选中IN3通道。
ALE:
地址锁存允许信号。
用于将ADDA~ADDC三条地址线送入地址锁存器中。
EOC:
转换结束信号输出。
转换完成时,EOC的正跳变可用于向CPU申请中断,其高电平也可供CPU查询。
CLK:
时钟脉冲输入端,要求时钟频率不高于640KHZ。
REF(+)、REF(-):
基准电压,一般与微机接口时,REF(-)接0V或-5V,REF(+)接+5V或0V。
(2)DAC0832
DAC0832是用COMS工艺制成的双列直插式8位D/A转换芯片,内部采用T型电阻网络,数字输入有输入寄存器和DAC寄存器两级缓冲,可以双缓冲、单缓冲或直接输入方式连接。
片选信号:
输入低电平有效,与ILE相配合,可对写信号是否有效起到控制作用。
ILE允许锁存信号:
输入高电平有效。
输入锁存器的锁存信号由ILE,,的逻辑组合产生。
当ILE为高电平、为低电平、输入负脉冲时,在端产生正脉冲。
当为高电平时,输入锁存器的状态随着数据输入线的状态变化,的负跳变将数据线上的信息打入输入锁存器。
写信号1:
输入低电平有效。
当,,ILE均为有效时,可将数据写入8位输入锁存器。
写信号2:
输入低电平有效。
当其有效时,在传送控制信号的作用下,可将锁存在输入锁存器的8位数据送到DAC寄存器。
数据传送控制信号:
输入低电平有效。
当,均有效时,则在端产生正脉冲。
当为高电平时,DAC寄存器的输出和输入锁存器的状态一致,的负跳变将输入锁存器的内容打入DAC寄存器。
基准电压输入端:
可在±10V范围内调节。
DI7~DI0:
8位数字输入量输入端。
(2)DAC0832的三种工作方式
①直通方式
当ILE接高电平,都接数字地时,DAC处于直通方式,8位数字量一旦到达D0~D7输入端,就立即加到D/A转换器,被转换成模拟量。
在D/A实际连接中,要注意区分“模拟地”和“数字地”的连接,为了避免信号串扰,数字量部分只能连接到数字地,而模拟量部分只能连接到模拟地。
这种方式可用于不采用微机的控制系统中。
②单缓冲方式
单缓冲方式是将两个锁存器之一处于直通状态,输入数据中经过一级缓冲送入D/A转换器。
如把都接地,使寄存锁存器2处于直通状态,ILE接+5V,接CPU系统总线的信号,接端口地址译码信号,这样CPU可执行一条OUT指令,使和有效,写入数据并立即启动D/A转换。
③双缓冲方式
即数据通过两个寄存器锁存后再送入D/A转换电路,执行两次写操作才能完成一次D/A转换。
这种方式可在D/A转换的同时,进行下一个数据的输入,可提高转换速度。
更为重要的是,这种方式特别适用于系统中含有2片及以上的DAC0832,且要求同时输出多个模拟量的场合。
(3)可编程计数/定时接口芯片8253内部结构
①数据总线缓冲器
该缓冲器为8位双向三态的缓冲器,8根数据线D0~D7可直接挂在CPU数据总线上。
②读/写控制逻辑
它是8253内部操作的控制部分,它决定三个计数器和控制字寄存器中哪一个能进行工作,并控制内部总线上数据传送的方向。
③控制字寄存器
接收从CPU来的控制字,并由控制字的D7、D6位的编码决定该控制字写入哪个计数器的控制寄存器,控制寄存器只能写入,不能读出。
④计数器
8253有3个独立的计数器通道,每个通道的结构完全相同,如图10.2所示。
每一个通道有一个16位减法计数器;还有对应的16位初值寄存器和输出锁存器。
每个计数器都可以对其CLK输入端输入的脉冲按照二进制或BCD码从预置的初值开始进行减1计数,当减至0时,从OUT端输出一个信号,计数的开始由软件启动或硬件门控信号GATE控制。
计数开始前写入的计数初值存于初值寄存器;计数过程中,减法计数器的值不断递减,而初值寄存器中的初值不变。
输出锁存器则用于写入锁存命令时锁定当前计数值。
当8253用作计数器时,加在CLK引脚上脉冲的间隔可以是不相等的;当它用作定时器时,则在CLK引脚应输入精确的时钟脉冲,8253所能实现的定时时间,取决于计数脉冲的频率和计数器的初值。
对8253来讲,外部输入到CLK引脚上的时钟脉冲频率不能大于2MHZ,否则需分频后才能送到CLK端。
(4)可编程并行I/O接口芯片8255A
①并行输入/输出端口A、B、C
8255A芯片具有24个可编程输入输出引脚,分成3个8位端口,其中:
端口A包含一个8位数据输出锁存/缓冲寄存器和一个8位数据输入锁存器;端口B包含一个8位数据输入/输出、锁存/缓冲寄存器和一个8位数据输入缓冲寄存器;端口C包含一个输出锁存/缓冲寄存器和一个输入缓冲寄存器。
必要时端口C可分成两个4位端口,分别与端口A与端口B配合工作,通常将端口A和端口B定义为输入/输出的数据端口,而端口C可作为状态或控制信息的传送端口。
②A组和B组控制部件
端口A与端口C的高4位(PC7~PC4)构成A组,由A组控制部件实现控制功能,端口B与端口C的低4位(PC3~PC0)构成B组,由B组控制部件实现控制功能。
它们各有一个控制单元,可接收来自读/写控制部件的命令和CPU通过数据总线(D7~D0)送来的控制字,并根据它们来定义各个端口的操作方式。
③数据总线缓冲器
这是一个三态双向8位数据缓冲器,它是8255A与8086CPU之间的数据接口,CPU输入输出的数据,CPU输出的控制字以及外设的状态信息都是通过这个缓冲器进行传送。
④读/写控制部件
这是8255A内部完成读/写控制功能的部件,它与CPU的地址总线及有关的控制信号相连,接收CPU的控制命令,并根据它们向片内各功能部件发出操作命令
(5)74LS138译码器
74LS138是3-8线二进制译码器,它有3个输入端,8个输出端,输出低电平有效。
该器件3个输入端A、B、C接受二进制码,其输出端Y0~Y7工8条译码输出线。
除此之外,还有3个使能控制端G、G2A、G2B,目的在于灵活应用并组合各种电路。
只有当G=0,同时G2A+G2B=0时,译码器工作,否则,译码器功能被禁止。
5、实验流程图
录音部分:
放音部分:
6、程序代码及注释
/*****************************/
/*数字录音机*/
/*****************************/
#include
#include
#include
#include"ApiEx.h"
#pragmacomment(lib,"ApiEx.lib")
voidlu();/*录音函数*/
voidfang();/*放音函数*/
voidde_lay();/*延时函数*/
voidsave();/*保存文件函数*/
voidload();
inti;
BYTE*ii;
voidmain()
{
printf("--------------------EXP22_13_LYJ---------------------\n");
printf("1.MIC===J2\n");
printf("2.I/O(298-29F)===0809(CS)\n");
printf("3.(JUMP2TO3)ofJP2\n");
printf("4.SPEAKER===J1\n");
printf("5.I/O(290-297)===0832(CS)\n");
printf("6.8253(CLK0)===(1MHz)or(2MHz)\n");
printf("7.TPC(+5V)===8253(GATE0)\n");
printf("8.8253(OUT0)===8255(PA0)\n");
printf("9.I/O(280-287)===8253(CS)\n");
printf("10.I/O(288-28F)===8255(CS)\n");
printf("Pressanykeytobegin!
\n\n");
getch();
if(!
Startup())/*打开设备*/
{
printf("ERROR:
OpenDeviceError!
\n");
return;
}
ii=(BYTE*)malloc(60000);/*分配空间用于存放录音数据*/
if(!
ii)
{
printf("Nomemory!
\7");
exit(0);
}
PortWriteByte(0x28b,0x9b);/*设8255A口为输入方式*/
PortWriteByte(0x283,0x10);/*初始化8253通道0为方式0*/
printf("Pressanykeytorecord!
\n");/*录音提示*/
getch();
printf("Playingrecord!
\n");
lu();
//load();
save();/*按任意键后开始录音*/
printf("Pressanykeytoplaying!
ESCisexit!
\n");/*放音提示*/
while(getch()!
=0x1b)
{
fang();/*按任意键后开始放音*/
printf("Playingend!
\n");
}
Cleanup();/*关闭设备*/
}
voidlu()
{
BYTEdata;
for(i=0;i<60000;i++)/*启动A/D,采集60000个数据放在ii中*/
{
PortWriteByte(0x29a,0);
de_lay();
PortReadByte(0x29a,&data);
*(ii+i)=data;
}
}
voidfang()
{
BYTEdata;
for(i=0;i<60000;i++)/*将ii中的60000个从D/A输出*/
{
data=*(ii+i);
PortWriteByte(0x290,data);
de_lay();
}
}
voidde_lay()
{
BYTEdata;
PortWriteByte(0x280,200);/*送计数器初值200*/
do{
PortReadByte(0x288,&data);
}while(!
data&0x01);
/*查询8255的PA0是否为高电平,若是则表明定时时间到*/
}
voidsave()
{
FILE*fp;
fp=fopen("d:
\\1.txt","w");
for(inti=0;i<60000;i++)
{
fputc(*(ii+i),fp);
}
fclose(fp);
}
voidload()
{
FILE*fp;
fp=fopen("d:
\\1.txt","r");
for(inti=0;i<60000;i++)
{
*(ii+i)=fgetc(fp);
}
fclose(fp);
}
四、实验结果及分析
在本实验中,充分利用学过的汇编语言程序设计能力,在了解了数字录音技术的基本原理后,通过对A/D转换器与D/A转换器的使用,以及利用8253和8255芯片实现延时功能,成功完成了数字录音机的设计。
测试实验结果时,成功实现了12s的录音及放音,达到设计要求。
在本次数字录音机设计中,实现功能有12s录音功能、放音功能、重复放音功能。
其中,提示信息为中文提示,清楚明了。
在调试过程中,出现缺少提示信息的栏目,导致在运行过程中不知道何时开始录音,何时开始放音,如何设置重播音。
发现问题后,马上增加白提示信息,使程序在运行过程中更加流畅,操作更加简单。
在进行这次微机原理及其应用课程设计之前,我觉得利用汇编语言进行较大规模程序的编写是非常困难的,但通过对这次课题数字录音机的设计与编程,我不仅加深了对微机原理及接口技术的认识和理解,还认识到只要自己认真对待,通过查阅资料,理解消化资料,编程并不是难事。
通过这次课程设计我又收获了不少新知识,掌握了这次设计中所用到的芯片的工作原理功能及应用,而且经过这次设计,我们的自学能力与独立思考能力也得到了提高。
教师评价
评定项目
A
B
C
D
评定项目
A
B
C
D
算法正确
界面美观,布局合理
程序结构合理
操作熟练
语法、语义正确
解析完整
实验结果正确
文字流畅
报告规范
题解正确
其他:
评价教师签名:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 接口 技术 综合 实验 报告