微机原理数字录音机

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

郑州科技学院
《微机原理与接口技术》课程设计题目数字录音机的设计与实现
目录
1引言 (1)
2 设计方案与论证 (2)
2.1设计方案 (2)
2.2设计的论证 (2)
3设计原理及功能说明 (3)
4调试与结果测试 (10)
5 总结 (12)
参考文献 (14)
附录1:总体电路原理图 (15)
附录2:元器件清单 (16)
1引言
通过实验掌握计数器/定时器8253和并行输入输出8255的基本工作原理和编程使用方法;进一步掌握A/D转换器与D/A转换器的使用方法;了解录音机的基本工作原理,掌握其内部连接方式。

本次课程设计的主题研究思想是利用微机原理与接口技术知识,掌握数字录音技术的基本原理.利用8253芯片,8255芯片,ADC0809芯片和DAC0832芯片实现电信号与数据信号的转换.8253设置成方式0,记数为200个,利用PA0查询电平变化,控制录音和放音时间.达到数字录音的目的.可广泛应用于数字录音领域.因此它具有一定的实用价值和开发价值。

数字录音机有一定的市场前景和研究领域。

微机原理和接口技术是一门实践性强的学科,其中很多的原量、规则、现象等仅仅靠学习教科书是无法完全掌握的,必须通过实践才能比较直观和深刻的理解。

在进行毕业设计的过程中,可以让学生体验分析问题、提出解决方案、通过编程等手段实现解决方案、不断调试最终达到设计要求的全过程,从而帮助学生系统地掌握微机原理的接口技术的相关知识,达到将知识融会贯通的目的。

主要特点:微结微机原理和接口技术教材的重点内容编写,涵盖课程的主要知识点,具有通用性,适合开设计课程的不同学校采用。

对课程设计的原理有比较详细的描述,课程设计的步骤循序渐进,便于学生独立完成课程设计。

2 设计方案与论证
设计方案及论证如下:
①本课题设计可采用单独的硬件设计,也可以软件与硬件结合设计;后者的设计方案较为合适,能够达到微机原理与接口技术的目的。

②单独使用硬件来完成此设计,所使用的硬件材料较多,且不便于调试,而且设计复杂,相对于用软件和硬件想结合而言,后者较为合适。

③由于我们上一期学的课程是微机原理与接口技术课程,掌握了一定的微机原理与接口技术知识;所以此设计采用硬件与软件结合设计,配合通用微机接口实验系统实验箱实现此设计及此设计功能,与此同时也可以对此门课程加深理解和巩固。

为以后的学习和工作打下良好的基础。

图2-1数字录音机设计框图
3设计原理及功能说明
3.1 设计原理
图3-1单片机控制电路原理图
①将传感器(话筒)接T2,由话筒传入语音电信号,把代表语音的电信号传送给ADC0809。

A/D转换芯片通道2(IN2),片选信号CS低电平有效接微机通用实验系统箱地址298H,由298H地址信号控制,低电平表示ADC0809芯片被选中.
②利用可编程定时/计数器8253,由CLK0计数时钟,输入时钟频率1MHz,再由GATE0门控信号接+5V,通过GATE0端控制计数器的启动计数和停止计数操作;CS片选信号接实验箱地址280H;同理,CS低电平有效,若280H为低电平,表示8253芯片被选中.OUT0接PA0;时间到或者计数结束输出引脚,将8253设置成方式0。

计数值为200(定时0.2mS)。

③再利用8255PA0查询OUT0电平,高电平表示定时时间到,CS片选信号接实验箱288H,由它输入。

D/A转换器的输出端下接喇叭。

CS片选信号接地址292H。

④总体思想为:以每秒钟5000次的速率(以8253作为定时)IN2采集输入的语言数据并存入内存。

共采集60000个数据(录12秒钟),然后以同样的速率将数据送入DAC0832使喇叭发声(放音),达到数字录音、放音的效果。

3.2 设计功能说明
(1)主程序
主程序的主要任务是对8253、8255A进行初始化,实现录、放音的功能调用。

①8253初始化设置
8253在程序中设置成方式0,计数200,定时0.2ms
8253工作方式控制字:10000000B,即10H;选择通道0,方式0,只读写的、低8位
设8253输入时钟信号的频率为1MHZ
计数初值=0.2 ms/0.001ms=200
控制字端口地址为:81H
计数器0端口地址为:80H
②8255A初始化设置
8255A控制字:10010000B,即90H;方式0,A口输入
控制字端口地址为:85H
A口地址为:84H
③调用录、放音子程序
首先DOS功能调用,显示录音提示信息,然后BIOS功能调用,读键盘缓冲区字符,等待键盘输入,若无键按下,继续等待;有键按下,则调用录音子程序,录音12秒。

清除键盘缓冲区后,再进行放音子程序的调用。

(2)A/D录放音子程序
根据设计要求,ADC0809要以每秒5000的速率采集语音数据,录音12秒,因此共需采集5000×12=60000个数据,计数器CX=60000。

选择IN0通道进行数据采集(D2=0、D1=0、D0=0),寻址A/D转换启动端口地址,CPU向IN0通道执行一条输出指令,启动一次A/D转换。

寻址EOC状态端口地址,读取EOC状态,测试转换是否结束,未完则继续等待,转换完成后,则寻址ADC0809转换结果端口,CPU执行一条输入指令,取A/D转换结果。

A/D转换启动端口地址:8CH
转换结果端口地址:90H
EOC状态端口地址:94H
(3)D/A放音子程序
置数据区首址至SI,计数器CX=60000。

从数据区取数据,寻址DAC 端口地址,CPU执行一条输出指令,进行D/A转换。

DAC端口地址为:88H
(4)延时子程序
DELAY是延时0.2 ms的子程序
将8253计数器0的OUT0输入到8255A端口,测试PA0是否为1,若不为1,则表示8253未计数完,继续查询,如果为1,则表示8253计数完成,定时时间到。

图3-2主程序流程图
图3-3 录音子程序流程图
图3-4放音子程序流程图
图3-5延时子程序
4 调试与结果测试
4.1 硬件的调试
接好实验箱,检查芯片和导线是否完整,具体连接情况如下: 8255:CS8255接地址译码Y1,
PA0 接8253的OUT0。

8253:CS8253接地址译码Y0,
CLK0 接1MHz脉冲,
GATE0 接VCC。

DAC0832:CS0832接地址译码Y2,
UB 接S PEAK INPUT。

ADC0809:CS0809接地址译码Y3,
CLK 接1MHz脉冲,
IN2 接MIC OUTPUT。

4.2 硬件的调试
①运行结果:
运行程序,打开开关K0或按下键盘上任一键,显示“Record......”开始录音,录音结束后自动播放,显示“Play……”。

播放过程,可以用K2控制停止,K3控制重放;幅度和放音增益由开关(K4、K5、K6)指定。

并且可以实现在8×8 双色点阵显示器上显示录音和放音的粗略波形,红色为放音,绿色为录音。

②程序调试过程中遇到的问题及解决方法
在调试过程中,出现缺少提示信息的栏目,导致在运行过程中不知道何时开始录音,何时开始放音,如何设置重播音。

发现问题后,马上增加白提示信息,使程序在运行过程中更加流畅,操作更加简单。

7 总结
微机原理和接口技术是一门实践性强的学科,其中很多的原量、规则、现象等仅仅靠学习教科书是无法完全掌握的,必须通过实践才能比较直观和深刻的理解。

在进行课题设计的过程中,可以让学生体验分析问题、提出解决方案、通过编程等手段实现解决方案、不断调试最终达到设计要求的全过程,从而帮助学生系统地掌握微机原理的接口技术的相关知识,达到将知识融会贯通的目的。

主要特点:微结微机原理和接口技术教材的重点内容编写,涵盖课程的主要知识点,具有通用性,适合开设计课程的不同学校采用。

对课程设计的原理有比较详细的描述,课程设计的步骤循序渐进,便于学生独立完成课程设计。

实例丰富,既有小型的适合一个学生独立完成的项目,也有比较大型的适合团队完成的项目,不仅可以培养学生的动手能力,也有助于培养学生的团队意识。

这次课程设计的主题研究思想是利用微机原理与接口技术知识,掌握数字录音技术的基本原理本。

实验从硬件上讲共有四个工作芯片,0809和0832负责信号数模模数转换,8253是定时用的,8255则是读取开关状态,从而决定工作状态的,从软件上讲,共有录音和放音两个主要子程序,这两个程序每执行一次调用一次显示程序,显示声信号的波形。

通过综合设计实验,我们巩固了很多器件的使用方法,进一步熟悉了试验箱的硬件结构和汇编的调试方法。

在本实验中,充分利用学过的汇编语言程序设计能力,在了解了数字录音技术的基本原理后,通过对A/D 转换器与D/A 转换器的使用,以及利用8253 和8255 芯片实现延时功能,成功完成了数字录音机的设计。

测试实验结果时,成功实现了12s的录音及放音,达到设计要求。

在本次数字录音机设计中,实现功能有12s录音功能、放音功能、
重复放音功能。

课程设计使我们了解到数字录音技术的基本原理,进一步掌握A/D转换器和D/A转换器的使用方法,并巩固和加深了汇编语言程序设计的能力。

参考文献
[1] 杨素行.《微型计算机系统原理及应用》,北京,清华大学出版社,2004年
[2] 刘树中.孙书膺,王春平.单片机和液晶显示驱动器串行接口的实现[J].微计算机信息,2007
[3] 李广弟.单片机基础[M]。

北京:北京航天航空大学出版社,2001
[4] 杨振江.智能仪器与数据采集系统的新器件及应用[M]。

西安:西安电子科技大学出版社,2001
[5] 彭介华.电子技术课程设计指导[J].北京:高等教育出版社,1997.
[6]葛纫秋.实用微机接口技术.高等教育出版社.2007
[7]何超.微型计算机原理及应用.中国水利水电出版社.2007
[8]田艾平.微型计算机技术.清华大学出版社.2005
[9]郑岚,王洪海.微机原理与接口技术.北京理工大学出版社.2012
附录1:总体电路原理图
附录2:元器件清单1:ADC0809芯片一块.
2:DAC0832芯片一块.
3:8253芯片一块.
4:8255芯片一块
5:通用微机接口实验系统实验箱一个.
6:导线若干.
7:电脑一台.
附:调试程序代码
ASM程序:
data segment
ioport equ 01400h-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 dx
mov al,10h ;设8253通道0工作方式0
mov dx,io8253a
out dx,al
mov al,200 ;写入计数器初值200 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
CPP程序:
#include<stdio.h>
#include<conio.h>
#include"ApiEx.h"
#pragma comment(lib,"ApiEx.lib")
void lu(); /*录音函数*/
void fang(); /*放音函数*/
void de_lay(); /*延时函数*/
int i;
BYTE *ii;
void main()
{
printf("--------------------EXP22_13_LYJ---------------------\n");
printf("1. MIC === J2\n");
printf("2. I/O (298-29F) === 0809 (CS)\n");
printf("3. (JUMP 2 TO 3) of JP2\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("Press any key to begin!\n\n");
getch();
if(!Startup()) /*打开设备*/
{
printf("ERROR: Open Device Error!\n");
return;
}
ii = (BYTE *)malloc(60000); /*分配空间用于存放录音数据*/
if(!ii)
{
printf("No memory!\7");
exit(0);
}
PortWriteByte(0x28b,0x9b); /*设8255A口为输入方式*/
PortWriteByte(0x283,0x10); /*初始化8253通道0为方式0*/ printf("Press any key to record!\n"); /*录音提示*/
getch();
printf("Playing record!\n");
lu(); /*按任意键后开始录音*/
printf("Press any key to playing!ESC is exit!\n"); /*放音提示*/
while(getch() != 0x1b)
{
fang(); /*按任意键后开始放音*/
printf("Playing end!\n");
}
Cleanup(); /*关闭设备*/
}
void lu()
{
BYTE data;
for(i=0;i<60000;i++) /*启动A/D,采集60000个数据放在ii中*/ {
PortWriteByte(0x29a,0);
de_lay();
PortReadByte(0x29a,&data);
*(ii+i) = data;
}
}
void fang()
{
BYTE data;
for(i=0;i<60000;i++) /*将ii中的60000个从D/A输出*/
{
data = *(ii+i);
PortWriteByte(0x290,data);
de_lay();
}
}
void de_lay()
{
BYTE data;
PortWriteByte(0x280,200); /*送计数器初值200*/
do{
PortReadByte(0x288,&data);
}while(!data&0x01);}
/*查询8255的PA0是否为高电平,若是则表明定时时间到*/
(注:文档可能无法思考全面,请浏览后下载,供参考。

可复制、编制,期待你的好评与关注)。

相关文档
最新文档