数字化语音存储与回放系统

更新时间:2024-05-08 21:57:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目 录

摘要................................................................ 1 1 绪言.............................................................. 2

1.1课题背景..................................................... 2 1.2课题研究的目的和意义......................................... 2 1.3国内外概况................................................... 3 2方案比较与论证 .................................................... 3

2.1方案一....................................................... 3

2.1.1器件操作方式的选择 ..................................... 3 2.1.2 A/D、D/A及存储芯片的选择 .............................. 4 2.2方案二....................................................... 5

2.2.1控制方式 ............................................... 5 2.2.2放大器及A/D、D/A芯片的选择 ............................ 5 2.3方案三....................................................... 5 3系统总体结构 ...................................................... 6 4 电路设计.......................................................... 7

4.1拾音器....................................................... 7 4.2放大器的设计................................................. 8 4.3有源带通滤波器设计.......................................... 10 4.4可调稳压电源的设计.......................................... 12 4.5 51/52系列单片机............................................ 13 4.6 D/A、A/D转换器............................................. 24

4.6.1 D/A转换器DAC0832介绍 ................................ 24 4.6.2 A/D转换器ADC0809介绍 ................................ 28 4.6.3 存储器的选取.......................................... 30 4.6.4 ZLG7289介绍 .......................................... 31 4.6.5 串口通信电路介绍...................................... 32 4.6.6 ISP下载电路 .......................................... 33

5 软件设计......................................................... 33 6 总结与展望....................................................... 36 7 致 谢............................................................ 36 附录............................................................... 36

1

摘要

传统的磁带语音录放系统因其体积大、使用不便,在电子与信息处理的使用中受到许多限制。本文提出的体积小巧,功耗低的数字化语音存储与回放系统将完全可以替代它。数字化语音存储与回放系统的基本原理是对语音的录音与放音的数字化控制。其中,关键技术在于,为了增加语音存储时间,提高存储器的利用率,采用了非失真压缩算法对语音信号进行压缩后再存储,而在回放时再进行解压缩,同时,对输入语音信号进行数字滤波以抑制杂音和干扰,从而确保了语音回放的可靠质量。

本系统能够对语音信号分别进行数据的采集直存直取,欠抽样采样和自相似增量调制等三种方法,完成了对语音信号的存储与回放。前置放大、滤波以及电平移位电路将语音信号控制在A/D转换器采样控制范围内以保证话音信号采样不失真。带通滤波器合理的通带范围有效的滤除了带外噪声,减小了混叠失真。后置带通滤波器用于滤除D/A转换产生的高频噪声以保证回放时音质清晰,无明显失真。

本系统设计共分为七大模块:声音采集模块、带通滤波模块、A/D转换模块、数据存储模块、D/A转换模块、按键选择模块、放大器模块。声音采集模块用于外部语音信号,带通滤波模块作用是将声音转换后的电信号进行滤波(本系统含有两个带通滤波模块,前一个对输入电信号进行滤波,后一个对D/A转换后的电信号进行滤波),数据存储模块用于存储数字化处理后声音信号的数据,D/A转换模块将数字信号转换为模拟信号输出,音频放大模块则是将采集的信号最终进行回放以检验系统整体性能,按键选择模块则是对录、放音、数据分段存取等功能进行选择。

1绪言

本结题报告主要是用于阐述数字化语音存储与回放系统的研究背景、现状及

发展方向,并且指出了传统的语音存储与回放系统的缺陷和面临的问题,以及数字化语音存储与回放系统的优点和发展前景。

1.1课题背景

数字化语音存储与回放系统,以微处理芯片为核心,具有语音可控、 回 放灵活、无磨损、可靠简单等特点。因而在各类公共设施、智能仪表、家用电子产品等领域有着广泛的应用。语音存储与回放系统的实现具有多种方式,一种是利用单片集成的语音存储与回放芯片,如美国ISD公司的ISD1420等;另一种是以微控制器为核心,辅以A/D转换,D/A转换以及大容量的存储器。而单片集成

2

的语音存储与回放芯片,一般智能性较差,不容易解决音量的问题,同时存放录制的时间有限,不能灵活的变化。因此,在多数需要语音的存储与回放的场合,采用了基于微控制器的语音存储与回放系统。

1.2课题研究的目的和意义

目前,广为流传的语音存储手段为磁带记录(现已逐渐转为数字化存储),其体积大、使用不便,在电子与信息处理的使用中受到许多限制。所以数字化存储方式是未来发展的趋势。我们在这里将语音信号的存储建立在数字化的基础上,同时为了降低噪声提高语音质量和音量的稳定性采用了带通滤波器和自动增益控制电路。

1.3国内外概况

自从爱迪生1877年发明留声机以来,音响技术已有百余年的发展历史,在这期间,记录存储各种声音的载体,传输与播放语音技术的发展可谓日新月异。该系统采用单片机对录音、放音、快进、暂停等功能实现控制,用DSP技术对语音信息进行处理,用SRAM存储器进行存储,提高了语音的回放质量和延长了存储时间,与盒式磁带录音机相比避免了机械传动噪音,音质好,功耗低,具有时钟功能,而且人机界面友好,又用中断方式控制录音、放音的过程,实现了语音存储与回放的数字化。

2方案比较与论证

2.1方案一

2.1.1器件操作方式的选择

由于要实现语音的存储与回放,而且要由相关的按键操控以及人机接口,所以与单片机连接的外围器件很多,对器件的组织和读写操作是实现简单操作的关键。经典51内核的单片机对外裸露总线(通常意义的“三总线”——数据总线、控制总线、地址总线),其内部硬件会产生总线控制时序,因此充分利用单片机的片内资源将会使系统软件的设计变得简单。如果采用纯软件的方法模拟器件操作时序来对器件操作,那么系统的软件设计将会很复杂并且实时性不高,而且单片机的片内资源没有得到充分的利用。鉴于51单片机对外裸露总线的特点,设计系统时宜采用总线控制的方式。

3

2.1.2 A/D、D/A及存储芯片的选择

要实现语音信号的采集,就需要A/D转换芯片;而语音得生成过程则可以看成是语音采集过程的逆过程,但又不是原封不动地恢复原来的语音,而是对原来语音的可控制、可重组的实时恢复。在放音时,只要依原先的采样直经D/ A 接口处理,便可使原信号重现。

(1)A/D转换芯片的选择 根据题目要求采样频率fs=8KHz,字长为8位,可选择转换时间不超过125μs的八位A/D转换芯片。目前常用的A/D转换实现的方法有多种,鉴于转换速度的要求,我们采用目前较为通用的A/D转换芯片ADC0809。该芯片是中低速8位逐次比较型A/D转换器,典型转换时间为100us,最大外接时钟振荡频率fm=1280KHz;具有外围扩展元件元件少、功耗低、精度高等特点。

(2)D/A转换芯片的选择 D/A转换芯片的作用是将存储的数字语音信号转换为模拟语音信号,由于一般的模拟转换器都能达到1μs的转换速率,足够满足题目的要求,故我们在此选用了通用D/A转换器DAC0832。

(3)数据存储器的选择 当采样频率fs=8KHz,字长为8位时,一秒钟的语音信号需要占用8K字节的存储空间,要存储10s的语音信号则存储器至少需要有80KB的容量。在这里我们利用8片UT62256构成存储器阵列,借助单片机的P1、P2端口参与地址选择,采用译码器分页存储模式,可将系统的数据存储空间扩展至128kB,以128kB空间存储原始语音信号和DPCM码,语音回放时间可达16s和32s,达到题目要求。

2.2方案二

系统采用MCS-51系列单片机,扩展128kB的外部SRAM数据存储区,同样采用DPCM方式对采集的数据进行编码压缩,另外采用了两只立体声话筒作输入,有效抑制背景噪声。经差分放大,用性能良好、低漂移运放构成的有源带通滤波器进行滤波,以及??f/fs?/sin??f/fs?校正电路进行信号补偿。 2.2.1控制方式

控制器采用单片机实现,单片机人机界面好,并且具有一定的可编程能力 对于语音信号(最高频率约为3.4kHz,8kHz采样频率),12MHz晶振频率的51单片机以足以胜任(每个采样周期125us,相当于125/2=62个机器周期,平均执行31条指令)。

4

2.2.2放大器及A/D、D/A芯片的选择

为减少系统噪音电平,增加系统动态范围,防止阻塞失真等,本放大器中设置自动增益控制电路。其有模拟和数字两种实现方式。数字式精度高,控制范围大但比模拟试复杂,因此本方案采用传统的模拟试AGC来实现。采用TDA2030A作为功率放大可驱动喇叭发声,并具有一定的功率余量[7]。

A/D,D/A及存储芯片的选择:由于题目要求语音信号的最高频率为4kHz,根据奈圭斯特采样定理,采样频率取fs=8kHz(周期TS=125?s),即可无失真的恢复原语音。在无特殊要求下,字长选取八位即可,但考虑到系统的可扩展性所以采用了转换时间为此4.5?s的AD7819。根据同样的分析,变换频率选取8kHz,采用DAC0832。存储器采用128KB的SRAM ——IS62C1024实现。

2.3方案三

该方案以单片机STC89C52为核心器件,以128kB SRAM阵列为数据存储器。STC89C52的典型时钟为12MHz指令周期为1us可以在要求的125us采样间隔执行系统工作还可同时对A/D转换器输出的数字语音信号进行增量调制??M?或差分脉码调制(DPCM),?M和DPCM是两种语音压缩编码技术,可分别将语音速率由64kb/s压缩到8kb/s和32kb/s。另外,为加长录音与回放时间,我们利用ATMEL的闪速存储芯片AT45DB161(2MB)存储数据;该芯片具有容量大、读写速度快、占用I/O端口资源少、操作简单等优点,单片可存储录音256s,如果再将采样的数据进行DPCM压缩,则存储时间可达512s,大大超出题目要求。

以上三种方案均有其可取和不足之处,考虑到其易行性、简便性等多种因素决定采取第一种方案。

3系统总体结构

数字化语音存储与回放系统的基本设计思想是通过拾音器将声音信号转化成电信号,再经过放大器放大,然后通过带通滤波器滤波,模拟语音信号通过模数转换(A/D)转换成数字信号并存放于存储介质中,再通过单片机控制将数据从存储器中读出,然后通过数模转换(D/A)转换成模拟信号,经放大再扬声器或耳机上输出。

整个系统框架图如图3.1所示:

5

拾音器(话筒) 前置放大器 带通滤波器(BPF) ADC0809转换模块 ZLG7289按键与显示 STC89C52单片机 LED录放指示 DAC0832模块(I/V变换) 4片UT62256存储阵列 带通滤波器(BPF) 扬声器/耳机 音频功放(LM386)

图3.1 系统总体框图

系统总体组成如上图所示,由输入通道、STC89C52单片机和输出通道三部分组成。输入通道部分由拾音器、前置放大电路、带通滤波器、电平移位电路组成;输出通道由带通滤波器、后级放大电路组成。拾音器输出的毫伏级信号实测其范围约为10~20mV,此电信号太小不能够进行采样,后级A/D转换输入信号的动态范围为0~5V,语音信号的范围与采样范围的比较得出放大器的放大倍数应为200倍左右,此处将信号通过一增益为46dB可调的放大器,将其放大到伏特量级,以满足采样条件。输出级放大电路则采用了美国国家半导体公司的音频功率放大器LM386对转换后的信号进行播放。考虑到语音信号的固有特点,将低于300Hz和高于3.4kHz的分量滤掉后语音质量仍然良好。此处将其通过一增益为46dB的放大器,因此,将带通滤波器设计为典型的300Hz~3.4kHz,输出级带通滤波器亦为300Hz~3.4kHz,这样既可滤掉低频分量又可滤掉D/A转换带来的高频分量,很好的滤除掉噪声。根据奈奎斯特抽样定理知欲使采样信号无失真,抽样频

6

率最低为6.8kHZ,考虑到留有一定的裕量采用8KHz的采样率,这样就足够保证语音质量。经量化后,微处理器将数据存到处理器,需要时再将其回放,存入与放出由开关通过微处理器来控制实现。存储器的容量选择视所存语音信号的时间长短而定。为了使A/D的输入信号稳定在其动态范围内,在输入级加入了电平移位电路,将负电平部分的信号全部上移为正信号。

4 电路设计

4.1拾音器

拾音器是一种声电传感器,即将外界声场中的声信号转换成电信号的传感器。它在通讯、噪声控制、环境检测、音质评价、文化娱乐、超声检测、水下探测和生物医学工程及医学方面有广泛的应用。它的种类很多,按其特点和频率等,将它划分为超声传感器、声压传感器和声表面波传感器等。

目前应用广泛的一类是驻极体话筒(内部原理图如图4.1.1),其关键元件是驻极体振动膜,它是一片极薄的塑料膜片,在其中一面蒸发上一层纯金薄膜。然后再经过高压电场驻极后,两面分别驻有异性电荷。膜片的蒸金面向外,与金属外壳相连通。膜片的另一面与金属极板之间用薄的绝缘衬圈隔离开。这样,蒸金膜与金属极板之间就形成一个电容。当驻极体膜片遇到声波振动时,引起电容两端的电场发生变化,从而产生了随声波变化而变化的交变电压。驻极体膜片与金属极板之间的电容量比较小,一般为几十pF。因而它的输出阻抗值很高(Xc=1),约几十兆欧以上。这样高的阻抗是不能直接与音频放大器相匹配的。2?fc所以在话筒内接入一只结型场效应管来进行阻抗变换。场效应管的特点是输入阻抗极高、噪声系数低。普通场效应管有源极(S)、栅极(G)和漏极(D)三个极。这里使用的是在内部源极和栅极间再复合一只二极管的专用场效应管。接二极管的目的是在场效应管受强信号冲击时起保护作用。场效应管的栅极接金属极板。这样,驻极体话筒的输出线便有三根。即源极S,一般用蓝色塑线,漏极D,一般用红色塑料线和连接金属外壳的编织屏蔽线。

驻极体话筒与电路的接法有两种:源极输出与漏极输出。源极输出类似晶体三极管的射极输出。需用三根引出线。漏极D接电源正极。源极S与地之间接一电阻Rs来提供源极电压,信号由源极经电容C输出。编织线接地起屏蔽作用。源极输出的输出阻抗小于2k,电路比较稳定,动态范围大。但输出信号比漏极输出小。漏极输出类似晶体三极管的共发射极放入。只需两根引出线。漏极D与电源正极间接一漏极电阻RD,信号由漏极D经电容C输出。源极S与编织线

7

一起接地。漏极输出有电压增益,因而话筒灵敏度比源极输出时要高,但电路动态范围略小。

图4.1 驻极体话筒内部原理图

4.2放大器的设计

(1)增益放大器 拾音器输出的信号实测其范围约为10~20mv左右, 此电信号太小不能够进行采样,后级A/D转换输入信号的动态范围为0~5V,语音信号的范围与采样范围的比较得出放大器的放大倍数应为200倍左右,此处将信号通过一最大增益为46dB的可调放大器,将其放大到伏特量级。放大电路如图4.2.1所示,放大倍数按下式计算:

A?1?R42R39

8

图4.2.1 前置放大器

(2)输出放大器 经带通滤波器输出的声音回放信号,其幅度为0~5V,足以用耳机来接收听,可不接任何放大器。但考虑到实际中经常回用到喇叭作外放,故在本系统中增加外放功能,前端放大器采用通用型音频功率放大器LM386来完成。电路如图4.2.2所示。该电路增益为50~200连续可调,最大不失真功率为320mW。输出端接C10、R11串联电路,以校正喇叭的频率特性,防止高频自激.脚7接22pF去偶电容,以消除低频自激。

图4.2.2 输出放大器

9

4.3有源带通滤波器设计

滤波器是一种能使有用频率信号通过同时抑制(或大为衰减)无用频率信号的电子装置。工程上常用它来作信号处理、数据传输和抑制干扰等。这里主要讨论模拟滤波器。以往这种滤波电路主要采用无源元件R、L和C组成,60年代以来,集成运放获得了迅速发展,由它和R、C组成的有源滤波电路,具有不用电感、体积小、重量轻、选择性好等优点。此外,由于集成运放的开环电压增益和输入阻抗都很高,输出阻抗又底,构成有源滤波电路后还具有一定的电压放大和缓冲作用。但是,集成运放的带宽有限,所以目前有源滤波电路的工作频率难以作的很高,这是它的不足之处。

对于幅频响应,通常把能够通过的信号频率范围定义为通带,而把受阻和衰减的信号频率范围定义为阻带,理想滤波电路在通带内应具有零衰减的幅频响应和线形的相位响应,而在阻带内应具有无限大的幅度衰减(A?j???0)。按照通带和阻带的相互位置不同,滤波器可分为低通滤波器、高通滤波器、带通滤波器、带阻滤波器。

由于滤波器相关知识比较重要,经此课题对有源滤波器的认识和设计有了更进一步的认识,下面就将本人在这方面的一点认识详细道来。

图4.3.1 二阶有源LPF 上图为典型二阶有源LPF,其传递函数表达式如下:

10

2A0?n H?s??

?22?S???nQ??S??n??A0和Q分别为放大倍数和品质因数

一般设计时常取:R1?R2?R,C1?C2?C 则滤波器的参数为:?n?11RC Q?3?A0

由上式可知:为了保证滤波器稳定工作,要求Q?0,则A0?3(电压放大倍数) 特别说明一点的就是:运放用作滤波器设计时一般采用双电源供电,单电源供电会产生削波失真,本人曾经因忽略此问题图简便而失败过一次,所以在此特别写明以引起重视,同时也可作为设计的参考。

对于低通滤波器分析方法是一样的,这里就不再赘述。

声音信号经拾音器转有源滤波器换成电压信号,通过前级放大,在对其进行数据采集之前,有必要经过带通滤波器除带外杂波,选定该滤波器的通带范围为300Hz~3.4KHz.其作用是:

1.保证300~3400Hz的语音信号不失真的通过滤波器;

2.滤除带外的低频信号,以减少带外功频等分量的干扰,大大减少噪声影

响,该下限频率可下延到270Hz左右;

3.便于滤除带外的高次谐波,以减少因8kHz采样率而引起的混叠失真,

根据实际情况,该上限频率可在2700Hz左右,带通滤波器按品质因数Q的大小为窄带滤波器(Q>10)和宽带滤波器(Q<10)两种,本题中,上限频率fh=3400Hz,通带滤波器中心频率f0与品质因数Q分别为

f0f0??0.326 BWfH?fLf0=fHfL=3400?300=1010Hz Q=

显然,Q<10,故该带通滤波器为宽带带通滤波器。有滤波器设计理论可知宽带带通(或带阻)滤波器是不能由一级实现的,所以采用高通和低通滤波器级联构成,鉴于Butterworth滤波器带内平坦的响应特性,我们选用二阶Butterworth带通滤波器,电路如图4.3.2所示.实验证明,该滤波器能有效的滤除低频分量,大大减少噪声干扰,与之同时也滤除了多余的高频分量,消除了高频失真,性能足以满足要求。

11

图4.3.2 二阶带通滤波器

4.4可调稳压电源的设计

为了让系统正常稳定的工作,需要为系统提供电源。系统供电需要三种不同电压的电源,分别是+12V、-12V、+5V。这里介绍的稳压电源,采用三端可调稳压集成电路LM7805、LM7812、LM7912共同构成,外围电路十简单,便于制作。

电路如图4.4所示:220V交流电经变压器降压,得到±12V交流电,再经D3整流桥堆2W10整流得到振荡的直流电,由C3、C11滤波后得到较平稳的直流电压。然后分别经集成电路LM7805、LM7812、LM7912后得稳压输出。图中C12用以消除寄生振荡,C1、C5、C7、C9的作用是抑制纹波,C2、C6、C8、C10则用以改善稳压电源的的暂态响应,D2、D4、D5、D6构成短路保护电路。D1为本电源的工作指示灯,电阻R2是限制流经D1的电流,R2、R3限制流经稳压元件的电流,防止其静态功耗过大。若是要直观的指示输出电压值便于观察,可以在输出端接上万用表或电压表。各元件具体参数如图标示。

12

图4.4 稳压源电路

4.5 51/52系列单片机

单片机是本系统的核心控制器件,主要负责录音、回放中对外部命令的响应,同时对数据进行简单编码压缩以及存储器的读写等操作。本系统采用52系列单片机,负责控制与协调其他各个模块的工作。在整个系统中单片机是系统的控制中心,其工作效率的高低关系到系统效率的高低以及系统运行的稳定性。之所以选用52系列单片机,是因为该系列单片机技术成熟,可利用、可参考的资料丰富,开发简便。单片机虽小,但其功能强大,应用千变万化全靠个人的发挥水平。为了更进一步巩固单片机知识,有必要在这里详细讲述单片机的相关知识,就当是复习吧!

单片微型计算机(Sing-Chip Microcomputer)简称单片机。它是在一块芯片上集成中央微处理器(Central Processing Unit, CPU)、随机存取存储器(Random Access Memory, RAM)、只读存储器(Read Only Memory, ROM)、定时/计数器及I/O(Input/Output)接口电路等部件,构成一个完整的微型计算机。它的特点是:高性能、高速度、体积小、价格低廉、稳定可靠,广泛应用于各类微控制系

13

统当中。

正是由于单片机具有上述显著的特点,使单片机的应用范围日益扩大。单片机的应用打破了人们传统设计思想,原来很多用模拟电路、脉冲数字电路和逻辑部件来实现的功能,现在均可以使用单片机配备一些软件来实现。使用单片机具有体积小、可靠性高、性价比高和容易产品化等优点。 4.5.1 89s52简介

89s52是一种带8K字节片内程序存储器,高性能CMOS 8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,并且对外裸露系统总线,使得89s52单片机成为一款高效的微控制器,为很多嵌入式控制系统提供了一种灵活性高且廉价的解决方案。

图4.5.1 89C51引脚图

14

89s52有40个引脚,4个8位并行输入/输出(I/O)端口:P0、P1、P2、P3,其中,P1是完整的8位准双向I/O口,两个外中断,2个16位可编程定时/计数器,两个全双向串行通信口,一个模拟比较放大器。此外,89s52的时钟频率可为零,即具备可用软件设置的睡眠省电功能,系统的唤醒方式有RAM、定时/计数器、串行口和外中断口,系统唤醒后即进入工作状态,省电模式中,片内RAM将被冻结,时钟停止震荡,所有功能停止工作,直至系统被硬件系统复位方可继续工作。 2. 引脚介绍

Vcc:接+5V电源正端

GND:接地。

P0口:P0口为一个8位漏极开路双向I/O口,每脚可吸收8个TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入,这一点是很重要的;我在编写AD转换程序时,就因为没有写P0=0xff这一条语句,结果怎么调都读不了P0口的数据,找这个错误花了我整整两天的时间。谁也不会想到这样一条语句竟然有如此大的作用,当然这也只有自己亲自动手才会体会到的,书本上是学不到的,说句实话单片机确实是“玩”出来的。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,P0 口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部必须被拉高。还有一点必须说明:做通用I/O口使用时,必须外接上拉电阻,否则读写的逻辑电平会餐生错误。

P1口:P1口是一个内带上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口还具有第二功能,如具体功能如下表4.1所示:

15

表4.1 P3口管脚的特殊功能

引脚 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 第 二 功 能 RXD (串行输入口) TXD (串行输出口) INTO (外部中断0请求输入端) INT1 (外部中断1请求输入端) T0 (定时器/计数器0记数脉冲输入端) T1 (定时器/计数器1记数脉冲输入端) WR (片外数据存储器写选通信号输出端) RD (片外数据存储器读选通信号输出端) RST:复位输入 当振荡器复位器件时,至少要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的,在本系统中就用到了这个时钟源,用74HC74对其四分频后为ADC0809提供系统时钟。然而需要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。由于我在设计时系统扩展SRAM电路时并没有用ALE引脚来访问外部存储器,而是用软件模拟读写时许,因此也不用考虑跳过脉冲的问题。

PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效;但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。此引脚在本系统中没用到。

EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP),对于国产STC89C52能串行编程,此引脚也基本不用。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

16

XTAL2:来自反向振荡器的输出。 3. 主要性能指标 a.与MCS-51兼容

b.8K字节可编程闪烁存储器

c.寿命:1000写/擦循环数据保留时间:10年 d.全静态工作:0Hz-40MHz e.三级程序存储器锁定 f.256*8位内部RAM g.32个可编程I/O口

h.两个16位可编成定时器/计数器 i.8个中断源 j.可编程串行通道

k.低功耗的闲置和掉电模式

l.片内振荡器和时钟电路,时钟频率1.2—12MHz;可有时钟输出 m.有强的位寻址\\位处理能力 4. 89s51单片机的主要组成部分

(1) CPU

CPU是单片机的核心部分,他的作用是读入和分析每条指令,根据每条指令的功能要求,控制各个部件执行相应的操作。89s51单片机内部有一个8位的CPU,它是由运算器和控制器组成。

运算器 运算器主要包括算术、逻辑运算部件ALU、累加器ACC、寄存器B、暂存器YMP1、YMP2、程序状态寄存器PSW、布尔处理器及十进制调整电路等。运算器主要用来实现数据的传送、数据的算术运算、逻辑运算和位变量处理等。

控制器 控制器包括时钟发生器、定时控制逻辑、指令寄存器指令译码器、程序计数器PC、程序地址寄存器、数据指针寄存器DPTR和堆栈指针SP等。控制器是用来统一指挥和控制计算机进行工作的部件。它的功能是从程序存储器中提取指令,送到指令寄存器,再进入指令译码器进行译码,并通过定时和控制电路,在规定的时刻发出各种操作所需要的全部内部控制信息及CPU外部所需要的控制信号,如ALE、PSEN、RD、WR等,使各部分协调工作,完成指令所规定的各种操作。

(2)存储器

程序存储器 程序存储器用于存放编好的程序、表格和常数。程序存储器的寻址范围可以有64KB与此相应, 程序存储器的编址自0000H开始,最大可至FFFFH。程序存储器的编址规律为;先片内、后片外,片内、片外连续,两者一

17

般不作重叠。对于片内有程序存储器的芯片,CPU的控制器专门提供一个控制信号EA来区分,当EA为高电平时,复位后单片机先执行片内有程序存储器中程序,当程序计数器的内容超过OFFFH时,将自动转去执行片外程序存储器的程序而当指令,当EA为低电平时,将强行执行片外程序存储器中的程序。此时多在片外程序存储器中存放调试程序,使计算机工作在调试状态。这里应该注意的是,片外程序存储器存放调试程序的部分,其编址与片内程序存储器的编址是可以重叠的,就借EA的换接可实现分别访问。

在程序存储器中,有7个单元具有特殊用途。

0000H—0002H:是所有执行程序的入口地址,89C51单片机复位后,CPU总是从0000H单元开始执行程序。16位单片机、ARM等微控制器一般也是如此。

0003H:外部中断0入口。

000BH:定时/计数器0溢出中断入口。 0013H:外部中断1入口。

001BH:定时/计数器1溢出中断入口。 0023H:串行口中断入口。

002BH:定时器/计数器2溢出或T2EX端负跳变。

使用时,通常在这些入口地址处存放一条绝对跳转指令,使程序跳转到用户安排的中断程序起始地址,或者从0000H起始地址跳转到用户设计的初始程序上。

数据存储器 片内数据存储器有16位,寻址范围也可达64KB。故片外数据存储器的容量可大到与程序存储器一样,其编址自0000H开始,最大可至FFFFH。89s52单片机数据存储器有片内数据存储器RAM和特殊功能寄存器SFR:前者有128个字节,其编址为00H—FFH,可以读、写任何数据;后者也占128个字节,其编址位80H—FFH;两者连续而不重叠。片内数据存储器的容量很小,常需扩展片外数据存储器。如扩展少量片外数据存储器,容量不超过256个单元,则也可按8位二进制数编址,自00H开始,最大可至FFH。

表4.2 不同存储器与所用指令及其寻址方式的对应关系

存储器 ROM 依次取指执行程序 程序转移 用户访问 片内RAM 访问整 个字节 18

根据PC值自动访问 程序转移类指令 MOVC指令 主要为MOV指令,借工作寄存器间接寻址 访问性质 所用指令及寻址方式 访问20H~2FH单元中的某位 SFR 访问整个字节 访问SFR中的可寻址位 片外RAM 如容量不大于256单元 如容量大于256单元

位操作类指令, 借位地址寻址 主要为MOV类指令,直能借直接寻址字节寻址 位操作类指令, 借位地址寻址 MONX指令,借工作寄存器间接寻址 MONX指令,借数据指针寄存器间接寻址 片内数据存储器又可分为工作寄存区、位寻址区、数据缓冲器区三个区域。 ①工作寄存器区

在低128B的内部RAM中,前32个单元(地址为00H—1FH)为通用工作寄存器区,共分为四组(寄存器0组、1组、2组、3组),每组8个工作寄存器由R0—R7组成,共占32个单元。选用哪一组由程序状态字PSW中的RS1、RS0这两位的设置决定,若程序并不需要四个4组工作寄存器,那么剩下的工作寄存器可作一般的存储器来使用。

②位寻址区

20H—2FH的16个单元为位寻址区,该区的每个单元都被赋予了一个位地址,每个单元8位,共128位。其位寻址范围为00H—7FH。位寻址区的每一位都可当作软件触发器,由程序直接进行处理。程序中通常把各种程序状态标志、位控变量设在位寻址区。同样,位寻址区的RAM单元也可作为一般的数据存储器按字节单元使用。

③数据缓冲区

30H~7FH是数据缓冲区,用户RAM区,共80个单元。 (3)特殊功能寄存器

累加器A 累加器A是一个最常用的8位特殊功能寄存器,它既可用于存放操作数,也可用于存放运算的中间结果。大部分单操作数指令的操作数就取自累加器。用ACC表示A的符号地址。

寄存器B 寄存器B是一个8位寄存器,主要用于乘法和除法的运算。乘法运算时,B中存放乘法,乘法操作后,乘积的高8位又存于B中;除法运算时,B中存放除数,出发操作后,B中又存放余数。在其他指令中,寄存器B可作为一般的寄存器使用,用于暂存数据。 5. 定时器/计数器

错误!未找到引用源。主要特性

a.89s52单片机有3个可编程的定时器/计数器——定时器/计数器0、定时器/计数

19

器1和定时/计数器2,可有程序选择作为定时器用或作为计数器用,定时时间或记数值也可由程序设定。

b.每一个定时器/计数器具有4种工作方式,可用程序选择。

c.任一定时器/计数器在定时时间到或记数值到时,可有程序安排产生中断请求信号或不产生中断请求信号。

②定时/计数器0和1的控制和状态寄存器

特殊功能寄存器TMOD和TCON分别是定时/计数器0和1的控制和状态寄存器,用于控制和确定各定时/计数器的功能和工作模式。 ③模式控制寄存器TMOD

TMOD用于控制T0和T1的工作方式和4种工作模式。其中低4位用于控制T0,高4位用于控制T1。其值可用程序决定,其格式如下: GATE C/T M1 M0 GATE M1 M0 C/T GATE位:门控位。

当GATE=1时,只有INTO或INT1引脚为高电平且TR0或TR1置1时,相应的定时/计数器才被选通工作;当GATE=0,则只要TR0和TR1置1,定时/计数器就被选通,而不管INT0或INT1的电平是高还是低

位:计数/定时功能选择位。

=0,设置为定时器方式,计数器的输入是内部时钟脉冲,其周期等=1,设置为计数器方式,计数器的输入来自T0(P3.4)或T1(P3.5)

于机器周期。

端的外部脉冲。

M1、M0位:工作模式选择位。2位可形成4种编码,对应4种工作模式,见下表:

表4.3 M1、M0工作模式

M1 M0 00 01 10 11 功 能 描 述 方式0:13位定时器/计数器 方式1:16位定时器/计数器 方式2:具有自动重装初值的8位定时器/计数器 方式3:定时/计数器0分为两个8位定时/计数器,定时/计数器1在此方式无实用意义 ④控制寄存器TCON

TCON用来控制T0和T1的启、停,并给出相应的控制状态,高4位用于控制定时器0、1的运行;低4位用于控制外部中断。格式如下:

20

TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

TF1:定时器1溢出标志。

当定时器1溢出时,由硬件置1。使用查询方式时,此位做状态位供查询,查询有效后需由软件清零;使用中断方式时,此位做中断申请标志,进入中断服务后被硬件自动清零。

TR1位:定时器1运行控制位。

该位靠软件置位或清零,置位时,定时/计数器接通工作,清零时,停止工作。

TF0位:定时器溢出标志位,其功能和操作情况类同于TF1。 TR0位:定时器0运行控制位,其功能和操作类同于TR1。 IE位:外部中断请求标志位。

当CPU采样到INT0非(或INT1非)端出现有效中断请求时,IE0(或IE1)由硬件置1,中断响应完成后转向中断服务时,再由硬件自动清零。

IT位:外部中断请求出发方式位。

IT0(IT1)=1为脉冲触发方式,下降沿有效。 IT0(IT1)=0为电平触发方式,低电平有效。 E.定时/计数器的初始化

89s52单片机的定时/计数器是可编程的,因此,在进行定时或计数之前也要用程序进行初始化。初始化一般应包括以下几个步骤:

a.对TMOD寄存器赋值,以确定定时器的工作模式;

b.置定时/计数器初值,直接将初值写入寄存器的TH0,TL0或TH1,TL1; c.根据需要,对寄存器IE置初值,开放定时器中断;

d.对TCON寄存器中的TR0或TR1置位,启动定时/计数器,置位以后,定时/计数器即按规定的工作模式和初值进行计数或开始定时。

在初始化过程中,要置入定时/计数器的初值,这时要做一些计算。由于计数器是加法计数,并在溢出时申请中断,因此不能直接输入所需的计数值,而是要从计数最大值倒退回去一个计数值才是应置入的初值。设计数器的最大值为M(在不同的工作模式中,M可以为8192,65536,256),则置入的初值可以这样来计算。

计数方式时 X=M—记数值 定时方式时 (M—X)T=定时值 所以 X=M—定时值/T 式中,T为计数周期,是单片机的机器周期。 6. T0和T1的4种工作方式

21

方式0:13位定时/计数器,TL1(或TL0)的低5位和TH1(或TH0)的8位构成,TL中的高3位弃之未用。当TL的低5位记数溢出时,向TH进位,而全部13位计数器溢出时使计数器回零,并使溢出标志TF置1,向CPU发出中断请求。

方式1:16位定时/计数器,其逻辑电路和工作情况与方式0几乎完全相同,唯一的差别就是方式1中TL的高3位也参与了计数。

方式2:把TL配置成一个可以自动重装载的8位定时/计数器

方式3:仅对T0有意义,将16位定时/计数器分成两个互相独立的8位定时/计数器TL和TH, 7. CPU时钟电路

时钟电路用于产生单片机工作所需要的时钟信号。时钟信号可以有两种方式产生:内部时钟方式和外部时钟方式。 ①内部时钟方式

89s52单片机有一个高增益反向放大器,用于构成振荡器,引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。在XTAL1和XTAL2两端跨接晶体或陶瓷振荡器,就构成了稳定的自激振荡器,其发出的脉冲直接送入内部时钟发生器,见下图,外接晶振时,C1、C2值通常选择为30pF左右;外接陶瓷振荡器时,C1、C2约为47pF。C1、C2对频率有微调作用,震荡频率范围是1.2—12MHz。为了减少寄生电容,更好的保证振荡器稳定可靠的工作,谐振器和电容应尽可能安装的与单片机芯片靠近。

内部时钟发生器实质上是一个二分频的触发器,其输出信号是单片机工作所需的时钟信号。 ②外部时钟方式

外部时钟方式是采用外部振荡器,外部振荡信号由XTAL2端接入后直接送至内部时钟发生器。输入端XTAL1应接地,由于XTAL2端的逻辑电平不是TTL的,故建议外接一个上拉电阻。

一般情况下,单片机时钟输入均采用内部时钟方式,外接一个震荡电路,本系统采用内部时钟方式,晶振采用12MHz,其电路如下图4.7所示。

22

图4.5.2 单片机外接晶振电路

8. 复位电路 ①复位状态

计算机在启动时,系统进入复位状态。在复位状态,CPU和系统都处于一个确定的初始状态或成为原始状态,在这种状态下,所有的专用寄存器都赋予默认值。其复位状态见下表。

表4.5 计算机复位状态表

专用寄存器 PC ACC B PSW SP DPTR P0—P3 IP IE 复位状态 0000H 00H 00H 00H 07H 0000H FFH XXX0 0000B 0XX0 0000B 专用寄存器 TMOD TCON TH0 TL0 TH1 TL1 SCON SBUF PCON 复位状态 00H 00H 00H 00H 00H 00H 00H XXXX XXXXB 0XXX 0000B ②复位电路

23

单片机复位电路包括片内、片外两部分,片外复位电路通过引脚加到内部复位电路上,内部复位电路在每个机器周期S5P2对片外信号采样一次,当RST引脚上出现连续两个机器周期的高电平时,单片机就完成一次复位。外部复位电路就是为内部复位电路提供两个机器周期以上的高电平而设计的,AT89C2051通常采用上电自动复位和按键手动复位两种方式。上电复位电路在通电瞬间,在RC电路充电过程中,RST端出现正脉冲,从而使单片机复位。

按键手动复位又分为按键电平复位和按键脉冲复位,按键电平复位是将复位端通过电阻与Vcc相连,按键脉冲复位是利用RC微分电路产生正脉冲来达到复位的目的。本系统设计时采用的是按键手动复位方式。

4.6 D/A、A/D转换器

4.6.1 D/A转换器DAC0832的介绍 1、D/ A转换器DAC0832的主要性能指标

分辨率 通常将输入数字量的最低有效位LSB变化1时所引起的输入电压的变化△V称为分辨率,即△V=Vm/2,式中,Vm为输出电压的满度值;n为D/A转换器的二进制数的位数。

建立时间 当DAC输入数字量发生变换时,输出模拟电压也随之改变,但输出电压变化到稳定值时相对于输入数字量的变化有一段延迟时间,这段延迟时间就称为建立时间,用ts表示。建立时间越短,DAC的转换速度越块。通常用转换时间来反映建立时间,如DAC0832的转换速度为1us。

转换误差 转换误差可以用绝对误差△或相对误差r来表示。绝对误差△是指DAC的输入端加有固定的数字代码时,实际测得模拟输出值理论值之间的差。相对误差r是指绝对误差△与满度值之比,常用百分数表示。

电源抑制比 DAC的输出电压的变化量与相对应的电源电压变化量之比定义为电源抑制比。要求电源电压发生变化时,对输出电压的影响越小越好。

表4.6 DAC0832的引脚

符号 引脚 功能 符号 引脚 功能 24

D0~7 7~4,16~13 数据输入线 ILE 19 数据允许信号,高电平有效 VCC 20 IOUT1,IOUT2 11,12 AGND 3 DGND 10 电源输入线 电流输出线 模拟信号地 数字地 CS 1 输入寄存器选择信号,低电平有效 WR1 WR2 2 输入寄存器写选通信号,低电平有效 18 DAC 寄存器写选通信号, 低电平有效 数据传送信号, 低电平有效 RFB 9 VREF 8 基准电源输入线 反馈信号输入线 XFER 17

2. DAC0832的引脚介绍

DAC0832有20个引脚:ID7~ID0是8位数据输入端;ILE是输入数据允许锁存信号,CS与WR是第一级缓冲器选通信号,这三个信号决定了LE1的电平,LE1位为高电平时,锁存器的输出随输入变化,LE1的负跳变使数据锁存进锁存器,LE1为低点电平时,锁存器的输出不在随输入端数据变化;XFER与WR2是第二级缓冲器选通信号,它们决定了LE2的电平,LE2在不同电平时对锁存器的控制作用与LE2一致;VREF是基准电压源输入端;IOUT1、IOUT2分别是电流输出端1和电流输出端2;RFB是反馈信号输入端;AGND与DGND是模拟地与数字地,两者分开是一项常用的抗干扰措施。另外一点就是DAC0832是电流输出型DA转换器,当要以电压的形式输出时必须加外围电路实现I-V的转换,具体实现方法在下面的图中有所体现。

DAC0832的两级缓冲器都是8位锁存器,它具有二级锁存控制功能,当多片同时使用时可实现多参数的同时输出:此时每片DAC0832承担一种参数的D/A转换,各片第一级缓冲器的打开是有先后的,但各片的XFER与WR2信号如分别互连在一起,则多片DAC0832开始D/A转换和有模拟量输出的时间将基本统一。

DAC0832工作方式可分为单缓冲、双缓冲、直通式三种,具体电路连接方法如下图所示:

25

图4.6.1 双缓冲功能工作方式

(a)

26

(b)

(c)

图4.6.2 单缓冲方式的三种形式

27

图4.6.3 直通工作方式 4.6.2 A/D转换器ADC0809介绍

ADC0809是美国National Semiconductor公司推出的一款中低速廉价8位逐次逼近型AD转换芯片,具有八路输入通道,可轮流对外部八路模拟信号进行采样转换;其典型转换时间为100us,最大能达到11KSPS的采样率;总的不可调误差为±1LSB,单一5V电源供电,低功耗——15mW,广泛用于中低速采样系统当中。由于ADC0809 芯片内有三态输出缓冲电路, 因而可直接与单片机的数据总线相连, 无须附加逻辑接口电路。另外, 由于ADC0809 与CMOS 和TTL 兼容, 因而可构成简单的数据采集最小系统。本文细讲述了ADC0809的工作原理和硬件与软件设计方法。ADC0809 为28 脚双列直插式封装, 其引脚分布如图4.6.4 所示。各主要引脚功能如下:

28

图4.6.4 ADC0809引脚分布

Vcc:芯片工作的电源电压端,电压范围为4.5~5.5V,推荐使用的典型电压值为5V。

GND:模拟和数字接地端。

REF+和REF-:正和负的基准电压输入端,范围为0~Vcc。ADC0809内部不含电压基准电路,需要外部提供。REF+的值要大于REF-的值,应用时常用的方法是直接将REF-接模拟地。

IN0~IN7:模拟电压信号输入端,电压范围为0~(VREF+)-(VREF-)。通过可编程操作模拟多路开关选择输入的有效通道。

START:转换启动信号输入端。当开端出现一个100ns的脉冲时启动AD转换。

ADDA、ADDB、ADDC:通道地址输入端。八个模拟信号输入通道的输入选通地址由这三个引脚确定。

ALE:输入地址锁存端。锁存ADDA、ADDB、ADDC输入的地址码。 EOC:转换结束信号输出端。当内部进行完一次AD转换时该引脚输出高电平,此引脚也可作为中断信号触发单片机中断,是单片机进行相应处理。

OE:数据输出使能端。当进行完一次AD转换时,置位该引脚则数据经三态门输出至8位数据输出端,此时单片机可以读取AD转换结果。

29

CLOCK:外部时钟输入端。ADC0809没有内部时钟振荡电路,需外加时钟信号方能正常工作,典型值为640KHz。本系统加的是500KHz。

LSB~MSB:8位数据输出端。AD转换的结果最终经三态门输出至这8个引脚。

ADC0809与单片机的典型接法如图4.6.5所示:

图4.6.5 ADC0809典型接法 4.6.3 存储器的选取

在数字化语音存储与回放的设计中可用4片UT62256采用分页存储技术存储器来存储语音信号。UT62256具有在线可擦写、读写速度快、信息保存可靠、存储容量大等优点,每片的容量为32K字节。由于89C52一般能寻址64K字节。所以需要利用端口进行地址译码,本系统中另加四根线(P1.0、P1.1、P1.2、P1.3)控制74HC138进行地址译码输出,使寻址空间扩展到128K字节。UT62256读取时间仅为70ns,单一+5V电源,低功耗:待机为1uA(LL系列),启动工作为30~40mA。输入输出全兼容CMOS和TTL电路。但是UT62256是SRAM存储器,掉电后数据会丢失,为了保持数据可以附加后备电池供电(UT62256只需2V电压即可维持片内数据),如果不加后备电源只有系统上电后再重新录制。其引脚分布如图4.6.6所示:

30

图4.6.6 UT62256引脚分布

4.6.4 ZLG7289介绍

ZLG7289B 是广州周立功单片机发展有限公司自行设计的数码管显示驱动及键盘扫描管理芯片,可直接驱动8 位共阴式数码管(或64 只独立LED),同时还可以扫描管理多达64 只按键。ZLG7289B 内部含有显示译码器,可直接接受BCD 码或16 进制码,并同时具有2 种译码方式。此外,还具有多种控制指令,如消隐﹑闪烁﹑左移﹑右移﹑段寻址等。ZLG7289B 采用SPI 串行总线与微控制器接口,仅占用少数几根I/O 口线。利用片选信号,多片ZLG7289B 还可以并接在一起使用,能够方便地实现多于8 位的显示或多于64 只按键的应用。

ZLG7289B 可广泛地应用于仪器仪表,工业控制器,条形显示器,控制面板等领域。在设计时千万注意:ZLG7289B 一定要跟着控制面板走,而不要放在主机板上。ZLG7289B 驱动数码管显示采用的是动态扫描法,为了防止显示出现闪烁,采用了比较高的扫描频率。扫描键盘同样用的也是频率较高的信号。

在本语音系统中只用到了ZLG7289的显示和按键读取功能,关于芯片详细的介绍、使用方法、典型电路请参考芯片手册,这里只给出本系统中的电路连接方法。如图4.6.7所示:

31

图4.6.7 ZLG7289电路连接

4.6.5 串口通信电路介绍

串口通信电路结构简单功能也很单一,就是完成串口数据的发送与接收,并不涉及程序的编写;由于STC单片机可以通过串口进行程序下载,因此串口电路在本系统还用于程序下载。串口通信电路有现成的可套用,这里不予以详细介绍。其实际电路连接如下图所示:

图4.6.8 串口通信电路

32

4.6.6 ISP下载电路

这部分电路本来是可以不用设计进来,但考虑到学习51系列单片机不真正用用外国的产品可能不算是真正学了;为了能够使本系统可以使用Atmel公司的单片机,特地加上了ISP接口电路以便给Atmel的单片机导入程序。电路很简单就是一个接口而已,所以不详述。如下图所示:

图4.6.8 ISP接口电路

5 软件设计

为了充分利用单片机的片内资源和硬件特点,本系统的电路设计采用总线控制的方式实现对AD、DA、SRAM等器件的读写操作。由于ZLG7289采用的是SPI的接口,所以对它的操作需用软件来模拟SPI通信时序。采用总线控制方式最大的优点就是利用单片机自身硬件产生的读写时序实现对外部器件的操作,通过对外接器件进行统一编址,以地址的方式对外部器件进行寻址操作,这样就使得程序设计简单,屏蔽了中间过程,比以往任何用端口模拟的操作要简单的多;做为一名单片机的爱好者与学习者,不懂总线控制方式不能算是真正学会了单片机!经过此次学习,对比了以往软件模拟的编程方式和总线控制的方式,深深的体会到了总线控制方式的优越性。当然,简便归简便,在编程调试过程中还是遇到了各种各样平常没有遇到的问题、情况、特殊现象;有些问题是我们平常认为很自然的不会发生的,也有些问题是我们平时根本就没有想到过的。

总之,动手了肯定会有收获和认识。在实践中运用知识可以深化对知识的理解和认识,可以更好的巩固和应用所学知识。做事一定要敢于尝试,不能局限于用一种方法,有时候要善于“偷懒”充分利用片内资源。

系统总体实现流程如图5.1所示:

33

开始 初始化I/O、ZLG7289 否 是否有按键按下? 是 否 为S1? 否 为S2? 否 为S3? 否 为S4? 是 是 是 是 通过串口将数据上传至PC,数码管显示“F”,发完关闭显示 通过串口接收PC发送的数据 播放录制的或PC传输的数据,数码管显示播放时间 开始录音,数码管显示录音时间,录完显示“0” 否 完成? 否 完成? 否 完成? 否 完成? 是 是 是 是 结 束 34

6 总结与展望

经过一个学期的学习、思考、资料查阅、制作调试,终于完成了这个课题。调试结果和预期的吻合,不加压缩算法存储时间16s左右,加压缩算法压缩后存储时间达32s,且无明显失真。电路板改过后存储时间24s,回放无明显失真;数据可以通过串口上传和下载,即:录制的声音信息可以传到电脑上查看,也可以把电脑里声音信号的文件载入SRAM进行播放。实现了单片机和计算机之间的大容量数据交换,打破了只能模拟输入的局限。

刚开始的时候以为自己基础知识不错,自以为是,闭门造车,在没有充分理解电路原理也没有请教老师的情况下就做了一次板子,结果可以想象——失败了。三个星期的时间白白浪费了,而且还浪费了金钱。说真的,自从做了这个课题确实进步了不少;模电和数电知识得到了巩固和强化,动手能力自然也有了很大提高,同时发现问题解决问题的能力也有了相应提高。经此课题收获颇多,感触很深,认识得到拓展,毕竟这是第一次单独完成一个课题;从元器件选取到系统总体框架的确立,从电路设计到硬件焊装,从软件调试到最终完成老师给定任务,每一步都给了我深刻的体会,每进一步认识也就更深一个层次。学习重在实践,只有动手才能充分体会到学习的乐趣,才能真正巩固书本知识,才能认识到自己的不足,才能解决实际问题。

在这里将我个人做课题的一些总结性的话写出来,一来可以提醒自己,使自己能够有所进步,二来也可以做为经验以供他人借鉴和参考。

掌握单片机的应用开发需要一个过程。首先必须掌握数字电路和模拟电路方面的知识,其次还必须学习单片机原理、硬件结构、扩展接口和编程语言。初次开发时由于没有经验,可能要经过多次反复才能完成项目。这时,会得到较大收获和积累,主要表现在硬件设计的积累,软件设计方面的积累和设计经验方面的积累。

要热衷于学习和使用新技术,善于挑战自我。另外,还要细心和认真,因为硬件设计上的一个小疏忽往往会造成非常大的经济损失;只有细心和认真的检查,负责任的测试,不懈的学习和积累,才能使硬件设计水平持续不断的提高。

单片机开发无外乎就是要搞清楚以下几个方面的问题:

? 单片机最小系统的构建 ? 了解单片机的组成结构 ? 了解指令集和模块空间分配

? 掌握I/O、定时器、中断等片内外设的寄存器设置及操作 ? 掌握一些常用外设的设置和应用,如LCD、ADC、DAC、SRAM等 ? 掌握单片机开发环境的使用

最后要切记,请不要做一个浮躁的嵌入式工程师,与其把时髦的技术挂在嘴

35

边,还不如把基本的技术记在心里。不要被一些专用词汇所迷惑,最根本的是先了解最基础的知识。掌握单片机的应用开发,入门并不难,难的是长期坚持和不遗余力的学习和实践。

致 谢

在课题完成之际,我首先要向指导老师杨录老师表示深深的感谢。在课题制作期间,我经历了不知从何下手的无助和设计过程中遇到的各种技术困难,都是靠杨老师在百忙之中抽出时间来对我悉心指导,为我们提出了各方面的指导意见,为我们提供各方面的重要资料以及元器件,他是我学习工作进程中的中坚力量。同时也要感谢老师给了我一次锻炼的机会,当然也给了我一次成功的机会。

附录

附录一 系统程序代码

/****************************************************************** //总体电路设计采用总线控制方式

//对外围器件的访问统一采用地址编码方式 //2011-02-18

******************************************************************/ #include #include #include #include //包含绝对地址定义的头文件

#define ADC XBYTE[0x7FF0] //ADC 0通道地址 #define ADC_CTRL 0xFD //ADC 控制信号 #define DAC XBYTE[0x6FFF] //DAC 地址

#define DAC_CTRL 0xFC //DAC 控制信号

//RAM地址范围为 0x8000~0xffff (共4页) //ADC的地址范围为 0x7ff0~0x7ff7 (共8个通道) //DAC的地址范围为 0x6fff (只要低2位为 ff 即可) static unsigned int RAM_address; //RAM 地址变量,起始地址0x8000 unsigned char count,m,n=1,key = 0xff;

//显示字符编码

unsigned char code zifu[]={0x7e, /*0*/ 0x30, /*1*/ 0x6d, /*2*/ 0x79, /*3*/ 0x33, /*4*/

36

0x5b, /*5*/ 0x5f, /*6*/ 0x70, /*7*/ 0x7f, /*8*/ 0x7b, /*9*/ 0x0e, /*L*/ 0x47, /*F*/

0x00, /*无显示*/ };

//ZLG7289接口定义

sbit ZLG7289CS = P1^5; //片选信号,低电平有效 sbit ZLG7289CLK = P1^6; //时钟信号,上升沿有效 sbit ZLG7289DIO = P1^7; //数据信号,双向

sbit ZLG7289INT = P3^2; //键盘中断请求信号,低电平(负边沿)有效

sbit ADCEOC = P3^3;

void delay_us(unsigned char n) //执行一次约为14us { for(;n--;n>0) { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); } }

//************************************************************************ //短延时

void nNop(unsigned char i) { for(;i>0;i--) ; } //长延时

void LDelay(unsigned int i) { unsigned int j; for(;i>0;i--) { for(j=1000;j>0;j--);} }

//************************************************************************

37

//函数功能:ZLG7289复位指令 #define ZLG7289_Reset() ZLG7289_Instruc(0xa4)

//***********************************************************************

//函数:SPI_WriteOneByte() //功能:向SPI总线写数据

//说明:写入的数据长度为1字节

void SPI_WriteOneByte(unsigned char Wdata) { unsigned char i; for(i=0;i<8;i++) { ZLG7289DIO = (bit)(Wdata&0x80); ZLG7289CLK = 1; Wdata <<= 1; nNop(1); ZLG7289CLK = 0; nNop(1); } }

//函数:SPI_ReadOneByte() //功能:从SPI总线读数据 //说明:返回1字节数据

unsigned char SPI_ReadOneByte() { unsigned char i,temp;

ZLG7289DIO = 1; //将I/O切换到输入状态 for(i=0;i<8;i++) { ZLG7289CLK = 1; nNop(5); temp <<= 1; if(ZLG7289DIO) temp++; ZLG7289CLK = 0; nNop(5); } return temp; }

//函数:ZLG7289_Instruc()

38

//功能:执行ZLG7289纯指令 //说明:指令长度为1字节

void ZLG7289_Instruc(unsigned char Instruc) { unsigned char i; i = IE; IE &= 0xfa; //禁止外部中断;

ZLG7289CS = 0; nNop(5); SPI_WriteOneByte(Instruc); ZLG7289CS = 1; nNop(5); IE = i;

}

//函数:ZLG7289_Instruc_Data //功能:执行ZLG7289带数据指令

//说明:指令长度以及数据长度均为1字节

void ZLG7289_Instruc_Data(unsigned char Instruc,unsigned char Data) { unsigned char i; i = IE; IE &= 0xfa; ZLG7289CS = 0; nNop(5); SPI_WriteOneByte(Instruc); nNop(5); SPI_WriteOneByte(Data); ZLG7289CS = 1; nNop(5); IE = i; }

//函数:ZLG7289_ReadKey()

//功能:执行ZLG7289读键盘指令 //说明:返回1字节的按键号 // 按键号的范围为:0 ~ 63(即0x0 ~ 0x3f) // 若没有按按键被按下了,返回255(即0xff) unsigned char ZLG7289_ReadKey() { unsigned char Key; ZLG7289CS = 0;

39

nNop(10);

SPI_WriteOneByte(0x15); nNop(5);

Key = SPI_ReadOneByte(); nNop(1);

ZLG7289CS = 1; nNop(5); return Key;

}

//函数:ZLG7289_Download //功能:下载数据

//说明:将要显示的数据下载到ZLG7289内,并译码显示 //参数:数码管编号x,要显示的数据dat

void ZLG7289_Download(unsigned char x,unsigned char dat) { x |= 0x90; //以自己编码的方式进行译码 1001 0xxx ZLG7289_Instruc_Data(x,dat);

}

//ZLG7289初始化函数 void ZLG7289_Init() { LDelay(20); //延时一定时间,以使系统电源稳定 //ZLG7289 I/O 口初始化 ZLG7289CS = 1; ZLG7289CLK = 0; ZLG7289DIO = 1; ZLG7289INT = 1; }

//********************普通录音函数************************* void Record() { unsigned char temp,page,page_ctrl; unsigned int i; for(page=0;page<4;page++) //分4页存储 { switch(page) { case 0:page_ctrl=0xF8;break;//RAM 第一页控制信号 case 1:page_ctrl=0xF9;break;//RAM 第二页控制信号 case 2:page_ctrl=0xFA;break;//RAM 第三页控制信号 case 3:page_ctrl=0xFB;break;//RAM 第四页控制信号

40

本文来源:https://www.bwwdw.com/article/njbg.html

Top