1、 摘要本课题主要利用STC89C52单片机和MT8880构成双音多频信号(DTMF)发生器和接收器,有助于了解通信MT8880在通信系统中的应用。发生器是由矩阵键盘输入0F并在数码管上面显示,从而发射对应的DTMF信号。接收器是利用STC89C52和MT8870构成DTMF接收器,并把解码信号显示在数码管上。经过实验,发送器的数码管上显示的数字和接收器接收到的数字一致,满足课题要求。关键词:STC89C52、MT8880、MT8870、DTMF 目录前言-1第一章 系统设计要求-21.1设计要求-21.2系统原理框图-2第二章 系统的组成及工作原理-32.1系统组成-32.2 DTMF信号介绍
2、-3 2.2.1 DTMF信号的特性-32.3系统工作原理-4第三章 电路方案设计-=-53.1系统总方案比较-53.2主控芯片的选择-6 3.3显示模块的选择-63.4解码芯片选择-6第四章 单元电路设计与程序设计-7 4.1 矩阵键盘电路设计与分析-7 4.1.1 原理分析-74.2 单片机最小系统电路- -74.2.1 原理分析-84.3 DTMF信号发送电路-94.3.1工作原理分析-94.4数码管显示电路-94.4.1 工作原理-104.5 基于MT8880的DTMF接收电路-104.5.1 工作原理分析-114.5.2 参数计算-114.6 基于MT8870的DTMF信号的接收电路
3、-124.6.1 工作原理分析-124.6.2 参数计算-12第五章 程序设计流程图-135.1主机主程序流程图-135.2 基于MT8880的从机程序流程图-135.2.1 从机主程序流程图-135.2.2 中断流程图-145.3 基于MT8870的从机程序流程图-145.3.1 从机主程序流程图-145.3.2 中断流程图-155.4 分析对比-15第六章 实验调试与测试结果分析-166.1 使用的主要仪器和仪表-166.2 调试电路的方法和技巧-166.3 测试波形分析-176.4 调试中出现的故障、原因及排除方法-17第七章 结论-19参考文献-20附录一 DTMF信号发射端电路-21
4、附录二 基于MT8870的DTMF信号接收电路-22附录三 基于MT8880的DTMF信号接收电路-23附录四 元器件清单-24附录五 DTMF信号发射程序-25附录六 基于MT8880的DTMF信号接收程序-32附录七 基于MT8870的DTMF信号接收程序-33附录八 实物电路图-34前言DTMF(Dual Tone Multi Frequency)信号是音频电话的拨号信号,由高频群和低频群组成,高低频群各包含4个频率。一个高频信号和一个低频信号叠加组成一个组合信号,代表一个数字。DTMF信号有16个编码。利用DTMF信令可选择呼叫相应的对讲机。DTMF是由美国AT&T贝尔实验室研制,双音
5、多频信号编码技术易于识别,抗干扰能力强,发号速度快,且比用modem进行远程传输的方法更为经济实用,因此这种拨号方法取代了传统的脉冲拨号。DTMF具有的传递速度,使得它不仅广泛应用于电话系统的语音通信中,而且在通信网中应用也极为普遍。一些系统中常常需要同时接收和发送DTMF信号,发送和接收均伴随着编码和解码过程,在现实中具有重要意义。 本课题研究DTMF信号的方法是由MT8880芯片产生,由矩阵键盘输入0F,然后在数码管上面显示所输入的数字。然后通过MT8880的8管脚输出DTMF信号,输入接收器,通过MT8870解码并通过数码管显示。第一章 系统设计要求1.1设计要求1.利用双音频信号实现单
6、片机之间的双向通信 2通信数据通过显示器显示。 1.2 系统原理框图系统原理图如图1.1所示:单片机2MT8880 单片机1MT8870 图1.1 系统原理框图以单片机STC89C52为核心,运用MT8880芯片组成的双音频信号(DTMF)编码发送电路和MT8870的解码接收电路,来实现信号的传输。 第二章 系统的组成及工作原理2.1 系统组成 本系统主要由矩阵键盘、单片机控制电路、DTMF收发电路、显示电路四部分组成。其具体系统原理图如图2.1所示:单片机MT8880MT8880单片机矩阵键盘模块显示模块显示模块DTMF信号发送 图2.1 系统原理图 2.2 DTMF信号介绍 2.2.1 D
7、TMF信号的特性 DTMF是由组(fb)和高频组(fa)两组频率信号构成,每个数字信号由低频组和高频组的任意一个叠加而成。根据CCITT的建议,DTMF的编译码定义如表1所示: 表1 电话拨号数字对应的高低频率组 可用下式表示: f(t)Aasin(2*fa*t)+Absin(2*fb*t) 式中两项分别表示低、高音群的值,Ab和Aa分别表示低音群和高音群的样值量化基线,而且两者幅值比为K=Ab /Aa (0.7K0.9)。同时规定,对应于表1中的标称频率在发送时,DTMF信号的频率偏差不应当超过1.5,每位数字的信号极限时长应该大于40ms,而接收设备对2的偏差应能可靠地接收,对30ms40
8、ms时长的信号可以正常地接收。与单音编码不同,DTMF 信号是采用8 中取2 的方式,从高低两个音组中各取一个音频复合而成来代表0 - 9 十个号码和其他功能码,再加上这8 个音频信号的各频率间不存在谐波关系,大大减少了虚假信号的干扰,因而DTMF 信号工作可靠性特别是抗干扰能力很强。 2.3 系统工作原理 在发送DTMF信号时,首先由矩阵键盘输入数据,通过单片机的IO口输入单片机,经过判断是哪个按键被按下,从而发送对应的二进制码数据并显示。被发送的二进制码数据通过单片机的IO口的低四位传送到MT8880的数据总线D0D3上,二进制码经数据总线缓冲器(DBB)送到发送数据寄存器,控制可编程行、
9、列计数器,D/A变换器合成DTMF信号,在音频突发门控电路(TBGC)和控制逻辑(CL2)的控制下从8脚(TONE OUT)发送出去。在接收DTMF信号时,来自运放输入端的DTMF吸纳后经拨号音抑制器(DTF)、高频组和低频组分离带通滤波器(HGF、LGF)送到数字算法鉴频和编码变换器(DACC)进行确认译成相应的4比特二进制码,存入接收数据寄存器,需要时输出至数据总线,经单片机译码并显示。 第三章 电路方案设计3.1系统总方案比较方案一:此方案主要由发送和接收两部分组成,其中发送部分主要由单片机和MT8880构成,先从矩阵键盘输入0F,然后从MT8880输出对应的双音多频信号,然后多音频信号
10、(DTMF)输入接收端的MT8880进行解码,解出来的二进制码经过单片机读取,输出到对应的IO口并进行显示。其工作原理图如图3.1所示:单片机MT8880MT8880单片机矩阵键盘模块显示模块显示模块DTMF信号发送 图3.1 DTMF发送和接收原理图方案二:此方案的DTMF信号发送部分和方案一一致,接收部分主要是由MT8870实现。DTMF信号输入接收端的MT8870进行解码,解出的二进制码输送到单片机并进行译码显示。其工作原理图如图3.2所示:显示模块矩阵键盘模块单片机MT8880MT8870单片机显示模块DTMF信号发送 图3.2 DTMF发送和接收原理图 经过理论分析,以上两种方案都满
11、足要求。其中MT8880是收发一体的集成芯片,接收和发送时,需要用单片机进行状态设置。而MT8870是专门的DTMF信号接收电路,无需进行设置,相对来说MT8870硬件电路和单片机编程更简单一些。为了更好的达到实验效果,现对两种方案进行实验。3.2 主控芯片的选择 方案一:AT89C2501是美国Atmel公司生产的低电压、高性能CMOS 8位单片机,8K字节程序存储空间,256字节数据存储空间,没有内带EEPROM存储空间,AT系列单片机下载的时候,需要有专门的下载器驱动,比较麻烦。 方案二:STC89C52RC是STC公司生产的一种低功耗、高性能CMOS 8位微控制器,8K字节程序存储空间
12、,512字节数据存储空间,内带2K字节EEPROM存储空间,具有8K在线flash存储器。STC系列下载的时候直接用串口下载就可以,比较方便而且价格更便宜。对于本次课题STC89C52可以很好的满足实验要求。 综上所述:我们采用方案二3.3显示模块的选择 方案一:采用八段共阴数码管显示。数码管成本较低,而且操作简单,只需正确编码,在程序中调用即可,不用设置状态字和写控制时序。由于本次课题只需要显示0F,每次只显示一个数值,数码管已经可以满足 。 方案二:采用LCD1602显示。LCD1602可以显示多个字符,增加显示信息的可读性,能显示更多的信息量。但是,显示时需要设置状态字和写控制时序,占用
13、单片机的存储空间,而且其价格相对数码管贵的多。综上所述:我们选择方案一。3.4 解码芯片选择 方案一:MT8880是Mitel公司生产的CMOS大规模集成电路,功耗低,并且将发送和接收电路集中在一个芯片内,集成度很高。可编程控制,容易与微机接口。具有多种工作方式,功能性很强。 方案二:MT8870是Mitel公司生产的应用较普遍的双音多频信号接收芯片,可用于有线通信网和无线移动通信网的终端设备。 鉴于二者都有可用性,我们决定对两种方案进行分别验证,从中择优。 第四章 单元电路设计与程序设计 4.1 矩阵键盘电路设计与分析 图4.1 矩阵键盘电路原理图4.1.1 原理分析 检测时,先送一行为低电
14、平,其余几行全为高电平(此时我们确定了行数),然后立即轮流检测一次各列是否有低电平,若检测到某一列为低电平(这时我们又确定了列数),则我们便可确认当前被按下的键是哪一行哪一列,用同样的方法轮流送各行一次低电平,再轮流检测一次各列是否变为低电平,这样即可检测完所有的按键,当有按键被按下时便可判断出按下的键是哪一个键。从而每按下一个按键就对应0F中的一个数,确保音频信号全部能够发送出去。4.2 单片机最小系统电路 图4.2 单片机最小系统原理图4.2.1 原理分析 单片机最小系统电路包括一个起振电路和一个复位电路。单片机系统里都有晶振,其作用非常大,直接关系到单片机是否能够正常工作。单片机晶振的作
15、用是为系统提供基本的时钟信号,它结合单片机内部电路产生单片机所需的时钟频率,STC89C51使用11.0592MHz的晶体振荡器作为振荡源,由于单片机内部带有振荡电路,所以外部只要连接一个晶振和两个电容即可,电容容量一般在15pF至50pF之间。 单片机的复位电路的工作原理是:通电时,电容两端相当于是短路,于是RST引脚上为高电平,然后电源通过电阻对电容充电,RST端电压慢慢下降,降到一定程度,即为低电平,单片机开始正常工作。单片机的复位分为上电复位和手动复位。上电复位:上电瞬间,电容充电电流最大,电容相当于短路,RST端为高电平,自动复位;电容两端的电压达到电源电压时,电容充电电流为零,电容
16、相当于开路,RST端为低电平,程序正常运行。手动复位:首先经过上电复位,当按下按键时,RST直接与VCC相连,为高电平形成复位,同时电解电容被短路放电;按键松开时,VCC对电容充电,充电电流在电阻上,RST依然为高电平,仍然是复位,充电完成后,电容相当于开路,RST为低电平,正常工作。在实际电路中,为防止程序跑飞,一般需要加上手动复位电路。4.3 DTMF信号发送电路图4.3 DTMF信号发送电路4.3.1 工作原理分析在发送电路中,只用到了MT8880的部分管脚,其管脚功能见附录此电路的工作与单片机的控制联系紧密。主要是通过单片机对R/W和RS0两个管脚的控制,实现数据的传输和信号的发送。首
17、先对R/W和RS0设置为01,即对CRA和CRB进行初始化,CRA=1001,CRB=0001。然后,发送数据的时候,设置 R/W和RS0为00,通过把发送的数据送到P2口,此时数据被写入发送数据寄存器里,经过MT8880内部处理,从8脚输出DTMF信号。4.4数码管显示电路 图4.4 数码管显示电路4.4.1 工作原理 本电路采用的是8位共阴数码管。虽然单片机内部驱动电流比较小,带负载能力比较弱,但是,本课题采用的是一位共阴数码管,令单片机的IO直接接到数码管上面,可以直接驱动。亮度虽然不是很强,但是满足实验要求。本着简化电路的原则,采用此驱动方式。把对应的数码管编码送到P1口,即可显示出所
18、需的数字。4.5 基于MT8880的DTMF接收电路 其接收电路原理图如图4.5所示: 图4.5 DTMF信号接收电路4.5.1 工作原理分析在接收电路中,用到了MT8880的大部分管脚,其管脚功能见附录。DTMF信号采用单端输入的方式,经过反向放大,进入MT8880。MT880设置为中断工作模式,当MT8880接收到有用的DTMF信号时,13脚(IRQ)变为低电平,触发单片机的外部中断。在中断函数中,将D0D3上的二进制码用数码管显示出来。4.5.2 参数计算DTMF信号通过MT8880的2管脚输入,为了防止信号干扰这里将信号进行放大。单端输入的放大倍数为:Av=R3/R4=100/10=1
19、0这里为了防止信号衰减,采取放大10倍。18,19管脚之间连接有RC电路,是控制音频信号的的输入。当检测到一有效的DTMF信号时,Est(18脚)由低电平变为高电平;当DTMF信号消失,Est返回到低电平。由于有RC电路的存在,所以当Est(18脚)的电平由低变高时,St/GT(19脚)的电平不能突然升高,其放电时间常数为:t=RC=300k*0.1Uf=30ms当St/GT电压高于门限电压VTSt时,电路把检测到的DTMF信号译码后,更新接收数据寄存器的内容,同时,控制逻辑吧片内状态寄存器SR中的b3位置1。若St/GT电压还没有升到门限电压VTSt时,DTMF信号就消失,那么芯片就不能接收
20、这一信号了。换句话来说,对于持续时间大于30ms的DTMF信号可以正确接收,对于持续时间小于30ms的DTMF信号不能正确接收。4.6 基于MT8870的DTMF信号的接收电路 其接收原理图如图4.6所示: 图4.6 DTMF信号接收原理图4.6.1 工作原理分析 在接收电路中,用到了MT8870的大部分管脚,其管脚功能见附录。DTMF信号通过0.1uF电容及100K电阻耦合到芯片的2脚,它是芯片内部运算放大器的反向输入端,3脚是内部运算放大器的输出端,输入/输出之间接一个100K的比例放大电阻。15脚是DTMF信号检测输出端,当MT8870检测到有效的DTMF信号,该脚为高电平,当信号消失时
21、,该脚为低电平。所以,可以利用这一信号的变化来决定读取数据总线的时刻,令MT8870的15脚通过74S04(非门)连接到单片机的P3.2口。当检测到有用信号时,15脚由低电平变为高电平,经反相器后变为下降沿触发单片机的外部中断0,在中断函数中将MT8870数据总线上面的数据送到数码管显示。4.6.2 参数计算由R3,R4,C3组成的一反向放大器,对输入的DTMF信号进行隔离放大,其增益K=-R3/R4,K值一般取15。由于本次实验传输距离比较近,所以K值取1即可。双音到达检测时间Tdp约为515ms,双音持续时间tREC应在2040ms。第五章 程序设计流程图5.1主机主程序流程图MT8880
22、控制寄存器初始化MT8880工作方式初始化从矩阵键盘输入数值判断键盘是否按下?Y单片机接收数据并数码管显示把数据赋予P2,向MT8880传输数据N开始 图5.1 主机主程序流程图5.2 基于MT8880的从机程序流程图5.2.1 从机主程序流程图 MT8880控制寄存器初始化MT8880工作方式初始化及开中断0等待中断信号产生开始图5.2.1 基于MT8880的从机程序流程图5.2.2 中断流程图中断进入读取MT8880状态寄存器读取MT8880接收数据寄存器保存数值,并进行数码管显示中断返回5.3 基于MT8870的从机程序流程图5.3.1 从机主程序流程图开始中断初始化等待中断信号产生5.
23、3.2 中断流程图开始保存数据,并进行数码管显示中断返回5.4 分析对比 由以上基于MT8880和MT8870的从机流程图可知:为保证MT8880正常工作,需要设置功能寄存器,而MT8870则不需要。就编程而言,用MT8870可以减少编程的负担。第六章 实验调试与测试结果分析6.1 使用的主要仪器和仪表模拟示波器一台、万用表、稳压电源一台6.2 调试电路的方法和技巧 本课题电路由矩阵键盘、单片机控制电路、DTMF收发电路、显示电路四部分组成。而且DTMF信号可能由于外界干扰,容易造成实验结果不正确,所以正确调试电路的方法很重要。 测试电路时,要进行分模块测试,然后再进行级联调试。具体方法如下:
24、 首先,按照MT8880的发射电路进行正确焊接。焊接完毕后,先尝试着对单片机编程发射一个编码的程序。调试时,用模拟示波器观察MT8880的8管脚输出的波形,直到出现图6.1所示波形: 图6.1 DTMF信号波形然后,加上矩阵键盘,再次对单片机编程。通过按矩阵键盘,每次输入不同的数值,观察MT8880的8管脚输出的波形是否会发生变化,如果有变化,就证明矩阵模块和单片机系统运行正常。最后,按照MT8880或者MT8870的接收电路进行正常焊接。焊接完毕,把DTMF信号输出端接在接收电路的接收端。然后按矩阵键盘发射DTMF信号,直到接收电路的数码管所显示的数字和发射电路的数码管所显示的数字相同。6.
25、3 测试波形分析经过实验调试,测试得到的波形如下: 图6.2 DTMF型号实际波形 分析:因为DTMF信号是双音多频信号,是两个音频信号的叠加,一个高音频信号和低音频信号。实际波形与理论波形基本吻合,达到实验要求6.4 调试中出现的故障、原因及排除方法 故障1:44矩阵键盘的第一行没有用,只能按出并显示4F,03不能正常显示。 原因:可能由于连接矩阵键盘和单片机的杜邦线松动造成的。 排除方法:将矩阵键盘和单片机接口进行加固。经过实验,达到预期效果,能够正常显示0F。 故障2:DTMF信号发射端不能正常发射双音多频信号,经示波器测试,是一个正弦波形。 原因:可能由于单片机对MT8880的12脚(
26、CP)控制采用的是模拟时序。经搜集资料,查证部分MT8880不能采用IO口产生的CP信号进行正常工作。 排除方法:MT8880的CP由自身晶振经30pf电容提供,CS片选直接接地,选通MT8880。经过实验,达到预期实验效果,能够正常发射DTMF信号。 故障3:DTMF信号的接收端不能正常解码并显示出b,并且解调出来的0会出现抖动,不稳定。 原因:可能由于接收端采用的是MT8880,它是集接收和发送于一体的信号,部分MT8880可能不能解调出某些音频信号。 排除方法:把接收端换成MT8870,因为MT8870是专门接收DTMF信号的,所以它抗干扰能力强一些,更具有针对性。经过实验,达到预期效果
27、,能够正常显示0F,且不会出现抖动。第七章 结论 本次课题设计的是基于双音频编码信号的传输系统发送和接收端设计,其中用到了单片机编程以及电路的各种知识,还用到了protel99se画图软件,使自己的综合能力有了进一步提升。 通过本次课程设计使我明白了仿真只能代表理论可行,书本上的东西不一定都是对的,一定要亲自去验证、调试。否则,永远只能停留在理论阶段。比如说本次电路设计,我们查找了各种资料,其中讲的中心思想大体相同。但是,实现方法不一样。刚开始,我们的DTMF发射端采用的是单片机对MT8880的9、10、11、12管脚进行软件控制,即进行模拟时序。经过三天的调试,没有出现DTMF信号,一直是正
28、弦波信号。最后,对电路进行改进,对MT8880的时序采用硬件控制,又调试一天,DTMF信号发射正常。我们的接收端同样是出现误码的问题,同样经过电路改进,达到了预期的效果。 因此,对于具有实践性的东西,一定要亲自去做。整天抱着一大堆理论而不去尝试的人是做不出来东西的。当然,也一定要认真去做,只有端正自己的态度,认真调试,你就会发现其中的乐趣。参考文献1.张迎新. 单片微型机原理、应用与实验.北京:国防工业出版社,20041 李广弟,朱月秀,王秀山单片机基础北京航天航空大学出版社2 刘洪志用AVR单片机实现DTMF信号世界电子元器件2004年第七期 3 胡嗣云DTMF 电路HT9200A 与单片机
29、的接口国外电子元器件2000年第11期4 李传南王剑刚李宝华单片机与DTM F信号收发芯片M T8880的直接接口设计电子与自动化1999年第2期5 杨富征单片机软件产生DTMF信号电子世界2004年第11期6 朱兆优. DTMF收发器与单片机的接口设计陕西工学院学报. 2004年第9期7 陈彬. 利用8031单片机来产生DTMF信号.电子技术.1995年第6期8 胡汉才.单片机原理及其接口技术.清华大学出版社.19959 陈大钦.电子技术基础实验. 高等教育出版社附录一 DTMF信号发射端电路附录二 基于MT8870的DTMF信号接收电路附录三 基于MT8880的DTMF信号接收电路附录四
30、元器件清单 附录五 DTMF信号发射程序/4*4键盘检测程序,按下键后相应的代码显示在数码管上#include#define uc unsigned char#define ui unsigned intuc i=100;uc j,k,temp,key;uc code table=0xee,0x28,0xcd,0x6d,0x2b,0x67,0xe7,0x2c,0xef,0x6f,0xaf,0xe3,0xc6,0xe9,0xc7,0x87;/*MT8880初始化*/void initialize(void) P2=0x3f; /* 读SR */ P2=0x10; /* CRA=0000 */ P
31、2=0x10; /* CRA=0000 */ P2=0x18; /* CRA=1000 */ P2=0x11; /* CRB=0001 */void tran_init(void) P2=0x19; /* CRA=1001 */ P2=0x11; /* CRB=0001 */*连续发送*/ void transmit(uc key) P2=key; /* 发送数码 */ /delay(6000); /* 延时 */ /P2=0x3f; /* 读SR */*void delay0(ui l) ui i; for (i=0;i0;j-) for(k=125;k0;k-);void display(
32、uc num) P1=tablenum;void matrixkeyscan() P3=0xfe; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10);/消抖 if(temp!=0xf0)/10ms后有键按下 temp=P3; switch(temp) case 0xee:/列1行1 key=0; break; case 0xde:/列2行1 key=1; break; case 0xbe:/列3行1 key=2; break; case 0x7e:/列4行1 key=3; break; while(temp!=0xf0)/等待按键释放 temp
33、=P3; temp=temp&0xf0; display(key); transmit(key);/ P3=0xfd; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=P3; switch(temp) case 0xed: key=4; break; case 0xdd: key=5; break; case 0xbd: key=6; break; case 0x7d: key=7; break; while(temp!=0xf0) temp=P3; temp=temp&0xf0; display(key); transmit(key); P3=0xfb; temp=P3; temp=temp&0xf0; if(temp!=0xf0) delay(10); if(temp!=0xf0) temp=P3; switch(temp) case 0xeb: