单片机同线电话交换机
在单位办公室或者家庭1司一根电话线接多部电话的现象比较多,用户用任何一部电话机均可向外拨号,外线打入时同时振铃,每一部电话都可以接听,使保密成了问题,当接听者不是外线要找的人,需通知另一部电话接听或叫外线重打一次。这种情况给用户的使用带来麻烦。于是市场上出现了同线电话保密转呼器,两部电话之间可进行转呼。与外线通话时,两部电话间可以相互保密。这种同线电话保密转呼器也有一个缺陷,一般只能使用到两部电话机。本文介绍一种用单片机制作的同线电话机交换机,它可以接3部电话机,改变程序和电路可以扩展到4部电话机。可以通过拨号的方式转接电话,也可以拨号打内部通话。
硬件电路设计工作原理
传统的同线电话保密转呼器见右图,甲、乙两个分机的电路完全一样。
平时晶闸管VS截止。当外线呼入时,振铃信号的正半周击穿VDI使VS导通,负半周经VD1、R1、R2形成通路,电话机响铃。摘机后T、R两踹电压降为1OV左右。另一分机再摘机时,此电压不能击穿其VDI,VS呈关断状态,使之无法工作,起到同线电话互锁保密的作用。IC、B、VD2、R3等构成发声电路,用于产生转接呼叫信号。S为一单刀双掷开关,平时处于2位,发声电路与C踹相连,可由另一分机提供工作电压发声。如所接的电话是打给另一分机的,可将S置1位,这时从C踹送出1OV左右的直流电压,使另一分机的发声电路工作,产生呼叫信号。R3和VD2组成稳压电路,给发声电路提供3V的直流工作电压。
使用单片机的1司线电话交换机电路见下图。由单片机电路、电话机状态检测和控制电路、双音频解码电路、模拟摘机电路等部分组成。
对于电路的工作原理分三种情况进行说明:
1.外线打入电话
当外线有电话打入时,振铃信号通过K1-K3三个继电器的常闭触点接通三部电话机,使它们同时振铃。以第一单元为例,VT2、R7组成电话机控制电路,VT3、R8-RIO等组成电话机状态检测电路。当有一部电话机接听后,不仿设电话1接听了,这时通过电话机的直流电流在R8上约产生1.5V的直流电压,通过R9使VT3饱和导通,VT3输出踹B1由高电平转换为低电平。单片机AT89C2O5l检测到这一信号后,A2、A3踹输出高电平,VT4、VT6分别饱和导通使继电器单片机AT89C2O5l进行判断后,其A1、A3输出低电平,A2输出高电平,K2吸合使电话2和内线相连,D1输出高电平使由VT1、VD1、R3组成的模拟摘机电路工作,VT1导通使R3并接在外线上产生摘机的效果,这时即使电话1挂机也不会使外线断线。VDI的作用是防止振铃的反向电压加在VTI上。与此同时,单片机D2输出1秒高电平、4秒低电平的脉冲信号,通过VT8控制K4产生相应的动作,使得36V的交流电压间隔性的加在电话2上,产生响1秒、停4秒的振铃声。这时如果电话2摘机,则VT5的B2输出低电平,单片机AT89C2O5l检测后其输出端A2输出低电平使电话2接在外线上通话,A1、A3输出高电平使电话1、电话3断开和外线的连接,与此同时,D1、D2均恢复输出低电平,停止模拟摘机和振铃如果1分钟之内电话2没有摘机,则A1-A3、D1、D2均输出低电平,电路恢复到初始状态,对方会听到电信局程控交换机发出的挂机提示音。
2.拨打外线电话不仿设电话3拨打外线,当电话3摘机后,VT7的B3端输出低电平,单片机AT89C2O5l检测后A1、A2输出高电平,断开电话1、电话2与外线的连接,直至电话3挂机后电路才能恢复到初始状态。
3.内部通话内部通话时3个电话机对应的号码分别为*1、*2、*3。
下面以电话3拨打电话1为例说明,电话3摘机后单片机的输出状态和上述2相同。当电话3拨了号码*1后,单片机A2、A3输出低电平,A1输出高电平,这时只有电话1接在内线上,D2产生脉冲信号控制K4动作产生振铃信号,电话1发出振铃声。在电话1摘机后,B1输出低电平到单片机,单片机A1、A3输出高电平,A2输出低电平,D2输出低电平,此时电话1、电话2同时接内线上,由开路电压为45V的电源提供工作电源,两个电话机即可进行通话了。
由于MT8870必须使用3.58MHz的晶振,为了简化电路,和单片机同用一个时钟源,因此单片机的时钟频率也是3.58MHz。
上图是单片机同线电话交换机的电源电路。电源分四部分:5V作单片机的工作电源,9V供继电器工作,交流36V作电话机的振铃电源,虽然比邮局程控交换的振铃电压要小点,但还是能够正常工作的,45V作内线通话时电话机的工作电源。45V电源是模拟程控交换机的供电模式的,串联在电源中电阻R有两个作用:一是限流,二是作为两个电话机的共同负载电阻。打电话时讲话产生的电流变化可以引起电阻R上电压的变化,使对方电话机能够对这一信号进行放大后收听,这样用两根线既完成了供电又完成了信号的传递,从而使双方能够通话。
软件设计
程序用C语言编写,由主程序、定时中断服务子程序和延时子程序组成。
主程序由初始化和电话机状态检测两部分组成,电话机状态检测部分的作用和同线电话保密转呼器中的晶闸管的作用相类似,即有一部电话摘机后将其他两部电话机锁定,保证同一时间只有一部电话机和外线接通。
电话机状态检测部分的程序代码如下:
while(1)
{
if(k==O)
{
P3=O:
if(B1==0)//若电话1摘机
{ A2=1;A3=1;//断开
电话2、3跟外线的连接
while(B1==O); }//
等待电话1挂机
else if(B2==0)//若电
话2摘机
{ A1=1;A3=l;//断开电
话1、3跟外线的连接
while(B2==O);)//
等待电话2挂机
else if(B3==O)//若
电话3摘机
{A1=1;A2=1;//断开电
话1,2跟外线的连接
while(B3==O);)//
等待电话3挂机
}
上述程序中参数k是判断是否拨分机号的特征数,拨了分机号k=l,否则k=0。k的值由定时中断服务子程序进行设置。 定时中断服务子程序的作用主要是用定时中断的方式不断对拨号状态进行扫描,分转接拨号和内部通话拨号两部分,分别用“#”和“*”作转接拨号和内部通话拨号的特征码,跟在后面的数字对应分机号。下面以程序中转接拨号中的一段为例对程序进行说明:SWitch(P1&&0xOf)//判断转接的分机号 { case 1:(//转接的分机号为1 m=5: Al=1; A2=O;A3=O;//电话1接在内线上 D1=1;//模拟摘机 i=O;n=O; w h i l e(B1==1&&i<60)//振铃,1分钟内等待电话1摘机 (if(n==4) (D2=1;//每逢第5秒振铃1秒钟 n=O; )else D2=O;//停止振铃 delay(1000);//延时1秒钟 i++; n++; ) if(i!=60)//电话1在1分钟内摘机 (D1=O ; D2=O;//停止模拟摘机、停止振铃 A1=O;A2=1j A3=1;//只有电话l接在外线上通话 while(B1==0);//等待电话1挂机 P3=0;)//电话1挂机,恢复到初始状态 else P3=O;//1分钟内没有摘机,恢复到初始状态 break: case 2:(//转接的分机号为2
相关文章
发表评论