1、摘要 目前,越来越多的住宅向着智能化,人性化的方向发展。其中家用电器的远程控制正被推广开来。本着低能耗、无污染、使用简单方便的原则。本文设计的是一种基于AT89S51单片机的远程电话控制系统。该系统是以AT89S51为核心、通过现在的个人通信手段,实现基于PLMN(陆基移动通信网)和PSTN(公用电话交换网)的电话远程控制系统。根据CCITT及我国标准共同规定,电话远程控制系统(ITRCS),以PSTN与PLMN通信网作为传输介质,以部分标准程控交换信令(DTMF双音多频信号,振铃信号,回铃音信号等)作为系统控制命令,使用户实现在远端通过移动电话或者固定电话发送DTMF双音多频信号对近端电器设
2、备进行远程控制。本次设计的电话远程控制系统不需要再进行专门的布线,不占用无线电频率资源,从而可避免电磁污染。用户只有输入正确的密码才能控制家电,从而提高了安全性。该系统设计实用,功能灵活多样,可靠性高,操作方便,可以广泛地应用于家庭或者其它场所的智能控制。关键词:AT89S51,远程电话控制,DTMF,智能家电目录 摘要IAbstractII第一章 绪论11.1 本课题研究的背景11.2 远程控制的内容2第二章 系统设计可行性分析32.1 总体设计分析32.1.1 系统总体设计分析32. 2 总体方案4第三章 硬件单元电路设计93.1 硬件模块93.1.1 振铃检测电路93.1.2 模拟摘挂机
3、电路103.1.3 双音解码电路113.1.4单片机外围电路14第四章 软件设计164.1 软件模块164.1.1 信号音检测164.1.2 密码检测164.2 软件设计164.2.1 系统完整程序17第五章 系统应用21第六章技术经济分析22结论23谢辞24参考文献25第一章 绪论1.1 本课题研究的背景二十一世纪是信息时代,各种电信新技术,促进了人类文明的进步。自从1876年,Alexander Graham Bell(贝尔)发明了电话以来,世界各国的电话网络长足的发展。过去十年,中国的固话业务也取得了举世瞩目的发展。1997年8月中国的电话交换机总容量超过1亿门,网络规模也已经位居世界第
4、二,2004年7月,固定电话用户总数超过2.00亿户。随着通信业的发展,电话机已经走进千家万户,随着现代科学技术的发展,电话远程控制的技术也越来越多的在生活中使用。电话传输线与交换机共同构成了现代电话网络,它的性能也取得了极大的进步,并且,可靠性很高。遥控技术是指,在一定的距离通过一定的手段对物体实施控制,通常包含红外线、超声波遥控、有线遥控和无线电遥控等。无线电遥控是指通过无线电信号对被控物体实施远距离控制。因此,无线电遥控必定会占用一部分的无线电频率资源,从而造成电磁污染;常规的有线遥控则需要专门的布线,这不可避免的会加大投资;而超声波遥控和红外线遥控则会受到距离的限制。现有的遥控方式,还
5、有通过载波通信控制和无线寻呼实现遥控。载波方式也即是利用电力网络线传递信息,但是这种方式只能应用于同一变压器、同一变电所所能覆盖的范围内。因此,也有距离问题,应用范围也是有限的。利用无线寻呼这种方式则使用已有的寻呼频率资源,所以不会占用其他的频谱。并且,限制寻呼网已经实现了全国联网,其遥控的距离基本不受限制。但该方式的被控方动作会滞后于控制方的操作,不具备实时性,而且可靠性并不是很高。本文将会介绍一种基于单片机的电话远程控制技术。本系统用于具有单片机控制的家用电器的电话遥控,用户可以通过固定电话或者手机对自己家中安装的报警器、热水器、空调等电器进行开机、停机等操作。控制示意图如图1-1所示:图
6、1-1 系统控制示意图1.2 远程控制的内容 2008年4月17日举行的中国国际家电展上,海尔集团展出了自主研发的智能家电系统。有了该系统以后,你可以在下班回家的路上,用手机给家中的空调发个短信,设定温度,到家就能享受舒适的室温;给家中的电热水器发个短信,到家后就能洗上热水澡;给洗衣机发个指令,它就自动将衣物洗涤干净,到家后就能直接晾晒人们过去幻想的场景,现在已经变成了现实。但是,现在绝大多数的家庭使用的仍然是传统的家用电器,本文主要的设计就是一种可以通过电话实现远程控制传统家用电器的系统【1】。智能家电控制系统的功能主要在于家庭的安全报警、红外集中遥控、自动抄表控制等等方面。现有的组网方式有
7、以下两大类:无线组网和有线组网。无线组网的主要技术是家庭射频技术(HomeRF)、蓝牙技术(Bluetooth)和家庭电话线网络联盟技术(HomePAN)等。而有线组网则主要利用家中的电话线、单独布置通信控制线路或者电力线载波通信进行组网。电话遥控与常规的遥控方式相比,具有一定的优越性,它不需要进行专门的布线,也不占用无线电频率资源,而且还避免了电磁污染。除此以外,因为电话线路各地都联网,可以充分的利用现有的电话网,因而遥控距离不受限制,可跨省市,甚至跨国家实现控制。电话是一种半双工通信方式。因此,它可以大大的反映出电话远程控制的优越性。操作人员可通过提示音随时随地的了解受控对象的工作状态,从
8、而实现自己需要实现的控制。电话遥控这一课题已经有了很多的研究者,但是到目前为止,都还只是局限于实验阶段,距离实际应用于日常生活中还有一定的距离,尚不能完全体现出电话遥控方式的半双工通信的特点。针对这一特点,本文进行了较大的改进,采用单片机实现智能控制,通过不同的提示音使操作者对于受控对象的工作状态的信息了如指掌,以指示操作者对受控对象进行所需操作,从而使得产品达到交互式与智能化。本作品的各项标准以及各种电器的借口都严格遵循国家有关标准,为将来的产品化提供良好的基础【1】。电话远程控制系统接收操作方发送的DTMF信号,通过解码芯片对其进行解码,中央处理单元采集解码后的信号进行处理,因为电话远程控
9、制系统通常工作在无人的环境中,所以应该具有自动摘机、自动挂机以及复位等功能;为了满足智能化需求,该系统采用AT89S51作为中央处理器。另外,该系统的正常工作离不开电源供电电路、驱动电路等辅助电路。通过分析可知,系统主要由振铃检测电路、自动摘挂机电路、DTMF双音频解码电路、中央处理单元AT89S51、电器控制驱动电路等组成。第二章 系统设计可行性分析2.1 总体设计分析电话远程控制系统使用单片机构成主要控制部分,主要的信息处理,接收各种形式的操作指令,并对各种信息进行记录均由其完成;接口电路则提供单片机与电话之间的外部接口。包括铃流检测、摘挂机控制、忙音检测、双音频DTMF识别等。 本系统的
10、振铃检测、模拟摘挂机、双音频解码等接口电路都具有很强的实用性。通过最简单的、最可靠的电路芯片实现完善的功能,此外,系统还可以扩展增加很多功能,因此具有很好的市场前景。系统并联在电话机的两端,所以不会影响到电话的正常使用。用户使用异地电话拨通与系统并联的电话机,通过市局交换机向电话发出振铃信号,此时,振铃检测电路将会检测到振铃信号,并将该信号送给系统的中央控制单元,当装置检测到四次振铃,也就是在四次响铃后无人接电话,模拟自动摘机,进入密码检测,如果密码错误,模拟自动挂机,只有在输入正确的密码后才能选择被控制的电器,然后对电器进行开或者关的控制,用户按键产生的信号经双音多频DTMF(Dual To
11、ne Multi-Frequency)解码电路解码后,送入中央控制单元,中央控制单元根据解码的结果通过驱动电路进行相应的动作,完成操作后返回,这是自动方式;2.1.1 系统总体设计分析根据电话远程智能遥控系统的具体设计要求:通过电话网对异地的电器实现控制(开/关);控制器可以实现自动模拟摘挂机;控制器设置密码校验;设计的此系统要求具有如下的功能模块:自动摘挂机;振铃音检测、计数;双音频信号解码;密码校验;控制电器开关输入信息分析;根据电话机和交换机发出的不同信号指令以及电话线各种状态的不同要求,结合实际情况对具体的单元功能模块作出软件或硬件上的不同分工,具体如下: 来电或者按键时,交换机会发出
12、一个交流信号,将该交流信号进行耦合隔直处理以后可输出一个方波,单片机可检测信号音在一秒内的脉冲次数,这样脉冲频率就可以计算出来,如此便可识别出信号音,从程序的结构设计上和系统的可靠性分析,最后决定选用硬件来解决双音频信号解码和振铃音检测这两个功能模块。必须使用具体的硬件电路来实现自动摘挂机和电器的控制。 使用软件编程方式完成密码比对、振铃音计数、输入信息分析等功能模块要比硬件电路完成来得简单,实现也很容易,所以通过编程实现。综上所述,本设计的振铃信号检测、控制电器、双音频解码、自动摘挂机等功能模块采用硬件电路实现。而振铃音计数、信息分析、密码校验等功能模块则采用软件编程完成。2. 2 总体方案
13、为完成设计要求,实现控制系统的功能,本文采用模块化设计。以AT89S51单片机为核心,由电话通过网络经由DTMF解码后把控制信息送到单片机,控制相应动作,从而实现它的电话远程控制功能。它由话路系统和控制系统两大部分构成。其中,话路系统包括所有的提供电话接续任务的终端和交换设备,尽量选择市场上已经有的成熟的集成电路芯片。而控制系统的作用是在需要的时候接通话路,提供语音信号传送的通路。系统框图如图2-1所示。单片机:主要工作是进行密码校对、控制摘挂机、接收控制数据和输出控制。DTMF解码电路:专门将控制机发送的DTMF信号进行译码工作,将控制机发出的控制信号译为对应的9、*、#、A、B、C、D等二
14、进制数。电话接口电路:作为与电话网络连接的端口,包含振铃电路等,将控制机传来的音频信号传给解码电路,并可以将控制器提示音反馈至控制机。输出电路:作为控制输出及电话摘机。密码存储器:失电保护用户密码。控制电话机:作为控制操作的平台,通过电话的数字按键输入数据经程控交换机传送至控制器。图2-1 系统框图本系统选择了由Atmel公司生产的AT89S51单片机作为核心控制芯片,它的引脚如图2-2所示:AT89S51单片机引脚功能介绍:单片机共有40个引脚,它们可以大致分为4类:电源、时钟、控制以及I/O引脚。1、电源:(1)VCC-芯片电源,接+5V;(2)GND-接地端;2、时钟:XTAL1、XTA
15、L2晶体振荡电路反相输入端和输出端。3、控制线:共有4根控制线:(1)ALE/PROG:地址锁存允许/片内EPROM编程脉冲;ALE功能:用来锁存P0口送出的低8位地;PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。(2)PSEN:外ROM读选通信号;(3)RST/VPD:复位/备用电源;RST(Reset)功能:复位信号输入端;VPD功能:在Vcc掉电情况下,接备用电源。(4)EA/Vpp:内外ROM选择/片内EPROM编程电源;EA功能:内外ROM选择端;Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。4、I/O线:AT89S5
16、1单片机中,共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。P0口:P0口为一个8位漏级开路双向I/O口,每个引脚都可以吸收8TTL产生的门电流。当P1口的引脚第一次写1时,被定义为高阻输入。P0能够作为外部程序数据存储器使用,它还可以被定义为地址/数据的第八位。在FLASH编程时,P0 口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在
17、FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,
18、可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的原因。 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为编程校验和闪烁编程接收部分控制信号。 作为输入口时I/O口有两种工作方式,也就是我们所说的读引脚与读端口。实际上在读端口时并不从外
19、部读入数据,而是读入端口锁存器的内容,然后输入到内部总线,经过一系列的变换或者运算后,再被写回到端口锁存器。只有宰读端口的时候才真正地把外部的数据读入到内部总线。上面图中的两个三角形表示的就是输入缓冲器CPU将根据不同的指令分别发出读端口或读引脚信号以完成不同的操作。这是由硬件自动完成的,不需要我们操心,1然后再实行读引脚操作,否则就可能读入出错,为什么看上面的图,如果不对端口置1端口锁存器原来的状态有可能为0Q端为0Q为1加到场效应管栅极的信号为1,该场效应管就导通对地呈现低阻抗,此时即使引脚上输入的信号为1,也会因端口的低阻抗而使信号变低使得外加的1信号读入后不一定是1。若先执行置1操作,
20、则可以将场效应管截止引脚信号直接加到三态缓冲器中,以实现正确的读入,由于在输入操作时还必须附加一个准备动作,所以这类I/O口被称为准双向口。89C51的P0/P1/P2/P3口作为输入时都是准双向口。接下来让我们再看另一个问题,从图中可以看出这四个端口还有一个差别,除了P1口外P0P2P3口都还有其他的功能。 RST:复位输入。当振荡器器件复位的时候,RST脚两个机器周期的高电平时间要得以保持。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程的时候,这个管脚用于输入编程脉冲。在平时,ALE端以恒定的频率周期输出正脉冲信号,此频率为振荡器频率
21、的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 EA/VPP:在EA管脚保持低电平时,在此期间外部程序存储器(0000H-FFFFH),不管内部是否有程序存储器。注意加密方式1时,EA
22、将内部锁定为RESET;当EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:内部时钟工作电路的输入及反向振荡放大器的输入。 XTAL2:来自反向振荡器的输出【2】。图2-2 AT89S51引脚图第三章 硬件单元电路设计3.1 硬件模块本作品中,为了完成部分功能模块,使用了大量的硬件电路,目的就是充分利用硬件电路的可靠性、稳定性,从而保证整体电路的稳定性,而且还使用了大量的抗干扰元器件,例如:光耦合器,去耦电容等,以此提高系统的抗干扰能力。3.1.1 振铃检测电路当电话机处在静默状态时,交换机为电话线路提供约48V的直流电压。但
23、是当用户被呼叫时,电话交换机会发来一个铃流信号。这个铃流信号为253伏的正弦波,它的谐铃失真不超过10%,电压有效值9015V。振铃的周期为5秒,即1秒送,4秒断。在振铃电路检测到振铃信号时,以四次铃响为准,即四次振铃后无人摘机,便由单片机控制自动模拟摘机,振铃检测电路设计如图3-1所示【3】。原理说明:C4、D1和R4共同组成振铃信号变换电路,它们使输入电压和电流不会太大,对后面的光电耦合器起保护作用。来电时,电话振铃信号通过电容C4隔直、D1稳压二极管、R4限流电阻输入至光电耦合器4N25的输入端,光电耦合器4N25的主要作用是隔离作用,光电耦合器是一种电信号的耦合器件,它一般是将发光二极
24、管和光敏三极管的光路耦合在一起,输入和输出之间不可共地,输入电信号加于发光二极管上,输出信号由光敏三极管取出。在实际中,电话静默时,LED6持续发光,但是电话来电时,LED6会持续闪烁,但是LED6接地使得电压的变动范围缩小,P3.4的电平在0-2.1V之间变动,导致T0口不能准确的计数,所以在调试中不得不去掉该指示灯。本单元元器件列表:C4为隔直电容,因为是过滤直流,滤出低频信号,而且振铃信号的电压还比较高,因此选取10F耐压100V的瓷片电容;R4是4N25的限流电阻,取33 k;D1为稳压二极管,选取1N4001;U3选取光电耦合器4N25;R3取10 K;LED6为振铃指示灯,选取黄色
25、5mm发光二极管;反向器由74LS04中的二组反向器组成,起整流作用;图3-1 振铃检测电路3.1.2 模拟摘挂机电路设计主要思路:国家对电话机的摘机有着明确的标准:不管是什么电话机,摘机状态的直流电阻都应该300,有“R”键的电子电话机的摘机状态直流电阻应350。在挂机状态下,其漏电流5A。当用户摘机时,通过叉簧为电话机接上约200的负载,以使得电话线回路流过大约30mA的电流。当交换机检测到该30mA电流后就会停止发送铃流,并将线路电压变为8-12V的直流电压,完成接续【4】。根据有关技术指标,模拟摘挂机电路设计如图32所示,模拟摘挂机电路主要由一个光电耦合器开关电路控制继电器的开关,继电
26、器串联一个200电阻,并接入电话线两端。当对振铃技术满4次时,单片机把P3.1口变为低电平,使得三极管基极电压改变,从而导通三极管,此时,继电器两端加上5V电压,继电器导通,200电阻并联在电话机两端,使得回路电流变大,完成电话线路的接通,整个电路实现了模拟摘机,其中D2二极管起反向保护的作用,在继电器断开的时候不会被反向电流烧坏。LED7为摘机指示灯。本单元元器件列表:R5是摘机指示灯限流保护电阻,取200,LED7是摘机指示灯,取5mm绿色发光二极管;R7是三极管限流电阻,取1k;D2二极管是起继电器反向保护的作用,取4001;J1是继电器控制开关,取JRC 4001F(DC5V);R6是
27、摘机电阻,取200;PNP三极管取2N3906;图3-2 模拟摘挂机电路3.1.3 双音解码电路利用声音频率的不同音调来传送按键信号以取代直接拨号脉冲的方法叫做DTMF技术。DTMF由两组频率信号叠加构成:低频组(697Hz941Hz)和高频组(1209Hz1633Hz)。设v(t)为DTMF信号,vl(t)和vh(t)分别代表选自低频组和高频组的两个信号,它们之间的关系满足v(t) = vl(t) + vh(t) = Asinlt + Bsinht。低频组和高频组中都有并且只有4个独立的音调,这4个音调是依据它们之间的谐波不相关来选择的,它们的互调制信号对主信令的影响最小。DTMF信号共有1
28、6(24)种组合,其中6种组合(#、*、A、B、C、D)用做特别的信令,剩余10种组合则分别代表数字0到9。电话键盘按键与DTMF信号的对应关系在CCITT和我国国家标准中都有明确规定,如表31所示。表31 电话键盘按键与DTMF信号的对应关系电话键盘按键高频组(Hz)1209133614771633低频组(Hz)697123A770456B852789C941*0#D解码电路是整个设计的关键,它的工作情况直接决定了系统的可靠性只有在解码电路可靠的情况下,用户输入的控制指令才能被单片机识别并完成相关控制。在翻阅了大量的文献资料后,发现比较经常使用的一种解码方法是采用电话专用的双音频解码芯片完成
29、输入双音频信号的解码。通过专门使用的集成电路的解码以后(使用集成电路不但可靠性强,而且外围电路简单),信号即可转换为相应的码制信号,这样,单片机就可以直接读取。普遍使用的电话双音频解码芯片有MT8888、MT8880、MT8870等,在反复的论证比较以后,最后决定采用双音频解码集成芯片MT8870来完成此功能模块。如图3-3是MT8870 音调译码器(Tone Decoder),它由MITEL 公司开发生产,是一颗常用复频译码IC,图中是一个完整的DTMF 接收器,这个电路可以准确的接收DTMF 信号。它接收了DTMF 信号之后,内部将信号分成高频带和低频带,并把分析后的信号送至数字译码器,然
30、后将信号输到数字译码器中,以解出按键值,接下来将解出的按键值通过四条线(Q1、Q2、Q3、Q4)以二进制的方式输出到外部共享Bus 上,其MT8870 接脚说明如表3-1,内部结构如图3-3。需要注意的是,当MT8870芯片 解出一个按键值并输出到外部时,它的CID接脚会从低态升为高态,经过一段时间以后再降为低态,因此,我们可以利用CID脚电平变化的特点,当侦测到此脚有讯号时便马上将Q1-Q4 接脚所产生的值读入CPU,然后进行控制【5】。图3-3 MT8870音调译码器MT8870的输出代码(Q8Q4Q2Q1)与电话键盘上按键的对应关系如表3-2所示:表3-2 MT8870输出代码与键盘对应
31、关系按键输出代码按键输出代码按键输出代码按键输出代码Q8Q4Q2Q1Q8Q4Q2Q1Q8Q4Q2Q1Q8Q4Q2Q110 0 0 150 1 0 191 0 0 1A1 1 0 120 0 1 060 1 1 001 0 1 0B1 1 1 030 0 1 170 1 1 11 0 1 1C1 1 1 140 1 0 081 0 0 01 1 0 0D0 0 0 0用户在远端按键以后,系统接收到的DTMF信号将经过耦合电容隔直、滤波,此后MT8870会接收并对其进行硬件译码,输出的四位二进制数据通过Q1/Q2/Q3/Q4四个口连接到AT89S51单片机的P1.0P1.3口上, MT8870接收
32、到有效的DTMF信号,在解出正确的BCD数据以后,CID端会升为高电平,CPU收到此信号后即可取走数据。CPU把P1口数据读入,然后屏蔽掉高四位,并把读入的数据保存在内部寄存器R7单元中,之后对读入的数据进行分析判断,从而得到远程用户输入的命令【6】。原理简介:电路采用MT8870芯片作为双音多频DTMF信号解码芯片。MT8870的连线如图34所示,其中,接在电源处的电容的作用是抗干扰。在MT8870的实际应用中,存在这样一个问题:MT8870的使能控制端不允许中断时,将关闭MT8870的CID端中断。有效的解决方法是,把CID端接入非门的一端输入,非门的另一输入端则接到不定电平端P即可。对C
33、ID的有效控制(即中断开放)为,EN=1则P3.2/INT0中断允许;EN=0时则P3.2/INT0中断关闭。把IN+与Vref相连,通过IN-管脚接收电话机发送过来的双音多频脉冲信号,双音多频信号先经过内部的拨号新滤波器,在滤除了拨号音信号后,经过前置放大电路的放大处理以后送入到双音频滤波器中,先把双音频信号按低音频信号、高音频信号分开,然后再经幅度检测器、高低群滤波器送至译码电路输出,经过一些列的数学运算后,把解码后相对应的8421码通过输出端(1114脚)输出数据。MT8870芯片的输出数据端Q1Q4连接到AT89S51芯片的P1口的P1.0P1.3,单片机P1口的P1.4P1.7已经与
34、0处理,所以解码芯片输出的4位代码有效并且能被单片机识别。MT8870输出代码与键盘对应关系如表3-2,其中,A,B,C,D 4个按键常被当作R/P,REDIAL,HOLD,HANDSFREE等功能使用。需要特别注意的是,对于“0”号码,MT8870输出的8421码是“1010”,而并非是“0000”;另外,按键“#”、“*”,在MT8870中输出的8421码分别为“1100”和“1011”。MT8870的CID有效端经施密特反相器后接AT89S51的INT0引脚,以确保单片机AT89S51可以获取有效的数据。当MT8870获取有效双音多频信号后,CID引脚的电平由低变高,再反相为低,INT0
35、引脚检测到以后,启动外部中断,指示P1口接收有效二进制代码。而电话线路杂音、人们的语音信号等无效的双音频信号是不会引起MT8870的CID端变化的。本单元元器件列表:IC1是双音频解码芯片,选取MT8870;变压器选择1:1音频变压器R10和C6组成滤波电路,R10和R9组成放大电路,其中电容C6、C7均选择0.1u,R9取220K,R10取33K;芯片外部晶振Y2选择3.579MHz;C5选取0.1F;R8是输出平衡电阻,选取100K;反向器选取74LS04的一组反向器; 图3-4 双音多频解码电路3.1.4单片机外围电路电源:单片机使用的电源是+5V电源,其中正极接Vcc(40引脚),负极
36、(地)接GND(20引脚)。振荡电路:一般采用外接晶振的方法为时序电路单片机提供脉冲信号,使得单片机能够正常工作。外接晶振接入XTALI、XTALZ(18、19脚)。有三点问题需要说明: (1)两个瓷片电容C2和C3在20至3OuF,与石英振荡器Xl组成时钟电路,为单片机提供一个频率为12M的稳定时钟;(2)晶振频率可以选用12MHz、11MHz、6MHz,在本设计中采用了12MHz的金属外壳石英晶体振荡器;(3)起振后第18个引脚会产生一个约为3V的正弦波。复位电路:任何单片机都需要有个复位的过程,然后才能正常工作,复位需要两个机器周期(约5ms)的时间。复位电路如图3-5(图中电容C1的两
37、端并联开关,实现手动复位)。图中电阻和电容Cl组成按键复位电路,在按下键的时候,会有一个大于两个机器周期的复位信号产生,为单片机提供一个高电平复位信号至RST引脚,使单片机复位。电阻R2选取l00K。电容Cl选用1u的电解电容。EA引脚(片内程序存储器选用端):当机器复位后,PC指针可能指向片外ROM 的0000H单元或者片内ROM的0000H单元,这取决于EA引脚是接低电平(访问外部ROM)还是高电平(访问内部ROM)。EA引脚需要接到电源正极。图3-5单片机外围电路原理图第四章 软件设计4.1 软件模块经过分析比较,决定选用AT89S51作为控制的单片机芯片,AT89S51的详细介绍参考2
38、-2,在此不再赘述。系统软件主要功能如下:系统身份认证:这个功能的设定,是为了保证只有合法用户才能够操作系统,电话远程控制系统开始工作以后,远程用户必须先输入密码,只有系统确认密码正确后才具有操作权限并对系统进行操作。4.1.1 信号音检测本单元可以使用AT89S51的两个计数器的外部中断方式来实现对不同信号音的计数。4.1.2 密码检测本单元可以在系统初始化的时候,把密码放在在单片机内部存储器的一块空间内。再用户输入密码的过程中,单片机把接收到的密码写到另外的一块空间内,然后利用减法运算循环比较密码是否正确,这样就可以实现密码检测的功能了。4.2 软件设计本系统的软件设计主要分为以下几块:系
39、统初始化、振铃检测计数、控制摘挂机、双音频信号分析处理、密码比对、控制电器等部分组成。每个功能模块对于整体设计都是非常重要的,单片机AT89S51通过软件程序才能很好的对外部的信息进行采集、分析、决策和执行。下面就整体设计以及每个单元功能模块分别进行说明。整体流程图如41图所示:图4-1 系统流程图4.2.1 系统完整程序ORG 0000H;从0000H执行主程序LJMP MAIN;跳转到主程序ORG 0003H;INT0中断入口为0003HLJMP TT1;有中断则跳转到TT1ORG 000BH;T0中断入口为000BHLJMP TT0;T0有中断则跳转到TT0ORG 001BH;T1中断入
40、口为001BHLJMP ITIME1;T1有中断则跳转到ITIME1ORG 0100H;从0100H执行主程序MAIN: ANL P1,#0FH;将P1口高4为清0MOV R4,#00H;将R4设为标志,初始标志为0 MOV R5,#05H;密码设置为5位MOV TMOD,#06H;T0计数器模式,方式2 MOV TH0,#09BH;计数为100次 MOV TL0,#09BH;计数为100次MOV IE,#83H;开T0和INT0中断SETB TR0;启动T0计数 SETB IT0;INT0为负边沿触发 LOOP:SJMP $;等待中断TT0: CLR P3.1;振铃4次后自动摘机 MOV r
41、3, #0c8h;MOV TMOd,#016h;T1设置为计数器模式,工作方式1,T0为计数器模式,工作方式2MOV TH1,#3CH;设置TH1为03CHMOV TL1,#0B0H;设置TL1为0B0HSETB ET1;开T1中断SETB TR1;启动计数器T1RETITT1:CLR EA;关闭所有中断 PUSH PSW; PUSH ACC; CJNE R4,#01H,PASSWORD;标志如果不是1,跳转到PASSWORD比对密码ANL P1,#0FH;标志为1,将P1口高4为清0 MOV A,P1;将按键键值写入A中CJNE A,#01H,LOOP1;键值若不是1,跳转到LOOP1比较C
42、PL P2.2;键值为1,将1电器开或者关 JMP QUITLOOP1:CJNE A,#02H,LOOP2;键值若不是2,跳转到LOOP2比较CPL P2.3;键值为2,将2电器开或者关 JMP QUITLOOP2: CJNE A,#03h,QUIT;键值若不是3,跳转到QUITCPL P2.4;键值为3,将3电器开或者关 JMP QUITPASSWORD:DJNZ R5,SAVEKEY;密码比对完,则跳转到SAVEKEY MOV A,034H;将034H单元中的密码写入A CJNE A,#01H,PASS_ERR;第一位密码错误就跳转到PASS_ERR MOV A,033H;将033H单元中
43、的密码写入A CJNE A,#02H,PASS_ERR;第二位密码错误就执行PASS_ERR MOV A,032H;将032H单元中的密码写入A CJNE A,#03H,PASS_ERR;第三位密码错误就执行PASS_ERR MOV A,031H;将031H单元中的密码写入A CJNE A,#04H,PASS_ERR;第四位密码错误就执行PASS_ERR CLR P2.0;密码全部正确,绿灯亮 SETB P2.1;密码错误指示灯不亮 MOV R4,#01H;将标志设为1 MOV R5,#05H;密码设置为5位 JMP QUIT SAVEKEY: MOV A,R5;把R5中的数据写入A ADD
44、A,#030H; MOV R0,A MOV A,P1 MOV R0,A JMP QUITPASS_ERR: MOV R5,#05H ;将密码设置为5位 MOV R4,#00H ;将标志改为0 CLR P2.1;密码错误,红灯亮 SETB P2.0;绿灯灭 SETB P3.1;自动挂机QUIT: POP ACCPOP PSW LCALL DELAY MOV r3, #0c8h;MOV TMOd,#016h;T1设置为计数器模式,工作方式1,T0为计数器模式,工作方式2MOV TH1,#3CH;设置TH1为03CHMOV TL1,#0B0H;设置TL1为0B0HSETB ET1;开T1中断SETB
45、 TR1;启动T1计数SETB EA;开所有中断RETIITIME1: DJNZ R3 , opt; setb p3.1;无操作延时后,自动挂机 MOV R5,#05H ;密码设置为5位 MOV R4,#00H ;标志设为0 setb P2.1;灭掉红灯 setb P2.0 ;灭掉绿灯clr ea;关闭所有中断clr tr0;T0停止计数MOV TMOD,#06H;T0计数器模式,方式2MOV TH0,#09BH;计数次数设为100次 MOV TL0,#09BH;计数次数设为100次MOV IE,#83H;开T0和INT0中断SETB TR0;启动T0计数器opt: MOV TH1,#3CH MOV TL1,#0B0H RETIDELAY:;延时25m