饶亲苗04135077程控交换实验3.docx
《饶亲苗04135077程控交换实验3.docx》由会员分享,可在线阅读,更多相关《饶亲苗04135077程控交换实验3.docx(19页珍藏版)》请在冰豆网上搜索。
饶亲苗04135077程控交换实验3
信息科学与工程学院《程控交换原理》上机实验报告
专业班级电信1302班姓名饶亲苗学号201304135077
实验时间2016年10月26日指导教师章喆成绩
实验名称
1.双音多频DTMF接收实验
2.空分交换网络原理系统实验
实验目的
实验一:
1.了解电话号码双音多频信号在程控交换系统中的发送和接收方法;
2.熟悉该电路的组成及工作过程;
实验二:
1.掌握程控交换的基本原理与实现方法;
2.通过对MT8816芯片的实验,熟悉空分交换网络的工作过程。
实验仪器与材料
实验一:
程控交换实验箱一台,电话机二台,20MHz示波器一台
实验二:
程控交换实验箱一台,电话二---四台,20MHz示波器一台
实验原理
实验一:
1.在电话机中,有两种拨号方式,即脉冲拨号和双音多频拨号。
双音多频拨号方式中的双音多频是指用两个特定的单音频信号的组合来代表数字或功能,两个单音频的频率不同,所代表的数字和功能也不同,在双音多频电话机中有16个按键,其中有10个数字键0~9,6个功能键*、#、A、B、C、D,按照组合的原理,它必须有8种不同的单音频信号,由于采用的频率有8种,故又称之为多频,又因以8种频率中任意抽出2种进行组合,又称其为8中取2的编码方式。
2.DTMF接收器包括DTMF分组滤波器和DTMF译码器。
DTMF接收器先经高、低频组带通滤波器进行fL/fH区分,然后过零检测、比较,得到相应于DTMF的两路fL、fH信号输出。
该两路信号经译码、锁存、缓冲,恢复成对应于16种DTMF信号音的4比特二进制(D1~D4)。
实验二:
1.实验系统中的交换网络由两大部分组成,即话路部分和控制部分。
话路部分包括交换网络、用户电路出中继电路、入中继电路、收号器、音信号发生器以及信号设备等;控制部分则是一台电子计算机,它包括中央处理器,存储器和输入、输出设备。
实验内容(包括实验步骤、实验原始记录、实验过程中编写程序和实验数据计算结果)
一.空分双音多频DTMF接收实验步骤:
1.用串口线将PC机的串口与实验箱的串口(在实验箱的右上方)连接起来;
2.打开PC机软件“程控交换.exe”,默认的系统设置是启动时自动连接实验箱;
3.将开关K1拨到空分交换模式,然后实验箱上电,信息调试窗口中出现打印信息;
4.在“程控交换.exe”软件中单击“实验模板”菜单中的“空分双音多频DTMF接收实验”,在ADTIDE集成开发环境中打开该实验模板的工程文件;
5.在ADTIDE的工程管理器中双击打开DTMF.c文件,按照注释的提示在相应处填写代码;
6.代码编辑完成后,在ADTIDE的工程管理器的工程名上单击鼠标右键,在弹出的快捷
菜单中选择“build”或者点击“build”菜单重的“RebuildAll”,来编译链接生成.elf文件。
若出现错误,则修改代码,排除错误,然后重新用“build”编译、连接,直至成功;
7.在“程控交换.exe”软件中单击“下载程序”按钮,实验箱将自动重启并下载刚才编译
生成的映像文件,然后运行;当信息提示窗口出现提示信息:
“请拿起用户1的话机开始拨号,观察四个LED的变化。
您所拨的号码为:
”,拿起用户1的话机,拨出8位号码,号码将逐个显示在信息提示窗口中。
然后程序将提示:
“请拿起用户2的话机开始拨号,观察四个LED的变化。
您所拨的号码为:
”,此时若再拨用户1的号码将毫无反应。
请拿起用户2的话机,则所拨出的号码将逐个显示在信息提示窗口中。
用户3和用户4也是一样,如此循环往复。
二.空分交换通话实验步骤:
1.用串口线将PC机的串口与实验箱的串口(在实验箱的右上方)连接起来;
2.打开PC机软件“程控交换.exe”,默认的系统设置是启动时自动连接实验箱;
3.将开关K1拨到空分交换模式,然后实验箱上电,信息调试窗口中出现打印信息;
4.在“程控交换.exe”软件中单击“实验模板”菜单中的“空分交换通话实验”,在ADTIDE集成开发环境中打开该实验模板的工程文件;
5.在ADTIDE的工程管理器中双击打开SDS.c文件,按照注释的提示在相应处填写代码;
6.代码编辑完成后,在ADTIDE的工程管理器的工程名上单击鼠标右键,在弹出的快捷
菜单中选择“build”或者点击“build”菜单重的“RebuildAll”,来编译链接生成.elf文件。
若出现错误,则修改代码,排除错误,然后重新用“build”编译、连接,直至成功;
7.在“程控交换.exe”软件中单击“下载程序”按钮,实验箱将自动重启并下载刚才编译
生成的映像文件,然后运行;
8.当信息提示窗口出现提示信息:
“系统启动完成.摘机后用户1和用户3可以相互通话,用户2和用户4可以相互通话”。
拿起用户1的话机,出现提示信息“用户1已摘机”,再拿起用户3的话机,则提示“用户1和用户3通话中”,“用户3和用户1通话中”。
拿起用户2的话机,出现提示信息“用户2已摘机”,再拿起用户4的话机,则提示“用户2和用户4通话中”,“用户4和用户2通话中”。
1.空分双音多频DTMF接收实验主要程序:
while
(1){
//接收通道1的DTMF信号并显示所拨8位号码
SelectDtmfChannel(CHANNEL1);
CKComPrintf("\n请拿起用户1的话机开始拨号,观察四个LED的变化\n");
CKComPrintf("您所拨的号码为:
");
while(Number<8);//等待拨号中断8次,即用户拨完8位号码
Number=0;
memset(NumberBuf,15,0x0);
//请按照通道1的范例完成第2~4通道DTMF信号接收的代码编写
SelectDtmfChannel(CHANNEL2);
CKComPrintf("\n请拿起用户2的话机开始拨号,观察四个LED的变化\n");
CKComPrintf("您所拨的号码为:
");
while(Number<8);//等待拨号中断8次,即用户拨完8位号码
Number=0;
memset(NumberBuf,15,0x0);
SelectDtmfChannel(CHANNEL3);
CKComPrintf("\n请拿起用户3的话机开始拨号,观察四个LED的变化\n");
CKComPrintf("您所拨的号码为:
");
while(Number<8);//等待拨号中断8次,即用户拨完8位号码
Number=0;
memset(NumberBuf,15,0x0);
SelectDtmfChannel(CHANNEL4);
CKComPrintf("\n请拿起用户4的话机开始拨号,观察四个LED的变化\n");
CKComPrintf("您所拨的号码为:
");
while(Number<8);//等待拨号中断8次,即用户拨完8位号码
Number=0;
memset(NumberBuf,15,0x0);
}
voidCKDialNum(void)
{
//请在此处填写代码,读DTMF_CS端口得到用户所拨8位号码并打印出?
if(Number<8)
{
NumberBuf[Number]=DTMF[ReadPort(DTMF_CS)&0xf];
CKComPrintf("%01x",NumberBuf[Number]);
Number++;
}
}
voidSelectDtmfChannel(bytechannel)
{
//请在此处填写代码,通过写VOICECHAN_CS端口将channel通道的
//双音多频信号连接到DTMF收号器MT8870,以检测该用户所拨号码
if(channel==CHANNEL1)
{
WritePort(VOICECHAN_CS,0x1);
}
elseif(channel==CHANNEL2)
{
WritePort(VOICECHAN_CS,0x2);
}
elseif(channel==CHANNEL3)
{
WritePort(VOICECHAN_CS,0x4);
}
elseif(channel==CHANNEL4)
{
WritePort(VOICECHAN_CS,0x8);
}
}
2.空分交换通话实验主要程序:
while
(1){
temp=CheckPickup();
temp1=temp&0x1;
if(temp1!
=0){
OSTimeDly(20);//延时200ms消抖
temp=CheckPickup();
temp1=temp&0x1;
if(temp1!
=0){//用户1挂机
Channel1Status=down;
CKReportTE(TE_1,TE_HAND_DOWN);
CKComPrintf("用户1已挂机\n");
if(Channel3Status==up){
DisConnect(CHANNEL1-1+4,CHANNEL3-1+4);//主/被叫硬件断开连接
DisConnect(CHANNEL3-1+4,CHANNEL1-1+4);//主/被叫硬件断开连接
}
}
}
else{
OSTimeDly(20);//延时200ms消抖
temp=CheckPickup();
temp1=temp&0x1;
if(temp1==0){//用户1摘机
Channel1Status=up;
CKReportTE(TE_1,TE_HAND_UP);
/*打印调试信息*/
if(Channel3Status==up){
PortaValue&=~0x55;WritePort(RINGRESOUND,PortaValue);
PortbValue&=~0x55;WritePort(BUSYMUTE_CS,PortbValue);
Connect(CHANNEL1-1+4,CHANNEL3-1+4);//主/被叫硬件连接
Connect(CHANNEL3-1+4,CHANNEL1-1+4);//主/被叫硬件连接
/*打印调试信息*/
CKComPrintf("用户1和用户3通话中\n");
}
else{
CKComPrintf("用户1已摘机\n");
}
}
}
temp1=temp&0x2;
//请按照通道1的范例完成通道2的代码(注意:
2和4通话)
if(temp1!
=0){
OSTimeDly(20);//延时200ms消抖
temp=CheckPickup();
temp1=temp&0x2;
if(temp1!
=0){//用户2挂机
Channel2Status=down;
CKReportTE(TE_2,TE_HAND_DOWN);
CKComPrintf("用户2已挂机\n");
if(Channel4Status==up){
DisConnect(CHANNEL2-1+4,CHANNEL4-1+4);//主/被叫硬件断开连接
DisConnect(CHANNEL4-1+4,CHANNEL2-1+4);//主/被叫硬件断开连接
}
}
}
else{
OSTimeDly(20);//延时200ms消抖
temp=CheckPickup();
temp1=temp&0x2;
if(temp1==0){//用户2摘机
Channel2Status=up;
CKReportTE(TE_2,TE_HAND_UP);
/*打印调试信息*/
if(Channel4Status==up){
PortaValue&=~0x55;WritePort(RINGRESOUND,PortaValue);
PortbValue&=~0x55;WritePort(BUSYMUTE_CS,PortbValue);
Connect(CHANNEL2-1+4,CHANNEL4-1+4);//主/被叫硬件连接
Connect(CHANNEL4-1+4,CHANNEL2-1+4);//主/被叫硬件连接
/*打印调试信息*/
CKComPrintf("用户2和用户4通话中\n");
}
else{
CKComPrintf("用户2已摘机\n");
}
}
}
temp1=temp&0x4;
//请按照通道1的范例完成通道3的代码(注意:
3和1通话)
if(temp1!
=0){
OSTimeDly(20);//延时200ms消抖
temp=CheckPickup();
temp1=temp&0x4;
if(temp1!
=0){//用户3挂机
Channel3Status=down;
CKReportTE(TE_3,TE_HAND_DOWN);
CKComPrintf("用户3已挂机\n");
if(Channel1Status==up){
DisConnect(CHANNEL3-1+4,CHANNEL1-1+4);//主/被叫硬件断开连接
DisConnect(CHANNEL1-1+4,CHANNEL3-1+4);//主/被叫硬件断开连接
}
}
}
else{
OSTimeDly(20);//延时200ms消抖
temp=CheckPickup();
temp1=temp&0x4;
if(temp1==0){//用户3摘机
Channel3Status=up;
CKReportTE(TE_3,TE_HAND_UP);
/*打印调试信息*/
if(Channel1Status==up){
PortaValue&=~0x55;WritePort(RINGRESOUND,PortaValue);
PortbValue&=~0x55;WritePort(BUSYMUTE_CS,PortbValue);
Connect(CHANNEL3-1+4,CHANNEL1-1+4);//主/被叫硬件连接
Connect(CHANNEL1-1+4,CHANNEL3-1+4);//主/被叫硬件连接
/*打印调试信息*/CKComPrintf("用户3和用户1通话中\n");
}
else{
CKComPrintf("用户3已摘机\n");
}
}
}
temp1=temp&0x8;
//请按照通道1的范例完成通道4的代码(注意:
4和2通话)
if(temp1!
=0){
OSTimeDly(20);//延时200ms消抖
temp=CheckPickup();
temp1=temp&0x8;
if(temp1!
=0){//用户4挂机
Channel4Status=down;
CKReportTE(TE_4,TE_HAND_DOWN);
CKComPrintf("用户4已挂机\n");
if(Channel2Status==up){
DisConnect(CHANNEL4-1+4,CHANNEL2-1+4);//主/被叫硬件断开连接
DisConnect(CHANNEL2-1+4,CHANNEL4-1+4);//主/被叫硬件断开连接
}
}
}
else{
OSTimeDly(20);//延时200ms消抖
temp=CheckPickup();
temp1=temp&0x8;
if(temp1==0){//用户4摘机
Channel4Status=up;
CKReportTE(TE_4,TE_HAND_UP);
/*打印调试信息*/
if(Channel2Status==up){
PortaValue&=~0x55;WritePort(RINGRESOUND,PortaValue);
PortbValue&=~0x55;WritePort(BUSYMUTE_CS,PortbValue);
Connect(CHANNEL4-1+4,CHANNEL2-1+4);//主/被叫硬件连接
Connect(CHANNEL2-1+4,CHANNEL4-1+4);//主/被叫硬件连接
/*打印调试信息*/
CKComPrintf("用户4和用户2通话中\n");
}
else{
CKComPrintf("用户4已摘机\n");
}
}
}
}
}
voidConnect(bytexchannel,byteychannel)//空分连接
{
//请在此处填写实现主叫、被叫硬件连接的代码
WritePort(D8816CTL_CS,0x1);//STB=0,DATA=1
WritePort(D8816ADDR_CS,(XCHANNEL[xchannel]<<3)|ychannel);
WritePort(D8816CTL_CS,0x3);//STB=1,DATA=1
WritePort(D8816CTL_CS,0x3);//STB=1,DATA=1
WritePort(D8816CTL_CS,0x1);//STB=0,DATA=1
}
voidDisConnect(bytexchannel,byteychannel)//空分撤连
{
//请在此处填写实现主叫、被叫断开连接的代码
WritePort(D8816CTL_CS,0x0);//STB=0,DATA=0
WritePort(D8816ADDR_CS,(XCHANNEL[xchannel]<<3)|ychannel);
WritePort(D8816CTL_CS,0x2);//STB=1,DATA=0
WritePort(D8816CTL_CS,0x2);//STB=1,DATA=0
WritePort(D8816CTL_CS,0x0);//STB=0,DATA=0
}
实验结果(包括实验结果分析和实验心得体会)
实验结果分析:
这两个实验都做得非常成功,信息提示窗口都成功地出现了提示信息。
用用户1的话机拨出8位号码后,号码逐个显示在了信息提示窗口。
用户2,3,4依次这样。
拿起用户1的话机,出现提示信息“用户1已摘机”,再拿起用户3的话机,则提示“用户1和用户3通话中”,“用户3和用户1通话中”。
拿起用户2的话机,出现提示信息“用户2已摘机”,再拿起用户4的话机,则提示“用户2和用户4通话中”,“用户4和用户2通话中”。
实验心得体会:
实验五我们了解了电话号码双音多频信号在程控交换系统中的发送和接收方法,熟悉了该电路的组成及其工作方法;
实验六我们掌握了程控交换的基本原理与实现方法,通过对MT8816芯片的实验,熟悉空分交换网络的工作方程。
有了前面几次实验的基础,这次实验完成的比较顺利,我还是有很大收获的,最起码对交换技术的程序和功能了解更多了。