您当前的位置:五五电子网电子知识单片机-工控设备凌阳单片机语音录放介绍 正文
语音录放介绍

语音录放介绍

点击数:7741 次   录入时间:03-04 11:55:23   整理:http://www.55dianzi.com   凌阳单片机
录音时,通过A/D转换器将语音信号转换成数字信号,编码后存入存储器中;放音时,将数据从存储器中取出并解码,然后经D/A转换变成语音信号输出。
  1. 原理分析

     1.1录音

      SPCE061A的A/D转换器有8个通道,其中有1个通道是MIC-IN输入,它专门用于对语音信号进行采样。。语音信号经Mic转换成电信号,由隔直电容隔掉直流成分,然后输入至SPCE061A内部前置放大器。SPCE061A内部自动增益控制电路AGC能随时跟踪、监视前置放大器输出的音频信号电平,当输入信号增大时,AGC电路自动减小放大器的增益;当输入信号减小时,AGC电路自动增大放大器的增益,以便使进入A/D的信号保持在最佳电平,又可使削波减至最小。

      A/D转换器对输入的音频信号进行8kHz采样,并按照凌阳音频编码格式进行编码,每秒将占用16kBits的存储器空间。系统扩展了一块容量为1Mbits的SRAM存储器HM628128A来存储语音数据。

    1.2放音

  将HM628128A中存储的语音数据顺序取出,解码后,以8kHz的速率进行D/A转换输出,经电容滤波后,恢复原始语音波形,通过驱动扬声器放音。

2.  硬件电路
HM628128A与SPCE061A的连接电路见0,由SPCE061A的IO口完成地址线、数据线和控制线扩展功能。系统扩展了三个按键,REC用于开始录音,PLAY用于放音,STOP用于停止录音或放音。

图1  硬件连接图程序设计

  录放音的编解码是靠调用库函数完成的,我们只要完成数据的存入和读出即可。主程序流程图见图2。
  程序部分主要是完成HM628128A的读写,对语音采样数据的编码处理是通过调用库函数完成的。写(读)程序都包括初始化和写(读)两部分,写入(读出)程序较简单,只要按照HM628128A的写(读)时序就可以,下面讲解初始化和写入时的参数传递过程,读出时参照写入部分。

.public _SP_InitWriteSRAM  
.public F_SP_InitWriteSRAM

_SP_InitWriteSRAM: .proc
F_SP_InitWriteSRAM:
   push r1 to [sp]
   R1 = 0xFFF0
   [P_IOA_Dir] = R1    //IOA15- A4: 输X
   [P_IOA_Attrib] = R1 // IOA3- A0: 输J
   [P_IOA_Data] = R1  
   R1 = 0xFFFF
   [P_IOB_Dir] = R1    // IOB15- B0输X
   [P_IOB_Attrib] = R1
   [P_IOB_Data] = R1 
   pop r1 from [sp]
   retf
   .endp
  初始化包括地址线、数据线和控制线的设置。IOB15---IOB0、IOA7接地址线,设置为输出,IOA51---IOA8接数据线,写入时设置为输出,IOA6—IOA4接选通信号,设置为输出。

.public _SP_WriteSRAM    //写Jl{
_SP_WriteSRAM: .PROC
  push bp to [sp]
  bp = sp + 1
  r1 = [bp+3]            //a}C
  r2 = [bp+4]            //a}
  JZ Write_Low_Addr      //P断O_为0
  R2 = 0x0080            //a}线A16为1
Write_Low_Addr:
  [HighAddr]=R2
  R2 = [bp+5]            //n写J数u
  call F_SP_WriteSRAM    //写Jl{
  pop bp from [sp]
  retf
  .ENDP
  由于HM628128A有17根地址线,在主程序中记录地址的变量设置为长整型数据(32位),在调用写入子程序时,先将高16位压入堆栈,再压入低16位,所以在写入子程序中取两次地址(高、低),并判断高位是否为0,不为0,则将A16置1,表明读、写的是高64K RAM。
  读者只要对上面电路、程序稍加改动,就可以实现语音复读机、跟读机、留言机等功能。

图2  程序流程图




本文关键字:语音  凌阳单片机单片机-工控设备 - 凌阳单片机