2.2 线路切换及后备电源
当检测到铃流后,单片机应立即把电话机与外线电话线路断开,防止电话响铃。因为话机可能存有信息,所以应继续为话机供电,以保证话机信息不丢失。同时,电源也为系统设置复用话机键盘供电。
如图4所示,使用一个双刀双掷继电器进行线路切换。常闭触点连接外线,常开触电连接后备电源。LM317接成电流反馈形式,构成一个恒流源为话机供电。
2.3 来电解码电路
来电解码电路如图5所示,解码芯片采用盛群半导体公司的集成解码芯片HT9032。它着眼于Type I或On—hook caller ID的应用,符合Bellcore(Type I)及ITU—IV.23的规范。HT9032整合了FSK解调器于其芯片中,并以低耗电量及价格的优势等见长。芯片将解码以1 200波特率通过异步串行口发送至单片机。
2.4 摘挂机检测及DTMF解码电路
当系统黑名单设置时,会复用话机键盘,因此需要对话机按键的DTMF拨号解码,得到相应的按键键值,送由单片机处理。同时,要对话机状态进行检测,以及时通知单片机进行解码。DTMF解码采用盛群半导体公司的HT9170B集成解码芯片。摘挂机检测及DTMF解码电路如图6所示。
摘挂机检测使用了电压比较器。根据我国电话网标准,挂机状态时电话网电压在24 V以上,摘机时在10 V以下,用电压比较器比较电压,判断话机状态。
2.5 模拟挂机电路
模拟挂机电路如图7所示。当TAKEUP为高电平时,T1导通;当TAKEUP为低电平时,T1截止。因此T1就是一个受单片机I/O口控制的开关,可以通过单片机模拟摘挂机。
2.6 单片机及显示部分
单片机采用NXP公司的80C51内核P89C668。P89C66单片机内带64 KB Flash存储器,8KB RAM。显示电路采用的是128×64点阵LED屏。
2.7 系统电源
电话机后备电源需要24 V供电,而其他数字电路需要5 V供电,若采用线性稳压则损耗较大,故采用DC-DC芯片将24 V电压降为5 V,为数字电路供电。电源电路略——编者注。
3 μC/OS硬件层驱动程序设计
3.1 异步串行口驱动程序
当使用中断模式时,从接收移位寄存器接收到一个完整的字节,并将数据送入数据输入寄存器,产生一个中断。中断处理程序从端口读入字节,清除中断源。这时,可以处理ISR收到的字节,或者将字节送入缓冲区由后台处理,缓冲区大小依赖于后台进程控制CPU处理信息的速度。从串行端口捕捉数据时,常用一种被称作环形缓冲区的专用缓冲区。
输入数据的响应依赖于后台进程的执行速度。如果是实时内核,则处理输入数据的速度就与ISR接收不处理的速度差不多。为此,环形缓冲区的管理加入了信号量说明:
①应用程序等待信号量。
②接收到一字节后,ISR从串行端口读入字节。
③将接收到的字节送入环形缓冲区。
④ISR释放一个信号量,通知任务已经接收到一字节。
⑤信号量有效,等待任务准备开始运行。ISR完成后,内核决定等待任务是否成为优先级最高的任务。如果是,并且内核为可剥夺型内核,则恢复等待字节的任务。该任务从环型缓冲区取出数据,并执行相关操作。
3.2 基于μC/OS—II的串行口接收驱动
单片机对串口的支持仅仅是当数据送入SBUF时开始移位,但收到一个完整的字节后产生中断,通知用户进行读操作。在P89C668中,串行口并没有设计缓冲区,接收移位寄存器直接将数据送到接收SBUF,如果没有及时从接收SBUF中取出,前一字节就会丢失。如果没有驱动程序的支持,应用程序必须一字节一字节地接收数据,不但浪费时间,而且对应用程序的编制将产生极大影响。所以,在使用串口的时候,串口驱动程序是必须有的,通过驱动程序,可以大大简化应用程序的编写。
针对P89C668片内UART和μC/OS—II的特性,设计了分层明确的驱动模型,串口接收分层驱动结构图略——编者注。
任务在对环形缓冲区进行操作的时候,通过等待信号量,确定缓冲区是否允许操作。同时,中断服务子程序通过释放信号量来通知任务可以对缓冲区进行操作,大大提高了任务的响应时间。
4 系统软件设计
根据硬件构成,系统软件可分为来电解码、显示、键盘、判决、存储几大模块。模块在μC/OS—II的调度之下运行。
防火墙在值守状态时,各模块处于挂起态。当系统检测到铃流,将运行来电解码模块,并将解得的号码通知μC/OS—II。μC/OS—II将通过判决模块判断来电属性,执行相应动作。程序流程如图8所示。 ![](http://embed.chinaitlab.com/UploadFiles_4615/201301/20130131131929615.jpg)
结语
本文设计了基于μC/OS和80C51单片机的固话来电防火墙。介绍了电话机的基本工作原理,对硬件主要模块进行了详细地分解分析。对软件基本流程和设计思路进行了阐述。整个系统通过了实际产品的最终验证,达到设计要求。
|