AT89C52单片机组成的智能呼救系统设计
1 引言
目前,电话网四通八达,若能成功利用电话网实现自动呼救,将大大提高医疗急救部门处理紧急事务的准确性和及时快速性,进而增大病危患者得到及时救治的机会,从而挽救生命。但是,一些失去行动能力或意识能力的如突发性心脑血管疾病患者,在不能使用电话报警,周围又没有求助对象时,总希望能有一种简单易行,且准确及时的报警方法。为此,介绍一种智能呼救系统设计方案,即使失去行动能力的患者仅按一下随身携带的钥匙扣式发射机按钮,可使接收装置在单片机的控制下自动拨出 120 报警电话号码呼叫急救;再拨通系统预设的几路电话号码(如亲人的)通知家人;自动语音提示所处地点及简要情况。
2 系统硬件组成
该装置由发射机、接收机、检测与控制电路、拨号电路及语音录放电路组成。图 1 给出其原理框图。该系统与家用电话机并联,只在报警期间占用电话线路,报警结束后系统与电话线路脱离,不影响电话机的正常使用。当病人触发无线发射机时,接收机一旦接收到触发信号就发出报警电平信号到主机控制部分。主机控制部分对电平信号进行处理,然后控制拨号器件向电话线路拨出双音多频信号(电话号码),当线路接通后,控制语音器件将播放出事先录制好的语音信号到电话线路,以实现语音报警。
2.1 单片机电路设计
为了提高可靠性,降低成本,该系统采用了 AT89C52 单片机。其片内集成了 8kB 的 Flash,无需外接存储器,使用方便。AT89C52 与单片机 8051 的指令完全兼容,易于编程,且功能强大。在硬件及程序设计上,利用 P1 端口控制 MT8880。其中,P1.0~P1.3 为数据输入/输出位;P1.4~P1.7 为 MT8880 的命令字输入位;利用 P2.5~P2.7 控制 ISD1420 语音器件,其电路原理如图 2 所示。
2.2 无线发射与接收电路
采用无线密码遥控发射和接收组件构成无线发射和接收电路。该遥控组件包括一只匙扣式发射机和一只解码接收电路。发射机由微型电池供电,可使用数千次;接收机由 5V 电压供电,没有遥控发射信号时,输出端 OUT 为 0;有遥控发射信号时,输出端 OUT 为 1(不保持)。该遥控组件的特点:发射部分微型化,呈匙扣状,便于携带;发射和接收的编/解码配对使用,接收机不响应其他发射机的信号;发射和接收的有效距离可达 80m。
2.3 信号音检测与拨号电路
设计中采用了 DTMF 编/解码器 MT8880。它是一款带有呼叫处理滤波器的单片 DTMF 收发器,采用 IS022CMOS 制造工艺,功耗低,可靠性高。DTMF 收发器基于单片收发器 MT8870 工业标准,能接收全部 16 个DTMF 信号;DTMF 发送器采用开关电容 D/A 转换器,信号失真小,精度高,定时精确。MT8880 的工作模式有 DTMF 模式和呼叫处理(CP)模式两种。当选择呼叫处理模式时,MT8880 用于检测电话网上电话呼叫过程中表示不同进程的信号音(如拨号音,识别拨号音,拨号音的标准频率为450Hz)。这是目前其他 DTMF 收发器所不具备的,并省去一个复杂的拨号音识别电路。DTMF 编/解码器 MT8880的接口电路如图 3 所示。
2.4 语音录放电路
电路要求能存储 5s~10s 语音报警信息,通过开关预先录入,在发生警情时拨通电话,对方摘机后由单片机启动播放录音,对方挂机后停止放音。电路选用 ISD1420P,通过单片机 P2.5 或 P2.6 送来的高电平导通,启动放音,可输出到电话机听筒中的麦克风。ISD1420P 的单片录放时间为 8s~20s,音质好;采用 CMOS 技术,内含振荡器、话筒前置放大、自动增益控制、防混淆滤波器、平滑滤波器、扬声器驱动及 EEPROM 阵列。最小的录放系统仅需麦克风、喇叭、按钮、电源及少量电阻、电容。录放结束后,ZSD1420P 自动进入 0.5μA 的低功耗节电模式。ISD1420P 系列有唯一的录音控制和边沿/电平触发两种放音控制。不分段时,外围线路最简单,分段时,可按最小段长为单位任意组合分段,提供若干操作模式,大大提高了控制的灵活性。ISD1420P 采用多电平直接模拟量存储专利技术,每个采样直接存储在片内单个 EEPROM 单元中,因此能非常真实、自然再现语音、音乐、音调效果,避免了一般固体录音电路因量化和压缩造成的量化噪声和“金属声”。采样频率为 5.3kHz,6.4kHz,8.0kHz,对音质仅有轻微影响。片内信息可保存 100 年,EEPROM 单片可反复录音 10 次。ISD1420 的语音电路如图 4 所示。
3 系统软设计
软件部分采用 C 语言编程,控制单片机 AT89C52 中P0、P1、P2、P3 口的高低电平,以达到报警目的。首先使单片机 AT89C52 初始化,其 P3.2 口开始检测报警信号,当 P3.2 口检测到一个高电平时,表示有报警信号输入,这时 P0.0 口给出一个高电平信号,使系统的自动摘挂机电路自动摘机,同时拨号电路处于拨号状态。若 P1 口允许拨号,则 P1.4~P1.7 输出一组电平信号,使拨号电路自动拨 120 报警,在监测到 120 第一组号码挂机后则进入拨下一组号码的程序,否则挂机。当拨号成功后,P2.5 口给一个高电平信号,触发放音电路自动播放预先储存在ISD1420 中的报警内容。报警结束后,P0.0 口给出一个低电平信号,系统自动挂机,完成整个报警过程。图 5 给出智能电话报警系统设计软件流程图。
3.1 MT8888 相关的软件设计
MT8888 内部有一个只读接收数据寄存器,一个只写发送数据寄存器,两个控制寄存器及一个状态寄存器。通过对上述 5 个寄存器进行相应的读写操作完成 DTMF 编/解码。监控电话线状态等功能时,MT8880 模块的基本操作函数包括:
(1)MT8880 的初始化,对应程序中的 Init8880() 函数
在系统上电后进行其他操作之前,必须有一个软件复位操作,以完成 MT8880 的初始化工作。通常在上电后 100ms 时初始化步骤:①读状态寄存器;②往控制寄存器写数据 0;③再往控制寄存器写数据 0;④往控制寄存器写数据 8;⑤往控制寄存器写数据 0;⑥读状态寄存器。
void Init8888(void) //初始化 MT8880//
{
ReadStaReg(); //READ
WriteConReg(0); //W RITE 1
WriteConReg(0); //W RITE 2
WriteConReg(8); //W RITE 3
WriteConReg(0); //W RITE 4
ReadStaReg(); //READ
}
(2)拨号前的初始化,对应程序中的 InitToneOut() 函数
为了使 MT8880 能稳定、可靠工作,在每次利用 MT8880 进行 DTMF 拨号前都需初始化一次:①调用(1)中的 Init8880() 函数;②向控制寄存器中写数据 OXC,表示中断使能,选择 DTMF 模式,暂时禁止 Tone 输出,而且在下一次写控制寄存器时对寄存器 B 进行操作;③向控制寄存器中写数据 0,表示不选择 BURST 模式,发送 DTMF 的持续时间由下述程序控制。
{
void InitToneOut(void)
{Init8880();
WriteConReg(0xc);
WriteConreg(0);
}
(3)拨号过程中拨一个数字的操作,对应程序中的 Write-DataReg() 函数
拨号时,AT89C51 除了往 MT8880 的数据总线上送出相应数字外,还必须通过控制寄存器 A 的最低位来控制发送音频的持续时间。这是因为在初始化(2)中没有选择 BURST 模式。
void WriteDataReg(uchar dat) //向发送寄存器写入一个字节//
{
P1=0XC0;
dat&=0xf;
P1l=dat;
P1&=0x4f;
P1=0xff;
WriteConReg(7);
delay_ms(120);
WriteConReg(6);
delay_ms(120);
ReadStaReg();
}
3.2 Main()函数
Main() 函数实现了整个报警系统中:接收检测信号输人、自动拨打电话并报警及接收用户修改电话号码等主要功能。在 Main() 函数上电,并对 MT8880 初始化后,将通过无条件的 While 循环在 6 种状态之间转移。定义系统状态如下:
typedef enum STA (Idle=0,Dial,Detect,Play,ModifyCode,Wait-ForReset)STATUS; //系统状态的枚举//
typedef enum DSTA (_D_Unknown=0,_D_FirstPulses,_D_Judge)DETECTSTATUS; //检测状态 Detect 里面的状态枚举//
DETECTSTATUS DetState;STATUS SysState; //检测状态 Detect 里面的状态枚举//
上述 6 个系统状态中,Idle 表示空闲状态。当没有信号输入、用户没有修改电话号码时,系统处于空闲状态; Dial 表示系统在接收到信号输入后,自动摘机,选一个电话号码并拨号,紧跟着进入 Detect 状态;在 Detect 状态中,关键是检测出电话线的状态,根据信号音是忙音、回铃音还是对方已摘机,做不同处理。若回铃音,继续等待;若忙音,则重新回到 Dial 状态,准备拨下一个电话号码;若对方已摘机,则进入 Play 状态,开始播放语音;在Play 状态中,每播出一次语音提示后,间隔 20s 则检测一次电话线的状态,若对方己挂机,则退出 Play 状态,而进入 WaitForReset 状态;在 WaitForReset 中,程序一直扫描传感器的输入引脚电平。当手动按下输入复位按钮后,该引脚变为低电平,系统重新回到 Idle 状态。
4 结语
单片机系统不断采集从 P1 口输入的检测信息,经过消抖、分析处理后,判断是否触发报警。一旦检测阵列触发,单片机立刻通过拨号电路触发电话自动拨出预存的电话号码,然后由信号检测电路判断是否打通、是否接听等信息,从而控制语音电路何时发出报警信息及触发拨出下一组号码,以实现自动报警功能。该装置的调试主要分为硬件调试、软件调试和联机综合调试 3 大部分。在整个系统的调试过程中,联机综合调试最重要。硬件部分的调试需要注意:在测试语音电路输出与电话机听筒连接时,若直接相连,会使电话短路,不能工作。只有通过编程,实现它们之间通讯的逻辑性,当需要放录时,才让语音输出端与听筒通讯。此外,硬件电路还需利用小型继电器来实现。最终达到预定要求,则表明系统调试成功。 软件部分的调试:回铃音检测程序内部的信息处理采样周期不能太大,否则从电话线过来的语音信号很短,特别是其中的低电平脉冲信号,会导致识别不出其中的低电平。MT8880 的工作模式有呼叫过程(CP)、DTMF 以及突发(BURST)模式 3 种。若选择 BURST 模式用于拨号,则只能听到一个非常短促的“嘀”声,持续时间太短,而无法被识别。若选择 DTMF 模式,则要用软件来控制发送音的持续时间,即通过置位控制寄存器 CRA 的最低位 b0 来允许 DTMF 音输出,通过清零该位,而禁止 DTMF 音输出。
转载自:《国外电子元器件》
暂无评论