技术中心
 
 

基于Proteus的自动拨号报警器仿真设计

   日期:2011-06-16     来源:互联网    作者:吴文忠 广东金融学院    
核心提示:摘要:利用嵌入式系统仿真软件Proteus实现了基于AT89C51单片机的自动拨号报警器仿真设计。详细分析自动拨号报警器的硬件设计原理,并
摘要:利用嵌入式系统仿真软件Proteus实现了基于AT89C51单片机的自动拨号报警器仿真设计。详细分析自动拨号报警器的硬件设计原理,并在Keil开发环境下设计了对应的驱动程序,在Proteus中完成了软、硬件的联合仿真调试,最后给出了仿真运行结果。通过Proteus软件的前期仿真,大大缩短了实际开发周期,降低开发成本,对于单片机应用系统、电子电路的开发和教学等都有较大的实用价值,且设计的电路及驱动程序对相应的实际应用系统具有一定的借鉴作用。
关键词:Proteus;自动拨号报警器;仿真设计;驱动程序

0 引言
Proteus VSM是英国Labcenter Electronics公司推出的一款基于标准仿真引擎Spice3F5的电路分析、实物仿真系统,是一款电子设计的教学平台、实验平台和创新平台,涵盖了电工电子实验室、电子技术实验、单片机应用实验室等的主要功能,其组合了高级原理布图、混合模式Spice仿真、PCB设计以及自动布线来实现一个完整的电子设计系统。Proteus软件可以仿真、分析各种模拟器件和集成电路,可以支持不同系列的单片机仿真,如51系列、PIC系列、AVR系列、摩托罗拉的68MH11系列等;Proteus提供了虚拟示波器、逻辑分析仪、信号发生器、计数器、电表、Virtual Terminal等虚拟仪器仪表供选择用,其虚拟系统建模(VSM)技术可以仿真基于微控制器的设计,包括其周边电路,甚至可以使用动画演示的外设模型(如LED/LCD显示、开关、按钮、RS 232终端、键盘等)与设计目标实时交互;它具备强大的调试工具,包括寄存器和存储器数据查询、断点和单步模式,并可以利用IAR C—SPY,KeilμVision和Matlab等软件进行源代码级联合调试,以求达到最好的仿真效果。本文利用嵌入式系统仿真软件Proteus实现了基于AT89C51单片机的自动拨号报警器仿真设计,具有开发周期短,成本低等特点,对于单片机应用系统、电子电路的开发和教学等都有较大的实用价值,且设计的电路及驱动程序对相应的实际应用系统具有一定的借鉴作用。

1 Proteus中自动拨号报警器设计
基于AT89C51单片机的自动拨号报警器硬件系统原理图如图1所示。该报警器由6个子模块组成,包括单片机最小系统模块、功率放大电路与模拟报警信号模块、LCD显示模块、键盘输入模块、I2C存储模块和拨号音频模块。 a.JPG
下面分析各个模块的设计原理:
(1)单片机最小系统模块。主要包括51系列单片机一块(AT89C51)、时钟电路(12 MHz晶振)与复位电路(包括上电复位与手动复位两种)。
(2)功率放大电路与模拟报警信号模块。由于单片机本身I/O口的驱动能力有限,直接接入电话网络会因驱动电流太小而使得信息无法传输出去,因此需通过功率放大电路增强其输出驱动力。功率放大电路采用一个NPN三极管与两个PNP三极管组成多级放大电路,其中NPN管采用的是共射放大,而两个PNP管则采用了共基放大的方式。模拟报警信号模块以8个开关模拟8路不同类型的报警输入,通过一个8路与非门后再接一个非门,当有任何一个按键按下时,INT0口均可获得产生中断的低电平,以此启动中断程序。同时8个开关再分别接入单片机I/0口P2,用以判断产生中断的报警类型。在实际应用中,模拟报警信号模块可以用8路不同的传感器电路代替,如:温度传感器探测火警、气体传感器探测有毒气体等。在仿真平台下,传感器较难应用,因此在设计中直接用开关来模拟。
(3)LCD显示模块。使用16×2的点阵字符型液晶LM016L,用以显示操作提示信息。1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同点阵字符图形,这些字符有阿拉伯数字、英文字母的大小写、常用符号和日文假名等,每1个字符都有1个固定的代码。用户在模块中写入适当的控制命令,即可完成清屏、显示、地址设置等操作。设计采用并连方式控制,LCD与单片机的通信接口电路采用直连方法。
(4)键盘输入模块:键盘采用Proteus自带的3×4电话机键盘模块,主要用来编辑修改电话号码与功能控制选择。
(5)I2C存储模块:该模块用于存储拨号的电话号码,数据量小。为节省I/O口,采用24CXX系列存储芯片,仅需占用2个I/O口(SDA,SCL)。
(6)拨号音频模块:电话拨号脉冲以及声音脉冲由单片机软件设置生成,由定时器控制脉冲的频率和占空比。电话机脉冲拨号的国家标准规定,脉冲断续比为(1.6+0.2):1或(2.0+0.2):1,当脉冲拨号速度(脉冲数/s)为10+1时,相邻两脉冲串的时间间隔大于等于500 ms。由此可以计算得出,脉冲拨号断、续时间间隔分别为:100×1.6/(1.6+1)≈61.5 ms和100-61.5=38.5 ms。在摘机状态时,电话机处于低阻态,国家标准规定的直流阻值小于等于300 Ω。

2 软件程序设计
2.1 主程序设计
系统主程序设计流程图如图2所示,主程序流程分为3个状态:号码输入状态,在存储器中已存有电话号码的情况下此步骤可手动跳过;等待状态,该状态是在警报开关关闭的时候系统所处的空闲状态,可按“#”重新进入号码输入状态,当警报开关打开时会自动跳进监控状态;监控状态,系统等待外部中断以做出相关处理。按“#”可以跳回到号码输入状态。在号码输入状态和等待状态,系统需要关闭中断,以避免中断信号对系统设置产生干扰。 b.JPG
2.2 中断子程序设计
中断子程序基本流程如图3所示。首先建立一个整形数组numi[],将号码位数k保存在numi[0]中,而电话号码则保存在numi[1]~numi[k]中;然后将数组numi[]的前k+1位一次性发送至I2C芯片。读取的时候,从读取数据首地址一次性读取出16位数据(电话号码最多14位),将其保存在整形数组phn[]中,拨号的时候从phn[1]开始,一共读phn[0]次,这样不但可以准确的传输电话号码并进行拨号,同时对I2C芯片的
读/写仅需1次,降低了读写过程中未知错误发生的概率。
该设计共有8路外部模拟报警信号输入,其警报信号定义如表1所示。将长音视为1,短音视为0,则警报内容可译为报警信号源代码的BCD码低三位,以此作为报警类型标识。 c.JPG
2.3 LCD显示子程序
LCD显示子程序包含有多个子函数,包括:读LCD状态指令函数recom()、测试忙函数busytest()、写LCD指令函数wrcomn()、LCD清屏函数clrscr()、初始化LCD函数initled()、光标定位函数setpos();写单字节数据函数writedata();对于某一行的写入字符串函数wrll()与wr21()。其中,读/写指令、测试忙、清屏、光标定位、写单字数据均是按照LCD原理命令字进行操作。LCD的初始化包括复位设置、清除显示、地址归位、显示开关、游标设置、读/写地址设置等,LCD中所有数字和字符都可以通过它的ASCII码来访问显示。
2.4 拨号音频模块程序设计
在拨号程序设计中关键要控制好定时器以实现准确的占空比脉冲,程序编写中,设置TMOD=0x11,定时器设置为操作模式1,当生成61.5 ms低电平脉冲时,TC=216-61.5 ms/1μs=4 036=0x0FC4,因此TH0=0x0F,TL0=0xC4;当生成38.5ms高电平脉冲时,TC=216-38.5ms/1μs= 27 036=0x699C,所以TH0=0x69,TL0=0x9C;当延时500 ms时,由于单片机定时器最大定时时间为61.5 ms(方式1),因此采取在一个循环次数为10的for循环中执行定时时间为50 ms的程序,TC=216-50 ms/1μs=15 536=0x3CB0,因此TH0=0x3C,TL0=0xB0。
音频模块程序设计是通过设定特定频率的正负脉冲序列,驱动扩音器播放出相应音调的声音,例如若设置单片机定时器1TH0=0xFB,TL0= 0x44,则脉冲周期约为2.424 ms,所发出的声音与音调“do”相似。在此不妨定义发长音时间为500 ms,发短音时间为100 ms。长短音信号相互组合成不同的警报信息可用来定义不同的报警类型。

3 调试与运行
在Proteus和Keil中进行相关的设置,可以让两者进行联调,联调可以在同一台计算机上进行,也可以在不同的计算机之间进行。通过Proteus与Keil的联调可以轻易做到在不使用硬件的前提下直接在仿真平台上进行实时仿真,对于系统的调试具有很大意义。实时仿真能降低调试的难度,更有利于设计中一些问题的解决以及BUG的发现。相比较于只能观看运行结果的系统来说,联调可以大大提高设计制作的效率。Pro-teus与Keil的联调需要用到Proteus下的一个动态链接库文件VDM51.DLL,用其作为Keil链接到Proteus的接口。
系统运行后,首先初始化系统,并显示系统信息,数秒钟的延时之后LCD将显示提示“是否输入新号码?”,若按“#”则进入号码输入界面。输入完毕后按“#”结束输入,如果输入错误则按“*”重新输入,若按“*”则进入等待状态,若报警开关未打开,则进入空闲状态,此时按“#”可以修改已存储的电话号码。若报警开关已经打开,则进入监控状态,此时按“#”依然可以修改之前存储的电话号码。若此时有外部报警信号进入,则进入中断程序,开始拨号。同时,可用电压探针探测到输出的拨号脉冲序列,如图4所示。根据脉冲拨号原理,数字1~9拨号脉冲个数与拨号数字相同,0的脉冲个数是10。 d.JPG
拨号完成会延时10 s,之后将会根据输入报警信号类型判断警报内容,若打开第六路报警信号开关,此时系统发出了长、长、短的警报信号。若将报警开关闭合,系统被挂起,解除报警信号,可模拟成报警器被人暂时关闭,并开始处理报警内容,如:火灾则灭火,毒气则通
风,盗窃则检查门窗物件等。报警信号解除后,程序跳出中断循环程序,返回到主程序的监控状态。

4 结语
本文给出了使用Proteus软件仿真自动拨号报警器实验的具体设计过程,采用模块程序设计,利用仿真软件Proteus及Keil C51联合调试程序。程序设计过程对每个模块先进行独立编程,调试通过之后再一起合并进行系统程序总调试。通过上述方式,学生完全可以通过Proteus软件实现单片机实验的仿真,并在较短的时间内完成单片机系统的软、硬件设计,形象生动地理解并掌握单片机技术。不仅弥补了硬件资源投入不足的弊端,还明显克服了实验箱教学中固定硬件资源导致实验内容固定的缺陷,极大地发挥了学生的主观能动性和创造性。
 
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢