基于双音多频编码信号DTMF的通信系统设计讲解Word格式.docx
《基于双音多频编码信号DTMF的通信系统设计讲解Word格式.docx》由会员分享,可在线阅读,更多相关《基于双音多频编码信号DTMF的通信系统设计讲解Word格式.docx(18页珍藏版)》请在冰豆网上搜索。
接收端接收到DTMF信号后,译码电路将双音多频信号译成十进制数字,然后将该数据通过单片机的数据口传输给单片机,单片机将接收数据送显示电路显示出来。
整个过程即完成了双音多频信号的发送和接收。
在硬件电路工作中,需要软件来对系统的工作进行控制,支持数据的传输与显示。
所以在系统设计中,要编写程序代码支持硬件的工作。
设计中编写相应的功能代码,然后写入单片机,通过控制相应的硬件电路的工作即可完成相应的功能。
第三章硬件电路设计
3.1硬件电路设计
本次课题主要完成基于双音频编码信号的接收译码和显示。
接收通信系统包括三个部分:
单片机系统连接、双音多频信号的接收和显示模块。
设计中采用MT8880对双音多频信号进行译码,该部分用于完成DTMF信号的接收、分离和译码,并以4位并行二进制码的方式输出。
MT8888芯片是MITEL公司采用CMOS工艺生产的DTMF信号收发一体集成电路,它的发送部分采用信号失真小、频率稳定性高的开关电容式D/A变换器,可发出16种双音多频DTMF信号。
然后通过单片机的控制发送给HD7279进行显示,HD7279内部含有译码器可直接接受BCD码或16进制码,并同时具有2种译码方式此外还具有多种控制指令如消隐闪烁左移右移段寻址等。
另外,HD7279具有片选信号,可方便地实现多于8位的显示或多于4键的键盘接口。
3.2单元电路设计
3.2.1单片机最小系统
单片机通过内部的数据口实现双音多频信号接收端的译码数据的传输,同时根据其内部的程序控制整个电路的工作,其最小系统连接图如下所示:
图3.1单片机最小系统电路
图中,单片机有两种复位方式,手动复位和上电复位方式。
上电复位急用RC充电来实现。
在系统上电瞬间RC电路给RST端加上一个高电平,此高电平信号随着电容的充电而不断减少,直到恢复低电平。
RC充放电时间约为RC。
单片机要实现可靠复位,需要至少两个时钟周期。
所以RC选择需要大于单片机的两个时钟周期。
另外对于手动复位,按下开关单片机的RST端会维持一段时间的高电平,在这段时间内,单片机完成内部的复位工作。
按下开关后开关会自动恢复,RST端恢复低电平,单片机正常工作。
手动复位可以强制系统复位。
有图可见,单片机的时钟产生方式采用内部振荡方式。
单片机芯片内有一个由反向放大器构成的振荡电路。
XTAL1为振荡电路的输入端,XTAL2为输出端。
通常晶振频率为1.2MHz-12MHz。
通过XTAL1、XTAL2与电容连接构成一个自激振荡器,向内部时钟电路提供震荡时钟。
电容C1、C2可在5pF—30pF之间选择,电容的大小对振荡频率有微小的影响,客气频率微调的作用。
3.2.2DTMF信号译码电路
DTMF译码电路采用芯片MT8880完成。
MT8880是一个带有呼叫处理滤波器的单片DTMF信号收发器。
他的制造采用MITEL公司的低功耗、高稳定性的ISO-CMOS技术。
DTMF信号的接收部分采用DTMF信号接收单片机MT8870的工业制造标准。
内部寄存器提供一个群模式。
在双音频群模式下DTMF信号可以通过精确的时序被发送出去。
可选择呼叫处理滤波器让一个微处理器处理呼叫音频信号。
其内部功能框图如下所示:
.3.2MT8880内部功能框图
MT8880内部功能框图MT8888提供了与微处理器相连的接口,以对其发送、进行控制。
MT8888可与Intel微处理器直接接口,即使使用16MHz的单片机80C51,也无需插入等待周期。
与其它微处理器接口时,则必须通过转换构造MT8888所需的时序。
图3.3为MT8880的控制时序图。
图3.3MT8880控制时序图
当MT8880作为DTMF接收器的时候,DTMF信号经由IN-输入,经过运算放大滤除信号中的拨号音频率,然后发送到双音频滤波器,分离出低频组和高频组信号,通过数字计数的方式检出DTMF信号的频率,并且通过译码器译成4位二进制码。
4位二进制编码被锁存在接收数据寄存器中,此时状态寄存器中的延时控制识别位复位,状态寄存器中的接收数据寄存器满标识位置位。
对外而言,当寄存器中的延时控制识别位复位时,IRQ/CP由高电平变为低电平。
如果用IRQ/CP作为单片机的中断信号,IRQL由高电平变为低电平,向CPU发出中断请求,当CPU响应中断,读出寄存器中的数据后,IRQ返回高电平。
在设计中,将MT8880的D0~D3与单片机的P0.0~P0.3相连,P1.0、P1.5分别与RS,R/W相连,另外在P1.2接了一个发光二极管,通过软件控制,当有接收到DTMF信号时,二极管会闪烁。
电路图如图3.4所示。
图3.4DTMF信号译码电路
图中CP端为MT8880的接口时钟信号端,只有给MT8880提供0.167-10us的时钟信号才能正常工作。
CP的实现方法有:
单片机地址锁存允许信号端提供;
MT8880自身晶振提供;
单片机的晶振输出信号加驱动提供;
I/O端模拟CP端配合软件实现。
在设计中,采用利用MT8880自身的晶振输出作为CP。
3.2.3显示电路
设计中,基于双音频编码信号的通信系统接收端系统的显示电路采用芯片HD7279完成。
HD7279是一片具有串行接口的可同时驱动8位共阴式数码管或64只独立LED的智能显示驱动芯片该芯片,同时它还可连接多达64键的键盘矩阵,单片即可完成LED显示键盘接口的全部功能。
本设计课题为DTMF信号的接收,不需要使用键盘输入的功能,主要是要使用芯片译码驱动数码管的功能。
HD7279采用串行方式与微处理器通讯,数据从DATA引脚以串行方式输入HD7279。
当片选信号变为低点平时,单片机发送缓冲寄存器的数据在CLK引脚的上升沿被写入HD7279的缓冲器寄存器。
HD7279连接共阴式数码管,采用循环扫描的工作方式,若不用键盘则可以省去下拉电阻。
HD7279的外接RC震荡电路供系统工作其典型值为R=1500欧,C=15pf,震荡电路的原件应尽量靠近芯片。
HD7279的复位端可以直接和正电源连接,在上电或复位端由低电平变为高电平时,HD7279大约需要经过18-25MS的时间才会进入正常工作状态。
由于元器件的部分管脚已经和数码管连接好,本设计电路中只需要HD7279和单片机连接四个管脚即KEY、CLK、CS、DATE,设计电路如下所示。
图3.5HD7279驱动显示电路
当接收到DTMF信号时,MT8880将信号译码,送给单片机。
单片机通过数据口DATA将要显示的数据传送给HD7279,HD7279驱动数码管显示接收到的数据。
其中,数据的接收和传输工作由软件控制。
第四章软件设计
4.1主程序设计
通过上述MT8880和HD7279的硬件电路可知,要实现数据的传输就需要软件来对硬件电路的工作进行控制。
由于MT8880可以工作在中断模式,即当芯片被设置在中断模式时,当接收到DTMF信号并译码后,IRQ端会由原来的高电平变为低电平。
所以设计中采用该中断模式,将IRQ端与单片机的INT0连接。
MT8880进行接收DTME信号前必须进行接收初始化才能进行收发数据。
主程序进行MT8880的接收初始化,和HD7279的初始化,然后等待中断。
程序流程图如图所示。
图4.1主程序框图
主程序首先对通过HD7279的控制指令对HD7279进行复位,然后由于在HD7279规定15表示没有有效键按下,数码管不显示,所以通过单片机给HD7279传输15,使数码管复位不显示。
经过一段时间的延时,使系统内部复位完成,可以接收DTMF信号。
然后给MT8880进行接受初始化,此部分根据MT8880的内部结构来编写相应的子程序,通过调用子程序来完成芯片的初始化。
然后开外部中断零,运用while语句等待中断。
4.2中断服务程序设计
因为IRQ端与单片机的外部中断零相连,当IRQ由高电平变为低电平,程序进入中断服务程序。
首先,在中断服务程序中,MT8880将接收并译码的数据送给单片机,然后判断存放接收数据的数组存放的数据是否超过8。
若超过,则从0从新存放数据。
然后接收译码后的数据。
单片机对接收的数据进行判断是否等于10,然后通过数据口将数据传输给HD7279,驱动数码管显示。
中断服务程序流程图如图所示。
图4.2中断服务程序框图
当检测到DTMF信号时,进入中断服务程序。
在该程序中,系统将译码后的数据发送到单片机,然后传输数据给HD7279进行显示。
MT8880的接收程序中,当给HD7279传输数据时用到了相应的串口发送程序,该段程序以子程序调用方式使用。
由于数码管只有八位,所以当接收的数据超过八位时,要对数码管清零,数组又从零开始赋值。
另外,由于MT8880的译码规则,接收0会被译成10,所以对10有一个特别的判定。
4.3子程序设计
4.3.1MT8880初始化子程序设计
译码电路主要是要做好MT8880的初始化,以下针对MT8880接受初始程序根据其内部结构对其详细讨论。
MT8880将发送和接收电路集成在一个芯片内,集成度高。
同时可编程控制,通过与单片机接口来控制MT8880的内部工作。
对于MT8880译码部分的软件设计就是对MT8880的工作进行控制,根据芯片的内部结构和课题要实现的功能主要要注意芯片的以下几点:
(1)R/W为读/写控制端,该端施以高电平时读MT8880,施以低电平时写MT8880;
RSI为用于选择内部各寄存器的控制端,该端施以高电平时选中控制寄存器或状态寄存器,施以低电平时选中发送数据寄存器或接收数据寄存器。
具体的对应关系必须根据R/W端的状态共同确定,详见下表;
表4-1内部寄存器功能
RSO
R/W
功能
0
写发送数据寄存器
1
读接收数据寄存器
写控制寄存器
读状态寄存器
(2)IRQ:
在双音频模式并且在中断模式时,当收到有效DTMF信号或准备发送DTMF信号时该端由高电平变到低电平;
(3)MT8880内部有5个寄存器:
数据发送寄存器TDR、数据接收寄存器RDR、控制寄存器CRA及CRB、状态寄存器SR。
本次课题中主要要能清楚控制寄存器CRA及CRB、状态寄存器SR。
芯片工作于何种功能,取决于在单片机的控制下写入控制寄存器CRA和CRB的内容,当需要接收DTMF信号时,首先往控制寄存器CRA和CRB写入相应的控制字,把芯片设置为DTMF模式。
控制寄存器各个位的功能意义如下表所示:
表4-2控制寄存器(CRA)功能
控制位
名称与功能
说明
b0
Tout音调输出
逻辑“1”使能音调输出
b1
CP/DTMF模式。
控制
逻辑“1”为CP模式。
当b2=1时,例如输入电话忙音,此脚输出忙音方波
b2
IRQ中断使能
逻辑“1”使能中断模式。
当b1=0时,接收到DTMF信号,DTMF/CP引脚电平由高变低。
b3
RSEL寄存器选择
逻辑“1”允许选择CRB
译码后的数据从芯片的D0一D3脚读出。
控制寄存器CRA、CRB以及状态寄存器都只有4个位(比特),分别记为D1、Dl、D2、D3,要写控制寄存器或读状态寄存器,只要按照上表的规定给RSI引脚及R/W引脚施以相应电平就可以通过引脚D0~D3写入或读出。
表4-3控制寄存器(CRB)功能
控制位
说明
b0
BURST双音群模式
逻辑“0”使能双音群模式
TEST实验模式
逻辑“1”使能实验模式。
该模式时,IRQ/CP引脚输出延迟控制信号(CRAb1=0)
S/D单双音产生
逻辑“0”允许产生DTMF,否则,输出单音频
C/R列/行音选择
b2=1,”逻辑“使能产生单音信号
而芯片的某些状态可以根据读出状态寄存器SR的内容来判断。
状态寄存器功能各个位的功能意义如下表所示:
表4-4状态寄存器功能
状态位
名称
状态标志置位
状态标志清除
IRQ
发生中断;
b1或b2=0
读状态寄存器清除
发送寄存器空(群模式)
暂停结束:
准备发送新数据
读状态寄存器清除
接收寄存器满
接收寄存器的数据有效
DELAYED-STEERING
检测不到DTMF信号时置位
检测DTMF信号时清除
据上表,根据相应的硬件电路写出相应的寄存器控制字。
MT888O译码部分程序主要是要做好芯片的接收初始化,和译码数据的传输。
表4-5MT8880译码规则
双音频键
1
2
3
4
5
6
7
8
9
十时制数
10
系统上电后,软件首先开中断,给MT8880接收初始化。
当接收到DTMF信号时,MT8880对DTMF信号根据上表进行译码,其中,对于0要特殊注意,因为0对应的十进制数为10。
此时,芯片IRQ端由高电平变为低电平。
4.3.2显示子程序设计
显示子程序主要是要根据HD7279的内部结构和控制字写相应的程序控制数码管显示姨妈数据。
HD7279采用串行方式与微处理器进行通讯。
串行数据从DATA引脚输入芯片,并由CLK同步。
当片选信号变为低电平时,DATA引脚上的数据在CLK引脚的上升沿被写入HD7279的缓冲寄存器。
HD7279A的控制指令分为二大类——纯指令和带有数据的指令。
主要控制指令如下:
A.纯指令
(1).复位(清除)指令A4H
D7
D6
D5
D4
D3
D2
D1
D0
当HD7279A收到该指令后,将所有的显示清除,所有设置的字符消隐、闪烁等属性也被一起清除。
执行该指令后,芯片所处的状态与系统上电后所处的状态一样。
(2).左移指令A1H
(3).右移指令A0H
与左移指令类似,但所做移动为自左向右(从第8位向第1位)移动,移动后,最左边一位为空。
B.带有数据的指令
(1).下载数据且按方式0译码
HD7279有两种译码方式,方式0和方式1.其命令由两个字节组成如下:
其中,前半部分为指令,a1、a2、a0为位地址,选择要显示的数码管位数,后半部分D0-D3为要显示的数据。
方式0和方式1只是译码方式不同,指令是相同的。
表4-6HD7279位地址选择
例如:
0000:
显01001:
显9
1010:
显-1111:
显空白
(2).下载数据且按方式1译码
此指令与上一条指令其本相同,所不同的是译码方式,该指令的译码为按d0—d3值对应的是0—9,A~F。
(3).读键盘数据指令15H
该指令从HD7279A读出当前的按键代码。
前一个字节015H为指令代码,而后一个字节d0-d7则为HD7279A返回的按键代码,其范围是00H-3FH(无键按下时为FFH)。
当HD7279A检测到有效的按键时,KEY引脚从高电平变为低电平,并一直保持到按键结束。
在此期间,如果HD7279A接收到‘读键盘数据指令’,则输出当前按键的键盘代码,如果在收到‘读键盘指令’时没有有效按键,HD7279A将输出FFH。
HD7279的指令结构有三种类型:
1、不带数据的纯指令,指令的宽度为8个BIT,即微处理器需发送8个CLK脉冲。
2、带有数据的指令,宽度为16个BIT,即微处理器需发送16个CLK脉冲。
3、读取键盘数据指令,宽度为16个BIT,前8个为微处理器发送到HD7279的指令,后8个BIT为HD7279返回的键盘代码。
执行此指令时,HD7279的DATA端在第9个CLK脉冲的上升沿变为输出状态,并与第16个脉冲的下降沿恢复为输入状态,等待接收下一个指令。
串行接口的时序如下图:
1、纯指令
T1=50us;
T2=8us;
T3=8us
2、带数据指令
8位指令(高位在前)8位数据(高位在前)
其中,T4=25us
3、读键盘指令
读键盘指令(8位,高位在前)HD7279输出的键盘代码(8位,高位在前)
T5=25us;
T6=8us;
T7=8us
当MT8880把译码后的数据送到单片机,单片机将接收的数据通过HD7279的DATA端传送给HD7279。
其中传送数据由软件控制。
首先单片机将接收的数据存放在数组内,由于HD7279采用串行数据传输,此时将接收的一位数据分以十六进制表示,分八位传输,接收端将数据译成数码管对应的码字驱动数码管显示。
在程序编写时,存放数据的数组的位数即为要显示数据在数码管中的位置,即用来位寻址。
根据位地址和显示数据写出HD7279的控制字,既可以完成显示功能。
参考文献
[1]黄葆华,杨晓静,牟华坤.通信原理(2007年2月第一版).西安:
西安电子科技大学出版社,2007,P191—193
[2]高如云,陆曼如,张企民,孙万蓉.通信电子线路(第二版)西安:
西安电子科技大学出版社,2007,P281--282
[3]谢自美.电子线路设计实验测试(第二版).武汉:
华中科技大学出版社,2003,P98—P99
[4]张迎新等.单片机初级教程—单片机基础(第二版).北京:
北京航空航天大学出版社,2008,P31—59,P176—P198,P244--265
[5]张万奎.模拟电子技术基础(第一版).长沙:
湖南大学出版社,2004,P31—39,P51--73
附录三程序清单(部分)
voidmt8880(void)interrupt0//中断服务程序
{
if(count==8)//当接收数据超过8,清空数码管,从0位从新开始接收显示
{
for(ff=0;
ff<
8;
ff++)
r_buf[ff]=15;
//数码管清空
count=0;
//数组从第一位开始存放数据
}
RS=RW=1;
//读状态寄存器
CLK1=1;
//软件模拟CP,时钟上升沿,向MT8880写入控制字
delay(100);
n=P0;
//读P0口
CLK1=0;
RS=0;
RW=1;
//读数据接收寄存器
r_buf[count++]=(P0&
0x0f);
//MT8880将译码后的数据传输给单片机
if(r_buf[count-1]==10)//若译码后得数据是10,将其置0
r_buf[count-1]=0;
for(i=0;
i<
i++)
{
write7279(DECODE0+i,r_buf[i]);
//将数据送HD7279显示
}
}
voidwrite7279(unsignedcharcmd,unsignedchardta)//数据写入HD7279
send_byte(cmd);
//调用子程序,先写入控制字
send_byte(dta);
//写入要显示的数据
voidsend_byte(unsignedcharout_byte)//将一字节数据传输给HD7279
{
unsignedchari;
cs=0;
long_delay();
for(i=0;
if(out_byte&
0x80)//得out_byt最高位,若为一则发1,否则发0
{
dat=1;
else
dat=0;
clk=1;
//时钟电平出现跳变,此时发送数据
short_delay();
clk=0;
short_delay();
out_byte=out_byte*2;
//out_byte左移一位
dat=0;
voiddelay(longintI)
longinti;
for(i=0;
I;
i++);
voidlong_delay(v