接口电路与记录仪的通信通过四个信号线来实现,分别是STB选通、ASW应答、DATA数据、CLK时钟。这种通信接口可以从远程模块向记录仪单向发送DTMF数据。
3 软件控制流程
主程序流程图如图7所示。
系统一直监测线路信号,在三次振铃后接通电话。提示音通过8Ω电阻耦合到电话线路上后,就可以进行DTMF信号的通信。系统检测电话线上的DTMF码;同时检测线路是否有忙音信号,判断对方是否已挂机,若对方挂机则本地也挂机。在挂机后系统返回初始等待状态;如果主叫方三次密码输入错误,则记录仪通知电话查询模块主动挂机;主叫方在接通电话以后长时间没有输入需要查询的记录时间,电路也会主动挂机。
软件首先对所用到的寄存器和存储器进行初始化,然后进入节电模式。
如果有振铃信号,则通过中断方式进行响应。振铃3次后接通电话;对于异常情况,如振铃只响过一次对方就已经挂机,则不响应。中断处理程序中首先将中断屏蔽掉(以避免同一次铃流而产生几次中断),计时4s后打开中断;如果超过8s仍然没有下一次铃流来触发中断,则清除计数器,跳转到程序开始。累计振铃3次后,关掉中断,避免其他干扰信号打断程序的正常运行。此后进入主程序。
为了保证程序的实时性且不丢失数据,主程序为一个主循环。循环中根据输入和标志位来判断是否有DTMF数据需要接收,是否有数据需要发送,是否需要挂机。而数据的接收检测、发送和忙音检测是在定时中断中来做。
有忙音时,M982的输出是一个0.35s±0.05s的方波。此时对方已经挂机,其他的任务已基本不需要占用时间,所以可以采取一种比较严格的检测方法。本文在检测到有忙音信号,即I/O3变低时,开始连续监测,每隔100μs检测一次,如果连续100ms中有85ms均为低电平,即检测1000次中至少有850次为低,则认为检测到一次方波的低电平部分,然后延时200ms后再开始检测高电平。在检测到高以后,同样监测100ms,然后再检测低电平。一共检测3个周期,如果检测都通过,即认为收到一个合格的忙音信号,在挂机的同时通知记录仪。
在检测到有DTMF信号时,即I/O4变为高电平时,设置接收标志位,在主程序中接收数据,并且缓存在RAM中。因为接收到的数据除了密码,就是查询时间,需要用FIFO的存储方式,将顺序输入的数据发给记录仪。在时钟中断服务程序中仅设置标志位,在主程序中读取。
如果有数据需要发送,电路首先在STB上给出信号;然后等待ASW线上的应答信号;在得到应答后,开始发送程序产生的时钟信号,在时钟信号的上升沿发送数据位,外围电路在时钟信号的下降沿接收数据。电路的传送速率是100kbps。由于DTMF信号都只有四位数据,所以数据发送时定义了一个前导码,即三个‘0’,一个‘1’,然后是数据。
这个接口电路经过实际运行检验,具有电路可靠、使用灵活、成本低等特点。