计算机与信息工程学院程控交换课程设计题目:专业班级:指导老师:姓名:同组成员:1.硬件电路设计、制作及工艺(20分)2.程序编写、烧录及运行状况(20分)3.自检运行状态(20分)4.系统调试、运行及波形测试(20分)5.设计报告(20分)6.总分:一.DTMF简介在电话机中,有两种拨号方式,即脉冲拨号和双音多频拨号。双音多频拨号方式中的双音多频是指用两个特定的单音频信号的组合来代表数字或功能,两个单音频的频率不同,所代表的数字和功能也不同,在双音多频电话机中有16个按键,其中有10个数字键0~9,6个功能键*、#、A、B、C、D,按照组合的原理,它必须有8种不同的单音频信号,由于采用的频率有8种,故又称之为多频,又因以8种频率中任意抽出2种进行组合,又称其为8中取2的编码方式。随着通讯事业的发展,数字传输的逐渐普及,DTMF信号已经不仅仅局限于终端信令的传输,同时也广泛应用于IP网关、远程控制、局端信令传输,成为传统业务和现代科技应用系统的桥梁。把现代科技的优越性带给世界上最通用、最经济、流动性最强、操作最简单的终端-标准电话机。根据CCITT的建议,国际上采用697Hz、770Hz、852Hz、941Hz、1209Hz、1336Hz、1477Hz和1633Hz,把这8种频率分成两个群,即高频群和低频群,从高频群和低频群中任意各抽出一种频率进行组合,共有16种不同组合,代表16种不同数字或功能,具体如下表所示:二.MT8870简介1)MT8870简介TheMT8870D/MT8870D-1isacompleteDTMFreceiverintegratingboththebandsplitfilteranddigitaldecoderfunctions.Thefiltersectionusesswitchedcapacitortechniquesforhighandlowgroupfilters;thedecoderusesdigitalcountingtechniquestodetectanddecodeall16DTMFtonepairsintoa4-bitcode.Externalcomponentcountisminimizedbyonchipprovisionofadifferentialinputamplifier,clockoscillatorandlatchedthree-statebusinterface.2)MT8870结构框图3).引脚定义及其功能说明4).控制电路(SteeringCircuit)在MT8870完成音频信号译码输出时,将会把StD引脚置高以使MCU读取并存储数据.当MCU完成读取后,MT8870将会准备进行下次音频信号的译码.MT8870是通过St/GT引脚来获知MCU的读取情况.实际应用中,MCU一般不会专门控制St/GT引脚,相应的是通过延时电路来实现的.在StD有效时,在一段时间后St/GT会自动被置为有效电平以使MT8870重新进入工作状态,经典的电路如下所示:5)滤波段Separationofthelow-groupandhighgrouptonesisachievedbyapplyingtheDTMFsignaltotheinputsoftwosixth-orderswitchedcapacitorbandpassfilters,thebandwidthsofwhichcorrespondtothelowandhighgroupfrequencies.Thefiltersectionalsoincorporatesnotchesat350and440Hzforexceptionaldialtonerejection(seeFigure3).Eachfilteroutputisfollowedbyasingleorderswitchedcapacitorfiltersectionwhichsmoothsthesignalspriortolimiting.Limitingisperformedbyhigh-gaincomparatorswhichareprovidedwithhysteresistopreventdetectionofunwantedlow-levelsignals.TheoutputsofthecomparatorsprovidefullraillogicswingsatthefrequenciesoftheincomingDTMFsignals.滤波器频率响应如下图所示:6)译码对照表7)MT8870典型应用下图说明了MT8870的典型应用电路示例.8)典型时序图三.双音多频模块说明1)模块的电原理图如下所示:2)电路工作原理电路主要完成典型DTMF接收器的主要功能:输入信号的高、低频组带通滤波、限幅、频率检测与确认、译码、锁存与缓冲输出及振荡,监测等,具体说就是DTMF信号从芯片的输入端输入,经过输入运放和拨号音抑制滤波器进行滤波后,分两路分别进入高、低频组滤波器以分离检测出高、低频组信号。如果高、低频组信号同时被检测出来,便在EC0输出高电平作为有效检测DTMF信号的标志;如果DTMF信号消失,则EC0即返至低电平,与此同时EC0通过外接R向C充电,得到CI,GT。(通常此两端相短接)积分波形,若经tGTP延时后,CI,GT电压高于门限值VTst时,产生内部标志,这样,该电路在出现EC0标志时,将证实后的两单音送往译码器,变成4比特码字并送到输出锁存器,而CI标志出现时,则该码字送到三态输出端D01—D04,另外CI信号经形成和延时,从CID端输出,提供一选通脉冲,表明该码字已被接收和输出已被更新,如若积分电压降到门限VTst以下,使CID也回到低电平。需要指出,在本系统中,8870芯片主要对四路用户电路进行号码检测接入,为了不影响电路的正常工作,则由模拟开关来接通或断开DTMF信号,模拟开关的第二个作用是它对话音信号进行隔离,阻止话音信号进入8870芯片,防止误动作的发生,在实际应用中,采取排队等待方式工作的情况下,在具体设计这方面的电路时,可要全面考虑电路的设计,使之能正常工作而不出现漏检测现象。四.二次开发区1)DTMF检测整体模块结构图通过跳线区的跳线,我们可以有选择性的将四路用户中的某一路信号引入M202,M202是一个号码检测模块,当某路用户摘机拨号时,与之相对应的DTMF信号检测模块从该路模拟语音发Vi_VX上检测到双音多频信号,若有双音多频信号Vi_DTMFSTD输出高电平,否着输出低电平。若由总线引入的DTM使能信号Vi_DTMFTOE为高则允许BCD号码键值输出到总线上,若为低MT8870的Q4~Q1为高阻态。本模块在此还提供了二次开发单元,用户可通过二次开发切换开关,将此模块切换到开发模式,对MCS—51进行编程,实时观察按键拨号号码和键值。需要注意的是:5个切换开关全部松开时是二次开发模式,全部按下时是系统模式,切不可部分按下部分松开。2)MCU引脚连接示意图五.DTMF检测示例程序1)程序流程图如下图所示:2)注意事项[1].读取数据时,先将相应的端口寄存器置1.[2].检测到DTMF_STD信号有效时,置DTMF_EOC信号有效以读取BCD码.[3].注意并妥善处理MT8870的保护时间(guardtime)[4].先进行基本的LED灯和蜂鸣器测试以确保硬件正常.[5].注意本次课程设计单片机使用的是24MHz的晶振频率.[6].本次课程设计所用的MCU为STC89C51RD+,其P4口地址为0xC0.3).程序源码附于文档附录中.附录:DTMF检测二次开发源码如下:/***Name:dtmf.c*Date:2015.06.24*Describe:dtmf测试实验*CopyRight:freedom.*Note:useforC51.*:DTMF部分请参考官方文档:MT8870DE/DE-1(Integrated*DTMFReceiver).MITEL*/#includereg52.h#includedelay.h/*STC89C51还有P4口,地址是0xC0...*/sfrP4=0xC0;/*defineLEDpins*/#defineLED_ON0#defineLED_OFF1sbitled_1=P0^4;sbitled_2=P0^5;sbitled_3=P0^6;sbitled_4=P0^7;sbitled_5=P2^7;sbitled_6=P2^6;sbitled_7=P2^5;sbitled_8=P2^3;sbitled_9=P2^4;sbitled_10=P2^2;sbitled_11=P2^1;sbitled_12=P2^0;/*led_13~led_16useforshowBCD*/sbitled_13=P1^7;sbitled_14=P1^5;sbitled_15=P1^6;sbitled_16=P1^4;/*defineDTMFpins*/#defineDTMF_QP1/*仅使用低四位*/sbitdtmf_Q1=P1^3;sbitdtmf_Q2=P1^2;sbitdtmf_Q3=P1^1;sbitdtmf_Q4=P1^0;sbitdtmf_EOC=P3^1;/*输出使能端*/sbitdtmf_STD=P3^1;/*有效解码输出的指示端口*/sbitbuzzer=P4^2;unsignedintclocks;/*对于每个键值对应的蜂鸣器频率*由于耳朵对两个音的倍数敏感而非它们的相差值,所以这个数组并不十分科学~*/codeintfreq_table[12]={200,250,300,350,400,450,500,550,600,650,700,750,};/*LED和蜂鸣器测试,LED为跑马灯测试*/intsimple_test();/*设置第led_i的值为value,如你所见,value=0or1.*/intled_set_i(inti,intvalue);/*显示8421码*/intled_show_BCD(intbcd);/*启动蜂鸣器,设置频率为freqHz*/intbuzzer_start(intfreq);/*关闭蜂鸣器*/intbuzzer_stop();intmain(){intdtmf_bcd;/*LED和蜂鸣器测试,LED为跑马灯测试*/while(1)simple_test();while(1){/*设置DTMF_Q(P1低四位)为读取状态*/P1|=0x0F;/*DTMF芯片的EOC使能端设置为[关闭]*/dtmf_EOC=0;/*当检测到合适的音频信号时,dtmf_STD被拉高为1*在一段保护时间后(guardtime),dtmf_STD重新恢复到0*这是通过简单的延时电路实现的,对于R=300KΩ,C=0.1pF,*V_TSt=2.4V,VDD=5V,t_GTA=20ms*保护时间guardtime=20ms+t_DP,t_DP未知...*/if(dtmf_STD==1){/*DTMF芯片的EOC使能端设置为[开启]*/dtmf_EOC=1;/*取得音频信号对应的BCD码值*/dtmf_bcd=DTMF_Q&0x0F;/*点亮与BCD码对应的键盘LED灯(12个键盘LED灯)*/if(dtmf_bcd0&&dtmf_bcd13)led_set_i(dtmf_bcd,LED_ON);/*显示BCD码值*/led_show_BCD(dtmf_bcd);/*启动蜂鸣器,其频率与BCD码相关*//*以freq_table[i]的频率启动蜂鸣器*/buzzer_start(freq_table[dtmf_bcd%12]);/*此语句可省略.*延时100ms,无论如何,蜂鸣器会在一个频率至少工作100ms,*这是为了防止过低的guardtime和过高的[信号速率]带来的*信息淹没*/delay_ms(100);/*使MCU等待STMF芯片的保护时间(guardtime