科研课题结题论文
计算机工程管理科学科研申请书
体育艺术科研立项申请书
电力电工科研课题申请书
中小学职业教育改革项目申请书
护理护士保健职称课题
医学药学科研立项申请书
教育教学科研项目申请书
经济管理研究项目计划书
档案图书馆科研立项申请书
水利交通工程论文代写代发表
建筑工程职称论文代写代发表
NSFC项目申请书代写
NSFC申请攻略申报书代写
代写国家社会科学基金课题立项项目标书
国家自然科学基金资助政策
代写自然科学基金申报中的问题研究
·医学临床 ·经济财会
·政治法律 ·教育体育
·文学艺术 ·计算机
·基础医学 ·药学生物
·建筑电气 ·语言文化
·工学工程 ·护理康复
·写作经验 ·格式范本
名称:研友工作室
电话:0760-86388801
传真:0760-86388520
手机:13380876598
邮箱:51643725@qq.com
地址:广东中山市孙文中路2号
网址: www.zzss8.com
商务QQ:51643725
微信二维码

业务联系
工学工程
基于单片机的DTMF信号合成
添加时间: 2019-4-21 13:44:17 来源: 作者: 点击数:625

  

摘要  …………………………………………………………………………  1

引言  …………………………………………………………………………  2

1.  DTMF信号介绍   ………………………………………………………    3

1.1  DTMF信号特性  ……………………………………………………………   3

1.2  DTMF信号的应用 …………………………………………………………   4

2.  系统硬件设计  …………………………………………………………       5

2.1  系统硬件的总体实现   ……………………………………………… 5

2.2  中央控制器——AT89C51   …………………………………………  6

  2.3  数摸转换器——DAC0832   …………………………………………  8

  2.4  单片机与键盘的接口电路……………………………………………  10

  2.5  AT89C51DACO832的接口电路…………………………………  10

  2.6  RC低通滤波器      ………………………………………………   11

3.  系统软件设计 ……………………………………………………………      11

  3.1  系统程序设计   ………………………………………………………………  12

3.2  单片机与键盘接口程序设计  ……………………………………………… 12

3.3  DTMF信号产生程序设计  …………………………………………………  14    

3.4  单片机与D/A接口程序设计   ……………………………………………  18

4.  系统有效性验证…………………………………………………………       19

4.1  DTMF信号频率误差分析……………………………………………………  19

4.2  DTMF信号接收系统的结构…………………………………………………  20

4.2.1  MT8870的介绍…………………………………………………………  20

4.2.2  DTMF信号接收系统的硬件结构……………………………………  21

4.2.3  接收系统的程序设计…………………………………………………   22

5. 结束语  …………………………………………………………………    22

6. 附录   ……………………………………………………………………… 23

7. 参考文献  ………………………………………………………………   35

8. 致谢语    ………………………………………………………………   35

 

基于单片机的DTMF信号合成

      

摘要:本课题最主要的特点在于用单片机来产生DTMF信号,而不是通过专用的DTMF产生芯片,具有实际应用的意义。本文首先介绍了DTMF信号及其应用,然后详细介绍了基于单片机的DTMF信号合成的硬件及其软件系统,重点阐述了用单片机产生DTMF信号的算法,先通过计算得出1/4周期简单正弦函数的数据,然后制作一个表格,CPU按特定的时间间隔即采样周期查表得到对应的数据,经DAC转换后产生正弦波。最后对单片机产生的DTMF信号的误差进行了分析,并介绍了有MT8870组成的DTMF解码系统的硬件和软件。

关键词: DTMF; 单片机; MT8870;正弦波;

 

                                                                                         

 

DTMF(Dual Tone Multi Frequency)信号是音频电话的拨号信号。由美国AT&T贝尔实验室研制, 双音多频信号编码技术易于识别,抗干扰能力强,发号速度快,且比用modem进行远程传输的方法更为经济实用,因此这种拨号方法取代了传统的脉冲拨号。

电话中的双音多频信号有两种用途:一是用于双音多频信号的拨号,去控制交换机接通被叫的用户电话机;二是利用双音多频信号遥控电话机各种动作,如播放留言,语音信箱。这些都离不开DTMF信号的产生。

目前,大多数的DTMF信号的产生都是采用专用芯片MT5087MT8880等,这种方法信号编码产生速度快但有很大的局限性,如果音频信号频率的改变应用于别的系统时,专用芯片就发挥不了作用了,其次是要实现用户多路双音多频信号发送比较困难。

基于单片机的DTMF信号合成的系统可以克服硬件电路的缺点,容易实现多路DTMF信号,节约系统成本,使双音多频信号的应用领域更广泛。

用单片机来产生DTMF信号主要方法有通过脉宽调制、增量调制生成双音多频信号或先通过编写计算正弦函数的子程序,然后调用函数把计算得到的数据经DAC转换后产生DTMF信号。

本课题采用的方法是先通过计算得出1/4周期简单正弦函数的数据,然后制作一个表格,CPU按特定的时间间隔即采样周期查表得到对应的数据,经DAC转换后产生正弦波。由于前者需要编写复杂的计算正弦波函数的程序,占用相当的程序存储空间,计算时间长,降低了CPU的效率,很难保证正弦波频率的精度。查表程序非常简单,占用硬件资源也非常少,频率精度和谐波系数取决于采样周期和表格的大小。只要采样周期足够小和表格足够大,就可保证正弦波的精度。

1. DTMF信号介绍

1.1  DTMF信号的特性

DTMF是由组(fb)和高频组(fa)两组频率信号构成,每个数字信号由低频组和高频组的任意一个叠加而成。根据CCITT的建议,DTMF的编译码定义如表1所示,

可用下式表示

f(t)A_{a}sin(2 f_{a}t)+A_{b}sin(2 f_{b}t))

式中两项分别表示低、高音群的值,AbAa分别表示低音群和高音群的样值量化基线,而且两者幅值比为K=Ab /Aa (0.7<K<0.9)。同时规定,对应于表1中的标称频率在发送时,DTMF信号的频率偏差不应当超过1.5%,每位数字的信号极限时长应该大于40ms,而接收设备对2%的偏差应能可靠地接收,对30ms40ms时长的信号可以正常地接收。

与单音编码不同,DTMF 信号是采用8 中取2 的方式,从高低两个音组中各取一个音频复合而成来代表0 - 9 十个号码和其他功能码,再加上这8 个音频信号的各频率间不存在谐波关系,大大减少了虚假信号的干扰,因而DTMF 信号工作可靠性特别是抗干扰能力很强

1.2  DTMF信号的应用

DTMF 信号即双音多频信号,最先用于程控电话交换系统来代替号盘脉冲信号。如图1

主叫用户摘机按键拨号后,电话号码所对应的DTMF信号通过电话线传到程控交换机中的DTMF接受电路,交换机中的微机识别被叫电话号码后,接通主被叫用户实现双方通话。

DTMF信号还用于自动控制系统,如果把DTMF的发送电路用于主控系统,接受电路用于被控系统,就可以方便地组成有线或无线通信系统,如图2所示,其通道数视需要而定,16通道以内每通道只需编一位号码即可,若需要更多通道,则可象电话号码编号一样编为两位或两位以上的号码。

2.系统硬件设计

2.1 系统硬件的总体实现  

为使产生的DTMF信号频率误差尽可能小,我们对该系统的硬件电路作了精心设计。图3是基于单片机的DTMF信号的合成的硬件图:

                                3 系统的硬件图  

该系统的硬件设计按实现的功能来分,可分为以下3个部分。单片机与键盘的接口电路,实现按键信号的产生的功能,AT89C51根据读进来的键码来实现相应的键功能向P0口发按键对应的DTMF信号,数摸转换器与单片机的接口电路主要来实现把P0口发出的数字信号转换为模拟信号,最后通过RC低通滤波器把信号中的高频成分滤去。其中,AT89C51单片机是整个电路的核心,它控制其他模块来完成各种复杂的操作。

在本章下面几个小节中将根据图3的硬件设计电路,对各个模块电路进行详细的设计与分析。

2.2 中央控制器——AT89C51

   AT89C51是由美国Atmel 公司生产的至今为止世界上最新型的高性能八位单片机之一。

2.2.1  AT89C51的特点

    AT89C51具有以下几个特点:

·AT89C51MCS-51系列的单片机在指令系统和引脚上完全兼容;

·片内有4k字节在线可重复编程快擦写程序存储器;

·全静态工作,工作范围:0Hz24MHz

·三级程序存储器加密;

·128×8位内部RAM

·32位双向输入输出线;

·两个十六位定时器/计数器

·五个中断源,两级中断优先级;

·一个全双工的异步串行口;

·间歇和掉电两种工作方式。

2.2.2  AT89C51的功能描述

AT89C51是一种低损耗、高性能、CMOS八位微处理器,片内有4k字节的在线可重复编程、快速擦除快速写入程序的存储器,能重复写入/擦除1000次,数据保存时间为十年。它与MCA-51系列单片机在指令系统和引脚上完全兼容,不仅可完全代替MCS-51系列单片机,而且能使系统具有许多MCS-51系列产品没有的功能。

AT89C51可构成真正的单片机最小应用系统,缩小系统体积,增加系统的可靠性,降低系统的成本。只要程序长度小于4K,四个I/O口全部提供给用户。可用5V电压编程,而且擦写时间仅需10毫秒,仅为8751/87C51的擦除时间的百分之一,8751/87C5112V电压擦写相比,不易损坏器件,没有两种电源的要求,改写时不拔下芯片,适合许多嵌入式控制领域。工作电压范围宽(2.7V~6V),全静态工作,工作频率宽在0Hz24MHz之间,比8751/87C5151系列的6MHz12MHz更具有灵活性,系统能快能慢。AT89C51芯片提供三级程序存储器加密,提供了方便灵活而可靠的硬加密手段,能完全保证程序或系统不被仿制。P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读/写操作。

2.2.3  AT89C51引脚功能

AT89C51单片机为40引脚芯片见附录1

1. 口线:P0P1P2P3共四个八位口。

§ P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读/写操作。P0口也用以输出外部存储器的低8位地址。由于是分时输出,故应在外部加锁存器将此地址数据锁存,地址锁存信号用ALE

§ P1口是专门供用户使用的I/O,是准双向口。

§ P2口是从系统扩展时作高8位地址线用。不扩展外部存储器时,P2口也可以作为用户I/O口线使用,P2口也是准双向口。

§ P3口是双功能口,该口的每一位均可独立地定义为第一I/O功能或第二I/O功能。作为第一功能使用时操作同P1口。P3口的第二功能如表2所示。

2.控制口线:PSEN(片外选取控制)ALE(地址锁存控制)EA(片外存储器选择)RESET(复位控制);

3.电源及时钟:VCCVSSXTAL1XTAL2 操作方法。

2.2.4 操作方法

1.程序存储器加密。AT89C51芯片程序存储器有三级硬件加密,能够有效地保证系统不被仿制和软件不被复制,加密等级设置见附录2

2.工作模式。AT89C51有间歇和掉电两种工作模式。间歇模式是由软件来设置的,当外围器件仍然处于工作状态时,CPU可根据工作情况适时地进入睡眠状态,内部RAM和所有特殊的寄存器值将保持不变。这种状态可被任何一个中断所终止或通过硬件复位。

掉电模式是VCC电压低于电源下限,振荡器停止振动,CPU停止执行指令。该芯片内RAM和特殊功能寄存器值保持不变,直到掉电模式被终止。只有VCC电压恢复到正常工作范围而且在振荡器稳定振荡后,通过硬件复位掉电模式可被终止。

2.3 数摸转换器——DAC0832

  在电子技术的很多应用场合往往需要把数字量转换成模拟量,称为数 / 模转换器(D / A转换器,简称DAC)。完成这种转换的线路有多种,特别是单片大规模集成D / A转换器问世,为实现上述的转换提供了极大的方便。使用者可借助于手册提供的器件性能指标及典型应用电路,即可正确使用这些器件。本系统将采用大规模集成电路DAC0832实现D / A转换

DAC0832是采用CMOS工艺制成的单片电流输出型8位数 / 模转换器。图4DAC0832的逻辑框图及引脚排列。

4  DAC0832单片D/A转换器逻辑框图和引脚排列

器件的核心部分采用倒T型电阻网络的8D / A转换器,它是由倒TR2R电阻网络、模拟开关、运算放大器和参考电压VREF四部分组成。

DAC0832各引脚含义如下:CS为片选信号,CSILE(输入寄存器允许信号)合起来可对写信号WR1是否起作用进行控制。WR1写信号用以将8位数字量D7D6D5…输入并锁存于DAC0832内部的输入寄存器中,WR写信号与传送控制信号XFER同时有效,则将输入寄存器的数字量再传送到8D/A寄存器锁存起来。这时8D/A转换器就开始工作。IOUT1IOUT2为输出电流,其中IOUT1D/A寄存器内容为全1时输出电流为最大;当D/A寄存器内容为零时输出电流为0IOUT2为一常数与IOUT1之差,即IOUT1+IOUT2=常数。AGNDDGND分别为模拟量地和数字量地,它们应共地。VREF精度尽可能高一些。V是电源电压,其值可在+5V+15VR为反馈电阻,由于片内已具备反馈电阻,故可以与外接运算放大器的输出端短接。

DAC0832输出的是电流,要转换为电压,还必须经过一个外接的运算放大器,电路如图5所示。

                  5 电流转换为电压电路

5中 接地为低电平,ILE为高电平,DAC0832处于直通的工作状态。输入数字量(D0~D7)通过输入锁存器,数据寄存器直接传送到DAC,输出相应模拟量。运放的输出电压为

     )

由上式可见,输出电压VO 与输入的数字量成正比,这就实现了从数字量到模拟量的转换。

2.4 单片机与键盘的接口电路

6是单片机与键盘的接口电路。单片机的串行口在方式0下工作,作为同步移位寄存器使用,这时以RXD端作为数据移位的出口,而TXD端提供移位时钟脉冲。在无键按下的情况下p1.0,p1.1读进来的是高电平,当有键按下时,p1.0或p1.1端将会变为低电平。

6 单片机与键盘的接口电路

2.5 AT89C51与DACO832的接口电路

7是AT89C51与DACO832的接口电路。在这里P0口是做为输入口使用的,由于通路中已有输出锁存器,因此数据输出可以与外设直接相连,无需再加数据锁存器电路。但是由于输出电路是漏极开路电路,必须外接上拉电阻才能有高电平输出。DAC0832是处于直通状态,P3.6把第一写信号,第二写信号,数据传送信号拉为低电平。

7  AT89C51与DACO832的接口电路

2.6  RC低通滤波器

   由于从DAC0832出来的DTMF信号含有丰富的高频成分,信号波形是阶梯型的需要经过一个低通滤波器,使信号变得光滑与准确。图8是简单的RC低通滤波器。

          8  RC低通滤波器

由图8我们可以知道:

ωc=1/(RC)称为截止角频率,相应地fc=ωc/(2π)=1/(2πRC)称为截止频率。构成DTMF信号的8个音频的最高频率1633(由表1可知),因此,我选择了6.8k的电阻和0.01uf的电容,使截止频率为2341hz

3.系统软件设计

系统的软件设计主要分为单片机与键盘接口程序,DTMF信号产生程序设计,单片机与D/A接口程序设计。下面,就整体设计以及每个单元功能模块分别进行详细说明。

3.1 系统程序设计

9是系统的程序流程图。

9 系统的程序流程图

3.2 单片机与键盘接口程序设计

10单片机与键盘程序流程图

10是键程序流程图,主要分为键扫描,去抖动,键码计算,等待键释放等。

3.2.1 键扫描

如图11所示,键盘的行线一端经电阻接+5V电源,另一端接单片机的输入口线。各列线的一端接单片机的输出口线,另一端悬空。为判定有没有键被按下,可先经输出口向所有列线输出低电平,然后再输入各行线的状态。若行线状态皆为高电平,则表明无键按下;若行线状态中有低电平,则表明有键被按下。接下来就要确定被按键的位置。先使输出端口输出0FEH,然后输入行线状态,测试行线状态中是否有低电平的。如果没有低电平,再输出0FDH,当出现行线有低电平时,则闭合键找到,此次扫描结束。

3.2.2 去抖动

当扫描表明有键被按下之后,紧接着应进行去抖动处理。因为常用键盘的键实际上就是一个机械开关结构,当被按下的时,由于机械触点的弹性及电压突跳等原因,在触点闭合或断开的瞬间会出现电压抖动。一般为510ms。为保证键扫描的正确,需进行抖动处理。在这里我采用了软件延时的方法,延时时间为10ms

3.2.3 键码计算

被按下来的键确定下来后,接下来的工作是计算闭合键的键码,因为有了键码,才好通过转移指令把程序执行转移到闭合键所对应的功能子程序中。下面是计算键码的公式:

键码=行首号+列号

3.2.4 等待键释放

等待键释放是为了保证键的一次闭合仅进行一次处理,这里我是通过等待来实现的。

3.3产生DTMF信号的程序设计

3.3.1 函数y=C*sin(ωt)C的数据表分析

正弦函数y=C*sin(ωt)的波形如图12CPU对不同时间所对应的相位进行计算得出相应的数据,经D A C 转换后产生正弦波;也可先通过计算得出一个周期的数据,制作一个表格,CPU按特定的时间间隔即采样周期查表得到对应的数据,经DAC转换后产生正弦波。但前者需要编写复杂的计算正弦波函数的程序,占用相当的程序存储空间,计算时间长,降低了CPU的效率,很难保证正弦波频率的精度。查表程序非常简单,占用硬件资源也非常少,频率精度和谐波系数取决于采样周期和表格的大小。查表方法产生正弦波先计算出正弦波一个周期的数据,作为产生波形的数据表。采样周期足够小和表格足够大,就可保证正弦波的精度。为了数据表足够大,尽量占用较小的程序存储空间,实际只需制作0°到90°的数据表格,经过简单的运算即可得到一个周期的数据,又可减少3/4数据表存储空间。Y=C*sin(ωt)对应的电信号为交流信号,须经电平提升为直流电才能满足CPU的输出特性,函数Y=C*sin(ωt)C符合要求。对该函数经数学分析或图形观察,会得出以下结论:

1)相位为0°~90°时,计算出的数据分布为由0C。用0°到90°的数据表,经DA转换后可产生函数Y=C*sin(ωt)0°到90°范围内的波形。每次读出的数据加C,经DA转换后可产生函数Y=C*sin(ωt)C0°到90°范围内的波形。

                                          

12 y=63*sin(t)的波形

2)相位为90°~180°时,于0°~90°的图形左右对称,通过相反的方向,即由后向前读0°到90°的数据表,每次读出的数据加C,经DA转换后可产生该函数在90°到180°范围内的波形。

3)相位为180°~270°时,于0°~90°的图形上下对称,对应数据绝对值相等,符号相反。读数据表的方向与0°~90°相同,每次读出的数据符号取反再加C,经DA转换后可产生该函数在180°到270°范围内的波形。

4)相位为270°~360°时,于180°~270°的图形左右对称,通过相反的方向,即由后向前读0°到90°的数据表,每次读出的数据符号取反再加C,经DA转换后可产生该函数在270°到360°范围内的波形。

3.3.2 函数Y=C*sin(ωt)C的频率计算

Y=C*sin(ωt)C的相位由0°起,每增加一个单位(即角度增量)计算出一个数据,如δ=1°,共可得到360个数据,由此制作一个大小为包含360个数据的数据表。角度增量δ决定了数据表的大小,一个周期数据表的大小为360/δ。实际只需制作0°到90°的数据表,大小为S=90/δ,由于起点也是一个数据,表格实际大小比S1个单元。CPU每隔恒定的时间间隔(即采样周期Tc),由数据表的第一个数据起,按特定的步长N,读下一个数据,送DA转换器。N=1时每读一个数据,表格指针前进一步,即读出相邻的下一个数据,表格大小/步长=S/N=90步后,即可产生函数1/4周期的波形,4S/N=360步后,即可产生一个周期的波形。如采样周期Tc=10μs,得:周期=360Tc,频率=1/360Tc=278HzCPU由第一个数据起,N=2时每读一个数据,表格指针前进两步,即间隔一个数据读一个数据,4S/N=360/2=180步后即可产生一个周期的波形周期=180Tc,频率=1/180Tc=556Hz。同理,由第一个数据起,按不同的步长N读下一个数据,4S/N步后即可产生函数一个周期的波形,周期= 4TcS / N,频率=N/4TcS。表格大小S=90/δ、步长N和采样周期Tc决定了频率,即频率f= N/4TcS =Nδ/ 360 Tc。由指定的频率反过来推得步长N= 360fTc/δ。

根据香侬定理,正弦波一个周期内的采样次数必须大于2,才可反应原函数的频率特性,一般要求采样次数要大于5。对一个特定频率的正弦函数,合理选择步长N和采样周期Tc,很易满足这一条件。

3.3.3  DTMF波形振幅的计算

函数Y=C*sin(ωt),振幅为C,对应交流电信号的峰峰值为2C。为满足CPU的输出特性,电平提升为直流电后的函数为Y=C*sin(ωt)C,最大值为2C,最小值为0DTMF信号是由两个频率不同、幅度相同的正弦波叠加而成,YDTMF=C*sin(ω1t)+C*sin(ω2t)2C,它的最大值是4C,最小值为0。而8DA转换电路所能表达的最大值为28-1=255n位转换电路所能表达的最大值为2n-1 DTMF信号的最大值4C不能超过2n-1。所以振幅C ≤(2n-1/4,取整为C=2n-2-18DA转换时的振幅C=26-1=63

3.3.4  DTMF波形的计算

在高频群和低频群中分别产生一种频率的正弦波,两个正弦波矢量相加后得到DTMF信号。由于电路的角度增量δ、表格的大小S和采样周期Tc为同一固定参数,只能通过改变步长N的方法来实现频率的变化。程序中设置独立的高频群表格指针和低频群表格指针,独立的高频群步长寄存器和低频群步长寄存器,以及产生采样周期Tc的延时子程序或定时中断程序。没有内嵌定时器的CPU可用延时子程序,具有内嵌定时器的CPU可用简单的定时中断程序。每隔一个采样周期Tc,指针计数器分别按各自不同的步长计数。当表格指针超过数据表的任何一个端点时,需改变读表方向,表格指针增量计数改为减量计数,减量计数改为增量计数。读出由两个指针指定的数据后再分别加C,电平提升为直流电后,两个数据相加得到DTMF信号的数据。CPU连续地读出数据,经DA转换后产生对应频率的DTMF信号的波形。改变步长寄存器,可产生16种不同频率组合的DTMF信号的波形。

3.3.5  产生DTMF信号的流程图

在本系统中我取表格的长度S=144,采样周期Tc=65us, δ=0.625N= 360fTc/δ可得八个频率对应的步长见表3

13是产生一个特定频率的正弦信号的流程图。

                 13 产生一个特定频率正弦波的流程图

DTMF信号是有两个特定频率的正弦波叠加而成的,图14是产生DTMF信号的流程图。

14   产生DTMF信号的流程图

3.4  单片机与D/A接口程序设计

通过CLR指令使P3.6口发低电平给,使DAC0832处于直通状态,然后单片机每隔65us发数据给DAC芯片。图15是单片机与DA接口程序设计流程图。

4. 系统有效性验证

4.1  DTMF信号频率误差分析

 用数学的方法求得的数据,包括角度增量δ、数据表中的每一数据和步长N=360fTc/δ,可能包含小数部分。CPU无法表达小数,必须四舍五入,从而产生误差。通过程序产生的Y=C*sin(ωt)C的实际频率计算如下:CPU一个采样周期Tc读一次数据,指针前进一个步长的相位增加α=N*δ=90N/S,角速度ω=α/Tc=90N/ Tc. S ,周期T=360/ω=4Tc S/N,实际频率f=1/ T=N/4Tc S ,从而可计算取整产生的频率误差。取Tc=65usS=144N有表3可知,由此我们可得实际频率如表4

分析表中的数据我们可以知道通过读正弦表产生的DTMF波形的实际频率误差都要小于国际标准最大频差1.5%。图16是本系统发3码这个DTMF信号的波形。图17是标准的发3码这个DTMF信号的波形。图18 产生信号的误差值。我们可以知道系统发的信号的时域图与标准的几乎一致,最大误差也没超过12,因此用这种方法产生的DTMF信号具有很大的实用性。

                 16  Y=63*sin(2*pi*694*t)+63*sin(2*pi*1469*t)+128的波形

 

17  Y=63*sin(2*pi*697*t)+63*sin(2*pi*1477*t)+128的波形

 

                           18 产生信号的误差值

4.2  DTMF信号接收系统的结构

虽然通过示波器我们可以观测信号的波形与频率,但为了能够更好的验证DTMF信号的有效性,可以设计一个常用的DTMF波形的接受电路,然后单片机读取MT8870解出的码,最后由单片机把读到的信号在数码管上显示。这样就可以很清楚知道发码是否准确。在本节下面几个小节中将详细介绍DTMF信号接受系统的硬件和软件设计。

4.2.1    MT8870的介绍

DTMF信号接收器又称为DTMF解码器,它的功能是把DTMF信号变换为二进制数字信号。利用这些数字信号借助逻辑电路进行控制,在程控电话系统中它往往接在交换机中。目前双音多频产品多属于CMOS 集成产品,国际上一些主要器件产品厂商或公司均有代表性的DTMF接收器。如MITEL公司MT8870M8870MH88305MK5091等。这些DTMF产品集成度高、体积小、抗干扰能力强,并且中间传输的是两个音频信号,最后输出的是二进制编码信号,便于与微型计算机接口。
    本系统选取的MT8870MITEL公司生产的DTMF信号接收器。 MT8870的内部集频带分离滤波器与数字解码功能为一体,滤波部分用开关电容技术,分成高频群及低频群滤波器,解码器使用数字计数器技术检测把全部16DTMF音调解码成四位二进制码(见表5,表示电话机键盘上各按键对应的二进制码)。由于它内部有差动放大器、时钟振荡器和锁存三态总线接口,所以减少了该集成电路外部器件的数目。(其内部结构见附录4


     MT8870的引脚见图19


      19  MT8870的引脚

MT8870各引脚功能如下:脚1 IN+)为运算放大器同相输入端;脚2 IN- )为运算放大器反相输入端;脚3 GS)为增益选择,它为内部运算放大器的输出端与前端连接反馈电阻提供通道;脚4VREF)为基准电压输出端,标准值VDD/2用来给内部运放输入端加偏置;脚5和脚6IC)为内部连接端,大多接到VSS。脚7OSC1)和脚(OSC2)分别为时钟输入端及时钟输出端,这两脚之间接一个3.579545MHz的石英晶体组成内部振荡电路。脚9VSS)为负电源输入端,大多数情况该端接公共地。脚10TOE)为三态输出使能输入端,该端为逻辑高时使能Q0-Q3有输出。脚11-14Q0-Q3)为三态数据输出端,当TOE为使能时,提供与最接近接收到的有效音调对相对应的四位二进制码。脚15STD)为延时导引输出端,当一个被收到的音调对已被寄存并且锁存器的输出已被校正时,该端为逻辑高,当STD/GT端电压降到低于VRS时,该端转换为逻辑低。脚1EST)为早期导引输出端,表示有效音调频率的检测。一旦数字算法检测到一个有效的音调对(信号状态),该端就出现高电平,信号状态的任何减小将导致EST转换为逻辑低。脚17STD/GT)为导引输入/保护时间输出。它是一个双向端,STD检测出一个大于VTts的电压,器件寄存所检测到的音调对并校正锁存器输出;STD端检测出一个小于VTts 的电压,器件自由地接收一个新的音调对。GT输出的作用是重复外部导引时间常数。脚18VDD)为正电源输入端,规定VDD 5V

MT8870电路的基本特性是提供DTMF信号分离滤波和译码功能,输出相应的16DTMF频率组合的4位并行二进制码(如表5)。电路输出的二进制码D1D4由数据输出允许端TOE控制。TOE为高电平时,D0-D3输出与当前输入的DTMF信号相对应的二进制码;当TOE为低电平时,D0D3端呈高阻状态。运放和R1R2C1组成一反相放大器,对输入的DTMF信号进行隔离放大,其增益K=R2/R1,改变R2的值可变增益的大小,但增益不宜过大,一般K值取为15,输入的DTMF信号的幅度应在27.5883mV之间。4端为VREF为基准电压输出端,取值VDD/2=2.5V5端和6端(IC端)为内部电路连接点,必须与VSS相连,三脚相连后接公共地;7端与8端外连接3.7595MHz晶体与内含振荡产生基准频率信号;STD15)为控制输入延迟端,EST16)为初始控制输出端,S/GT17)为控制输入/时间监测输出端。
   

4.2.2 DTMF信号接收系统的硬件结构

20DTMF信号接受系统的硬件结构图。输入的DTMF信号经MT8870解调后,在端产生一个控制输出信号,该信号输出端与单片机AT89C51的外部中断输入端相连当该信号发生由10的跳变时,中断标志IE1(中断安排为下降沿触发方式),设置中断标志为1,当AT89C51响应中断后,产生一个RD信号,信号经相反之后使MT8870TOE端产生一个高电平脉冲信号,该信号使MT8870的数据输出端Q0Q3由原来的高阻状态变为与当前输入的双音频信号相对应的二进制编码信号,AT89C51通过P0口将该二进制数读入。单片机根据读入的二进制数,通过P1.7口给数码管发数字显示信号。

                   20  DTMF信号接收系统的硬件结构图

4.2.3   DTMF 接收系统的程序设计

21DTMF 接受系统的程序设计流程图。

21 DTMF 接收系统的程序设计流程图

DTMF信号进入MT8870后,双音频信号被解码并锁存在MT8870的输出端口。AT89C51P1口的低四位把信号读进来,然后进行比较判断。如果是发码信号,那就向P1.7口发送该码的数码管显示信号。74LS1648位串行并出的寄存器,每来一个上升沿脉冲74LS164中的内容就向高位移一位,因此P1.7每发一个二进制数,P1.6就要向74LS164提供一个上升沿脉冲。当八位两进制数发完后,P1口的低四位就继续读码。

5. 结束语

在单片机系统中实现DTMF信号速度快,能够实时处理DTMF信号,且在软件环境下能以较低的成本和改进的算法增加其它功能,提高其性能和灵活性,这比专用DTMF芯片更节省成本,适用方面更宽。

遗憾的是本系统产生的DTMF信号由于频率误差大于1.5%,不能通过MT8870实现解码。

6. 参考文献

[1] 李广弟,朱月秀,王秀山单片机基础北京航天航空大学出版社

[2] 刘洪志AVR单片机实现DTMF信号世界电子元器件2004年第七期  

[3] 胡嗣云DTMF 电路HT9200A 与单片机的接口国外电子元器件2000年第11

[4] 李传南 王剑刚 李宝华单片机与DTM F信号收发芯片M T8880的直接接口设计电子与自动化1999年第2
[5] 杨富征单片机软件产生DTMF信号电子世2004年第11

[6] 朱兆优.  DTMF收发器与单片机的接口设计陕西工学院学报. 2004年第9

[7] 陈彬. 利用8031单片机来产生DTMF信号.电子技术.1995年第6

[8] 胡汉才.单片机原理及其接口技术.清华大学出版社.1995

[9] 陈大钦.电子技术基础实验. 高等教育出版社

[10]梁红 梁洁 陈跃斌 .信号与系统分析及MATLAB实现.电子工业出版社

7.致谢语

经过这次毕业设计,我觉得自己学到了不少东西。学会了如何去熟悉PCB板上的电子线路图,MT8870芯片使用,用单片机产生任何频率的正弦波等,还了解与我同一组的同学做的课题的思路,这对我今后的工作将会有很大的帮助。最后,由衷地感XX老师在毕业设计期间对我的精心指导。

8. 附录

附录1AT89C51的引脚图。

附录2: AT89C51加密等级设置。  

附录3:系统软件程序。

org 0000H

LJMP START

ORG 0050H

START:

     MOV P1,#0FFH

     LCALL DELAY10

AA1:     

     JNB P1.0,PK1

AA2:

     JNB P1.1,PK3

AA3:  

     JNB P1.2,PK5

AA4:

     JNB P1.3,PK7

     AJMP AA1    ;以上程序是用来判断是否有键被按下。P1.0是发1码,P1.1是发3码,P1.2是发5码,P1.3是周期产生前一次发码.

PK7:

     LCALL DELAY10; PK7是用来去抖动.

     JNB P1.3,PK8

     AJMP START

PK8:

     JB P2.0,GCC1 ;   实现P1.3的功能

     JB P2.1,GCC2

     JB P2.2,GCC3

     GCC1:LCALL F11

     AJMP GCC1

     GCC2:LCALL F13

     AJMP GCC2

     GCC3:LCALL F15

     AJMP GCC3

PK1: LCALL DELAY10

JNB P1.0,PK2

AJMP AA2;去抖动.

PK2:LCALL F11;发1码

MOV P2,#00H

SETB P2.0

TBZ1:JNB P1.0,TBZ1;等待键释放.

AJMP START

PK3:LCALL DELAY10

JNB P1.1,PK4

AJMP AA3

PK4:LCALL F13

MOV P2,#00H

SETB P2.1

TBZ2:JNB P1.1,TBZ2;等待键释放

AJMP START

PK5:LCALL DELAY10

JNB P1.2,PK6

ACALL AA4

PK6:LCALL F15

MOV P2,#00H

SETB P2.2

TBZ3:JNB P1.2,TBZ3

ACALL START

F11:MOV R4,#1AH ;发1码 697 1209;

    MOV R6,#2DH

    MOV 70H,#46H

    MOV R7,#25H

    ACALL CHCS

    RET   

F13:MOV R4,#1AH ;发3码697 1477;

    MOV R6,#3CH

    MOV 70H,#46H

    MOV R7,#25H

    ACALL CHCS

    RET

F15:MOV R4,#20H ;发9码852, 1477;

    MOV R6,#37H

    MOV 70H,#42H

    MOV R7,#28H;***********

    ACALL CHCS

    RET

CHCS:  mov R2,#00H   ;1us  R2地址指针

CLR P3.6

mov R1,#30H

KM0:    mov A,#00H  ; 1us          读第一象限的正弦值

mov DPTR,#ZS;  2us

mov A,R2 ;1us

MOVC A,@A+DPTR;2us

ADD A,#3FH;  1us

MOV @R1,A

INC R1;  把低频端读出的数给寄存器.

MOV A,R4;1us

ADD A,R2;1us

MOV R2,A;1us

CLR C    ;1us

CJNE R2,#90H,KM1 ;2us判断是否大于表格的长度144;

KM1:    JC SH1;2us   如果没有超出就延时50us,再继续读;如果超出就倒读;

MOV A,R2 ;1us

SUBB A,#90H;1us

MOV 29H,A;1us

MOV A,#90H;1us

SUBB A,29H;1us

MOV R2,A;1us

ACALL SH2 ;2us   延时50us

  

KM2:    MOV A,#00H;1us 读第二象限的数

MOV DPTR,#ZS;2us

MOV A,R2;1us

MOVC A,@A+DPTR;2us

CLR C;1us

ADD A,#3FH;1us

MOV @R1,A

INC R1

MOV A,R2;1us

MOV 29H,R2;2us

SUBB A,R4;1us

MOV R2,A;1us *********

        JNC SH3;2us判断是否低于00h;不低于的话就延时50us,再继续读。

CLR C;1us

MOV A,R4;1us

SUBB A,29H;1us

MOV R2,A;1us*******

        ACALL SH4;2us 延时50us

KM3:    MOV A,#00H ;1us读第三象限的数

        MOV DPTR,#ZS;2us

        MOV A,R2;1us

        MOVC A,@A+DPTR;2us

        CLR C;1us

        MOV 29H,A;1us

        MOV A,#3FH;1us

        SUBB A,29H;1us*****************

        MOV @R1,A

        INC R1

        MOV A,R2;1us

        ADD A,R4;1us

        MOV R2,A;1us

        CLR C;1us

        CJNe R2,#90H,KM4;2us

       

KM4:    JC SH5    ;2us 判断是否大于表格的长度144,不大于的话延时50us读数。

        CLR C;1us

        MOV A,R2;1us

        SUBB A,#90H;1us

        MOV 29H,A;1us

        MOV A,#90H;1us

        SUBB A,29H;1us

        MOV R2,A;1us

        ACALL SH6    ;2us   延时50us读数

        

KM5:    MOV A,#00H     ;1us   读第4象限的数;

        MOV DPTR,#ZS;2us

        MOV A,R2;1us

        MOVC A,@A+DPTR;2us

        CLR C;1us

        MOV 29H,A;1us

        MOV A,#3FH;1us

        SUBB A,29H;1us

        MOV @R1,A

INC R1

        MOV A,R2;1us

        MOV 29H,R2;2us

        clr c;2us

        SUBB A,R4;1us

        MOV R2,A

        JNC SH7;2us

        CLR c ;1us

        SJMP CL

 SH1:  Lcall DELAY

 

       LJMP KM0

 SH2:  Lcall DELAY

       RET

 SH3:  LCALL DELAY    

       LJMP KM2

 SH4:  LCALL DELAY

       RET

 SH5:  LCALL DELAY

       LJMP KM3

 SH6:  LCALL DELAY

       RET

 SH7:  LCALL DELAY    

       LJMP KM5

         

 SG1:  Lcall DELAY

 

       LJMP KG0  

 CL0:LJMP CL           

cl:     MOV R1,#00H

        MOV R0,#30H

    

KG0:    mov A,#00H  ; 1us          读第一象限的正弦值

mov DPTR,#ZS;  2us

mov A,R1 ;1us

MOVC A,@A+DPTR;2us

ADD A,#3FH;  1us

ADD A,@R0

INC R0

MOV P0,A

CLR C

        MOV A,R0

CJNe A,70H,XH0;判断是否超出低频端的储存数的范围.

XH0:    JNC CL0

CLR C

MOV A,R6;1us

ADD A,R1;1us;R1 是读高频端的指针.

MOV R1,A;1us

CJNE R1,#90H,KG1 ;2us判断是否大于表格的长度144;

KG1:    JC SG1; 2us   如果没有超出就延时50us,再继续读;如果超出就倒读;

        clr c

        MOV A,R1 ;1us

        SUBB A,#90H;1us

        MOV 29H,A;1us

MOV A,#90H;1us

SUBB A,29H;1us

MOV R1,A;1us

ACALL SG2 ;2us   延时50us

  

KG2:    MOV A,#00H;1us 读第二象限的数

MOV DPTR,#ZS;2us

MOV A,R1;1us

MOVC A,@A+DPTR;2us

CLR C;1us

, ADD A,#3FH;1us

ADD A,@R0

INC R0

MOV P0,A

CLR C

        MOV A,R0

CJNE A,70H,XH1

XH1:    JNC CL0

CLR C

MOV A,R1;1us

MOV 29H,R1;2us

SUBB A,R6;1us

MOV R1,A;1us *********

JNC SG3;2us判断是否低于00h;不低于的话就延时50us,再继续读。

CLR C;1us

MOV A,R6;1us

SUBB A,29H;1us

MOV R1,A;1us*******

        ACALL SG4;2us 延时50us

KG3:   MOV A,#00H ;1us读第三象限的数

       MOV DPTR,#ZS;2us

       MOV A,R1;1us

       MOVC A,@A+DPTR;2us

       CLR C;1us

       MOV 29H,A;1us

       MOV A,#3FH;1us

       SUBB A,29H;1us*****************

       ADD A,@R0

       INC R0

       MOV P0,A

       CLR C

       MOV A,R0

       CJNE A,70H,XH2

XH2:   JNC CL1

       CLR C

       MOV A,R1;1us

       ADD A,R6;1us

       MOV R1,A;1us

       CLR C;1us

       CJNe R1,#90H,KG4;2us

       

KG4:   JC SG5    ;2us 判断是否大于表格的长度144,不大于的话延时50us读数。

       CLR C;1us

       MOV A,R1;1us

       SUBB A,#90H;1us

       MOV 29H,A;1us

       MOV A,#90H;1us

       SUBB A,29H;1us

       MOV R1,A;1us

       ACALL SG6    ;2us   延时50us读数

        

KG5:   MOV A,#00H     ;1us   读第4象限的数;

       MOV DPTR,#ZS;2us

       MOV A,R1;1us

       MOVC A,@A+DPTR;2us

       CLR C;1us

       MOV 29H,A;1us

       MOV A,#3FH;1us

       SUBB A,29H;1us

       ADD A,@R0

       INC R0

       MOV P0,A

       MOV 69H,A

       CLR C

       MOV A,R0

       CJNE A,70H,XH3

XH3:   JNC CL1

       CLR C

       MOV A,R1;1us

       MOV 29H,R1;2us

       clr c;2us

       SUBB A,R6;1us

       MOV R1,A

       JNC SG7;2us

       CLR c ;1us

       MOV A,R6;1us

       SUBB A,29H ; 1us 29h里是r2的值;

       mov R1,A ;1us

       ACALL DELAY8  ;1us延时30us

       DJNZ R7,CLLL

       MOV R3,#06H;产生静音。

       MOV R7, #7FH

LOOP10:MOV A,69H

       MOV P1,A

       LCALL DELAY8

       MOV P1,A

       LCALL DELAY8

       DJNZ R7,LOOP10

       DJNZ R3,LOOP10

       RET

SG3:  LCALL DELAY    

       LJMP KG2

CLLL:LJMP KG0       

CL1:LJMP CL  

SG2:  Lcall DELAY

       RET

SG4:  LCALL DELAY

       RET

SG5:  LCALL DELAY

       LJMP KG3

SG6:  LCALL DELAY

       RET

SG7:  LCALL DELAY    

       LJMP KG5

DELAY: MOV R5,#09H

    LOOP1:  NOP

           NOP

           NOP                    

           DJNZ R5,LOOP1

           RET  

DELAY8: MOV R5,#06H;延时30us

  LOOP:NOP

         NOP

         NOP

         DJNZ R5,LOOP

          RET  

DELAY10:

       MOV R7,#0AH

DL:    MOV R6,#0FFH

DL6:   DJNZ R6,DL6

       DJNZ R7,DL

       RET

ZS:

DB 0,1,1,2,3,3,4,5,5,6,7,8,8,9,10,10,11,12,12,13,14,14,15,16,16,17,18,18,19,20,20,21,22,22,23,23,24,25,25, 26, 27, 27,28, 28,29, 30, 30,31, 32, 32, 33,33, 34, 35,35, 36,  36, 37,37,38,38,  39, 39, 40, 40, 41 ,  42,   42 ,  43  , 43  , 44  ,44,45,   45,   46,   46 ,  46,   47,   47,   48, 48,49,  49,  50,   50,   50,   51,   51,   52,   52, 53,  53,  53 ,54  , 54 ,  54, 55, 55  , 55,  56,  56, 57, 57, 57,57, 57, 58, 58,58 , 58, 59, 59,59,   59, 60, 60,60,60, 60 ,  61, 61,  61, 61, 61,  62, 62,62,62,62 ,62, 62, 62 ,62, 63,63, 63,63,63 ,63,63,63,63, 63, 63

  

 END

附录4:接收系统的程序

ORG     0000H

 LJMP    START

 ;ORG     0013H

 ;ljmp    start1

ORG     0040H

 START:

; MOV IE,#84H

 ;MOV TCON,#04H

  START1:

 MOV A,P1

 ANL A,#0FH

 CJNE A,#01H,F22

  FF1:

    CLR C

    MOV A,#0F9H

    MOV R0,#08H

FFF1:

    RRC A

    MOV P1.7,C

    CLR P1.6

    SETB P1.6

    DJNZ R0,FFF1

    LCALL DELAY10

ret

 F22:CJNE A,#02H,F33

 FF2:

    CLR C

    MOV A,#0A4H

    MOV R0,#08H

FFF2:

    RRC A

    MOV P1.7,C

    CLR P1.6

    SETB P1.6

    DJNZ R0,FFF2

    LCALL DELAY10

    ret

  

F33: CJNE A,#03H,F44

FF3:

    CLR C

    MOV A,#0B0H

    MOV R0,#08H

 FFF3:

    RRC A

    MOV P1.7,C

    CLR P1.6

    SETB P1.6

    DJNZ R0,FFF3

LCALL DELAY10

reti

F44: CJNE A,#04H,F55

FF4:

    CLR C

    MOV A,#99H

    MOV R0,#08H

 FFF4:

    RRC A

    MOV P1.7,C

    CLR P1.6

    SETB P1.6

    DJNZ R0,FFF4

LCALL DELAY10

  RET

F55: CJNE A,#05H,F66

FF5:

    CLR C

    MOV A,#92H

    MOV R0,#08H

 FFF5:

    RRC A

    MOV P1.7,C

    CLR P1.6

    SETB P1.6

    DJNZ R0,FFF5

LCALL DELAY10

RET

F66: CJNE A,#06H,F77

 

FF6:

    CLR C

    MOV A,#82H

    MOV R0,#08H

 FFF6:

    RRC A

    MOV P1.7,C

    CLR P1.6

    SETB P1.6

    DJNZ R0,FFF6

LCALL DELAY10

RET

F77: CJNE A,#07H,F88

FF7:

    CLR C

    MOV A,#0F8H

    MOV R0,#08H

FFF7:

    RRC A

    MOV P1.7,C

    CLR P1.6

    SETB P1.6

    DJNZ R0,FFF7

LCALL DELAY10

RET

F88: CJNE A,#07H,F99

FF8:

    CLR C

    MOV A,#80H

    MOV R0,#08H

FFF8:

    RRC A

    MOV P1.7,C

    CLR P1.6

    SETB P1.6

    DJNZ R0,FFF8

LCALL DELAY10

RET

F99: CJNE A,#07H,F10

FF9:

    CLR C

    MOV A,#90H

    MOV R0,#08H

FFF9:

    RRC A

    MOV P1.7,C

    CLR P1.6

    SETB P1.6

    DJNZ R0,FFF9

    LCALL DELAY10

    RET

F10:

LCALL DELAY10

RET   

DELAY10:

MOV R7,#0AH

DL:

MOV R6,#0FFH

DL6:

 DJNZ R6,DL6

 DJNZ R7,DL

 RET

END

关于研友  |  诚聘英才  |  联系我们  |  友情链接
版权所有:@2007-2013 中山研友工作室 ZZSS8.COM 电话:0760-86388801 QQ:51643725
地址:广东中山市学院路1号 邮编:528402 皖ICP备12010335号-3
  • 物理类核心期刊投稿邮箱网址
  • 研究成果的运用研究的认识与体会
  • 电动持续负压吸引治疗足部慢性溃疡护理
  • 基于SPOC平台的问题牵引式教学法在
  • 医学期刊投稿邮箱收集(有效大全最新)
  • 腰硬联合麻醉用羟乙基淀粉扩容与用复方
  • 医学期刊投稿邮箱收集
  • 睾丸鞘膜切除翻转术中缓慢放出睾丸鞘膜