基于μC/OS和80C51单片机的固话来电防火墙设计
2018-03-24 来源:eefocus
本文介绍了基于μC/OS—II嵌入式实时操作系统和来电显示技术设计,由铃流检测电路、来电解码电路、DTMF解码电路、模拟挂机电路、号码存储电路等组成。系统利用得到的来电号码,同存储黑名单中的号码进行比较,判断是接通话机振铃线路,还是控制模拟挂机电路挂机。本系统复用电话机键盘控制,并以LCD中文显示,可方便地对黑名单中的号码进行管理。
随着电信业务的发展,骚扰电话问题日益突出,大量用户被骚扰电话所烦扰。为躲避骚扰,多数人采取拔电话线的方法,却因此错过不少重要来电。此外,每个人在生活中都可能遇到一些出于顾虑而不想接听的电话。针对此种现象,本次设计的来电防火墙可屏蔽骚扰电话。来电防火墙通俗地讲就是“不想听”的电话打不进来,它可以过滤掉黑名单中电话号码的来电,直接拒绝接昕。同时,也支持亲友名单模式,只接听亲友名单中电话的来电,拒绝接听其他号码的来电。
1 系统概述
μC/OS—II嵌入式实时操作系统的引入极大地方便了模块的管理和号码存储的管理,系统复用电话机键盘控制,并以LCD中文显示,可方便对黑名单中的号码进行管理。主叫识别信息传送及显示CID业务是向被叫电话用户提供的一种新服务项目,是指在被叫用户终端设备上显示主叫号码、主叫用户姓名、呼叫日期时间等主叫识别信息,并进行存储以供用户查阅的一种服务项目。实现CID的基本方法是发端交换机将主叫号码等信息通过局间信令系统传送给终端交换机,终端交换机将主叫识别信息以移频键控FSK的方式,送给被叫用户终端,主叫识别信息传送设备如图1所示。
终端交换机将主叫识别信息送给被叫用户终端设备,在下述两种状态下进行;一种是用户终端挂机状态,另一种是用户终端通话状态。挂机状态下的传送方法是终端交换机将主叫识别信息在第一次振铃和第二次振铃间隔期间,送给被叫用户终端设备,被叫终端信息传送如图2所示。目前我国大陆地区都是采用图2所示的方式进行来电号码传递。
2 系统硬件电路设计
固定电话来电防火墙是基于来电显示(CID)设计的,通过解码得到的来电号码,与黑名单中的号码进行比对,进行模拟挂机或者接通振铃行动。复用电话及键盘进行系统设置,通过电话机键盘输入号码,存储到EEPROM中。
2.1 铃流检测电路
我国大陆来电显示是FSK格式的。来电号码在第一声振铃和第二声振铃之间发送。为避免在得到来电号码前,第一声振铃对用户产生影响,需要在话机振铃电路动作之前截断振铃,因此要求振铃检测迅速有效。图3为铃流检测电路。
铃流为25 Hz,电压有效值是90±15 V的正弦波,通过二极管组成的整流器整流后,进入电压比较器LM311。当铃流电压上升到60 V以上的时候,LM311比较器就会输出高电平。反相后,用来触发单片机的外中断。仿真波形略
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所示。
结语
本文设计了基于μC/OS和80C51单片机的固话来电防火墙。介绍了电话机的基本工作原理,对硬件主要模块进行了详细地分解分析。对软件基本流程和设计思路进行了阐述。整个系统通过了实际产品的最终验证,达到设计要求。
下一篇:用单片机的串口驱动74LS164
- USB Type-C® 和 USB Power Delivery:专为扩展功率范围和电池供电型系统而设计
- 嵌入式开发学习(10)
- GD32F103C8T6 Uart3无法发送数据
- GD32F103C8单片机的PWM输出试验
- GD32F103C系列单片机的PWM捕获功能
- 【GD32L233C-START】DAC输出(正弦波、锯齿波、方波)
- GD32330C-START开发板试用体验:GD32F330开发环境构建
- GD32330C-START开发板试用体验:MDK开发环境搭建,跑马灯demo下载成功
- GD32330C-START开发板试用体验:+ 串口USART收发数据
- GD32E230C-FOC电机控制解决方案