0 引言
国内单片机多机通信方向技术开发应用已有相当长时间,在智能化仪器、工业自动控制、家用电器机电一体化等方面的应用成果尤为显著。本文介绍AT系列单片机多机通信在程控交换机中应用。
多机程控交换机将1至2条电话外线扩展成4绳路、12个分机容量,可以多部分机同时通话而互不干扰(可以内外线混用);分机可以为电话机、传真机、答录机和电脑等任何电讯产品。
1 硬件结构简介
通信串行口 |
图1 多机通信程控交换机结构框图
其中一个CPU(AT89C52)作为上位机,实现分机摘机/挂机查询、分机振铃等功能。四个CPU(AT89C51)作为下位机,各控制一根绳路,P10、P11口作为CPU地址,CPU进行查询外线来电、分机挂线(内线和外线)、分机撤线、分机拨号处理等工作,提供内线拨号音、回音铃、忙音、证实音等信号音。0_CPU和1_CPU各有一个继电器J控制开关,用于接通或切断电话外线与绳路的连接。
硬件线路保证每CPU各施其职,互不串扰。某分机一旦挂线后,该分机的信号音、拨号等只受该绳路的CPU控制,而且分机摘机、挂线后拨号才有效;撤线后,该分机不再受绳路的CPU控制。
2多机通信协议
在多机通信协议中定义上位机为主动,下位机为被动。
2.1上——下位机联络握手
上位机向下位机广播地址信息;下位机收到地址信息后判断是否是本机地址,若不是,不应答;若是,向上位机发应答信号,同时作好接收数据准备。上位机收到应答信号后,判断应答信号是否正确。若不正确,重发地址信号;若正确,发送数据(命令代码)。已握手的下位机接收数据(命令代码)后,执行相应功能或实施服务。地址信息与命令代码设置不重码,以便下位机能判别出。
2.2上位机向下位机发送命令类
是否接外线(仅为0_CPU和1_CPU)、有否请求服务、指定分机挂某一根内/外线、指定分机撤线、释放外线继电器、编程密码、长途等级(内部、市内、国内和国际)、长途解锁、要求绳路发内线拨号音、内线回音铃、内线忙音铃或内线证实音等。
2.3下位机向上位机请求服务
下位机只有在上位机 “有否请求服务”时,才可向上位机发送信息。发送信息有:本绳路有外电呼叫、拨打内部分机、三方通话、代接外线、设置转移功能(无条件转移、遇忙转移、无应答转移、撤消转移)、设置外线来电振铃方式(指定若干分机振铃、全部分机振铃、三机四组轮流振动铃、外线来电时指定分机振铃)、设置长途密码长途等级长途解码、强插监听等。
3多机程控交换机软件设计方法
程序设计思路是根据多机程控交换机工作过程而制定的,采用上下位机包干控制,充分利用CPU资源,实现程控交换机功能。
3.1上位机软件设计思路
根据多机程控交换机功能,上位机程序分成初始化、摘机处理、挂机处理、发送命令、下位机请求服务处理、振铃处理和定时器处理(包括看门狗)七个模块,程序模块结构如图2所示。
初始化模块主要是定义常数变量、变量单元、位标志、缓冲区、中断设置、定时器设置/启动、电话分机工作初始状态等。
摘机处理模块主要判别是外线来电摘机、内线来电摘机还是要拨打外线或内线电话。
挂机处理模块比较复杂,既有内外线通话结束挂机,又有内外线通话中止挂机,还有三方通话主叫机挂机和从叫机挂机,其它有中止拨打外线/内线挂机、分机功能设置完毕挂机等。
发送命令模块主要是根据电话分机发生摘/挂机时,向下位机发送挂线/撤线命令、内线拨号音等命令,发送询问下位机有否请求服务等命令。
下位机请求服务处理模块主要根据下位机CPU请求,完成外线来电、拨打内线分机、分机功能设置等工作。
振铃处理模块主要处理外线来电时,根据振铃模式进行分机振铃、轮流振铃等;内线呼叫分机时,根据分机转移功能,作相应的振铃处理;被呼叫分机摘机后停止振铃等功能。
定时器处理模块配合振铃处理模块产生各种振铃计时以及看门狗定时常数刷新等。
3.2下位机软件设计思路
为便于编辑和管理,4个下位机程序使用同一版本,程序运行时根据地址作相应的处理。
根据多机程控交换机功能,下位机程序分成初始化、连接外线查询、发送请求服务、外线来电中断请求、分机拨号中断请求和定时器中断(包括看门狗)六个模块,程序模块结构如图3所示。
初始化模块主要是定义变量单元、位标志、缓冲区、中断设置、定时器设置/启动等。
连接外线查询模块在开机复位后查询本CPU是否接外线(2_CPU和3_CPU跳过),然后置标志,上位机通过问询下位机知道程控交换机接几根外线。
命令处理模块主要完成上位机下达的命令,命令有指定分机挂外线/内线、对挂内线分机发送或停止内线信号音(内线拨号音、内线回音铃、内线忙音铃或内线证实音等)、指定分机撤外线/内线等等。
发送请求服务模块主要向上位机发送外线来电处理、分机拨打内线电话、分机设置功能等请求服务。
外线来电中断请求模块在外线来电时(0_CPU和1_CPU),向CPU请求中断。CPU响应中断后,首先判断是否干扰信号,确认为外线来后,竖立外线来电标。当上位机查询下位机有否请求服务时,向上位机发送外线来电服务请求。为防外线来电中止,下位机CPU发送请求后即清除外线来电标。上位机在送出分机振铃后一秒钟内,如分机未摘机,而下位机又没发来新的外线来电请求服务,立马中止振铃。
分机拨号中断请求模块在分机拨号后,向CPU请求中断。CPU响应中断后,根据所拨号码,产生对应请求服务代码。上位机收到请求服务后,对其进行译码,作相应处理。如分机是挂外线,除判别该分机长途等级外,对拨号不作任何处理。分机在挂线情况下,拨号才有中断请求信号产生,这由硬件保证。
定时器处理模块主要产生450方波信号,产生各种内线铃声所需脉冲信号以及看门狗定时常数刷新等。
上下位机源程序限于篇幅,不作介绍。
4编程中特点
由于多机程控交换机上位机CPU要对四个下位机CPU,而分机摘/挂机状态采用查询方式,又要处理分机振铃等,查询过程中要采用抗干扰措施,防止CPU误判、误动作。所以编程中要考虑整体时间分配,以免延误用户通话。
上位机在查询下位机有否服务请求时,采用轮流查询法。在发送信息前又要与下位机握手,所以查询时间较长。当下位机有服务请求时,上位机马上中止查询下一CPU,为当前下位机服务。
为缩短上下位机通信时间,下发代码采用单字节,按位定义。如“D7”位表示挂线或撤线,“D6”位表示挂内线或外线,“D5、D4”位表示发内线拨号音、内线回音铃、内线忙音或内线证实音,“D3”~“D0”表示分机号。
上发代码采用多字节,长短不同,这是由于多机程控交换机功能丰富多采,下位机在上发代码最后加一个结束符。
多机程控交换机功能较多,分机拨号中断请求模块要分成外线拨号、内线拨号(包括代接、转接和三方通话)和功能设置三个小模块。为提高CPU利用率,分机拨号中断请求模块采用流水线作业方式,按一次键,模块执行一次。所以要保护好现场,竖立相应的标志,保证分机拨号中断请求模块工作正常。当某功能拨完后,CPU再将请求服务代码送到发送缓冲区。
5结束语
多机程控交换机可连接二根外线,十二只内部分机,四绳路通话容量,具有丰富的实用功能,可不间断连续工作。分机之间可多对电话(最多四对八机)同时通话而彼此互不干扰。分机可直拨外线、强插外线、长途加锁设置等。外线来电响铃方式有二种,一为选择某些分机振铃,二为分机轮流振铃,由1号分机进行设置。分机可代拨、代接、征询转接和三方通话等。
本文作者的创新点:上、下位机CPU串行通信发送采用查询方式,接收采用中断循环队列缓冲区方式。多机程控交换机不使用扩展外RAM,上位机采用AT89C52,其内RAM为256字节,足够CPU工作所需,同时给硬件上分清上位机和下位机CPU芯片带来好处,一举二得。
多机程控交换机样机已小批量投入某些公司、企业使用,用户反映程控交换机基本功能工作正常,使用方便,由此说明多机程控交换机达到设计要求。
参考文献:
[1] 丁磊,基于多单片机集散控制的新型浴缸控制器设计,微计算机信息2006第7-2期
[2] 徐冠捷,基于单片机的小型程控交换机,微计算机信息2006第2-2期
[3] 李 华,MCS-51系列单片机实用接口技术,北京航空航天大学出版社
[4] 曹柏荣,单片机原理及其应用技术,中国民航出版社