资源描述
基于单片机控制的多功能计时器系统的设计与实现
第一章 系统的总体设计
1 . 1功能要求
本系统要求能能完成电子时钟显示,调整,节能运行,电子秒表记数等多种功能,由按键电路或遥控电路完成功能的设置,秒表/时钟计时器要求用六位LED数码管显示时、分、秒,以24h(小时)计时方式。使用按键开关或遥控开关可实现时分调整、秒表/时钟功能转换、省电(关闭显示)等功能。
1 . 2方案论证
为了实现LED显示器的数字显示,可以采用静态显示法和动态显示法。由于静态显示法需要数据锁存器等硬件,接口复杂一些。考虑时钟显示只有六位,且系统没有其它复杂的处理任务,所以决定采用动态扫描法实现LED的显示。单片机采用易购的AT89C51系列,这样单片机可具有足够的空余硬件资源实现其它的扩充功能,如考虑到要使用电池供电的话,则可采用LV系列单片机。硬件系统的总体构成框架如图1所示。
图1 单片机控制的多功能计时器系统的设计总体框图
1 . 3系统总体设计
本单片机控制的多功能计时器系统,采用单片机作为控制核心,具有控制灵活,简单可靠,造价便宜等诸多优点。单片机虽然是一个五脏俱全的计算机,但由于本身无开发能力,必须借肋开发工具来开发应用软件以及对硬件系统进行诊断。因此,我们要研制一个较完整的单片机产品时,必须完成以下几步工作:
硬件电路设计、组装、调试
应用软件的编制、调试
应用软件的链接调试、固化、脱机运行(即脱离开发装置)。
本单片机控制系统的开发过程包括总体设计、硬件设计、软件设计等几个阶段,但各阶段不是绝对分开的,有时是交叉进行的。
本系统在设计上特点有如下所示
1) 系统硬件结构结合应用软件方案一并考虑。因为硬件结构与软件设计方案会产生相互影响,我们考虑的原则是:软件能实现的功能尽可能由软件来实现,以简化硬件结构。但必须注意如用软件来实现的硬件功能,其响应时间要比直接用硬件来实现花的时间长,而且占用CPU时间。因此,选择软件方案时,要考虑到这此因素。
2) 整个系统中相关的器件要尽可能做到性能匹配。
3) 可靠性及抗干扰设计是硬件系统设计不可缺少的一部分,它包括芯片、器件选择、去耦滤波、印刷电路板布线、通道隔离等。
4) 单片机外接电路较多时,必须考虑其驱动能力。驱动能力不足时,系统工作不可靠,解决的办法是增加驱动能力,增设线驱动器或者减少芯片功耗,降低总线负载。
本电路的硬件设计包括:加1电路、减1电路、复位电路、振荡电路与驱动电路、显示电路等。
在完成各个单元电路的设计与调试后,我们与软件系统进行了联调,且达到了一个较为理想的结果。单片机控制的多功能计时器系统总体开发与设计的流程图
如图2所示。
图2单片机控制的多功能计时器系统总体开发与设计的流程图
第二章 系统硬件电路设计
2 . 1硬件系统设计应考虑的问题
本单片机控制的多功能计时器系统在硬件系统设计上主要考虑下列几点:
(1) 尽可能选择典型电路
(2) 系统的扩充与外围装置,应充分满足应用系统的要求,并留一些扩充槽,以便进行二次开发。
(3) 硬件结构应结合应用软件一并考虑。软件有执行的功能尽可能由软件来执行,以简化硬件结构。但必须注意,由软件执行硬件的功能,其响应时间比直接使用硬件要长,且占用CPU时间。
(4) 整个系统器件尽可能做到性能匹配。
(5) 可靠性及抗干扰设计是硬件设计极其重要的部分,包括器件选择、电路板布线、通道隔离等。
(6) 单片机微处理器外接电路较多时,必须考虑其驱动能力,驱动能力不足时,系统工作不可靠。解决办法是增加驱动能力,或减少IC功耗,降低总线负载。
2 . 2电路各部分硬件电路介绍
1)单片机控制的多功能计时器系统的设计总体框图如图3所示。
图3 单片机控制的多功能计时器系统的设计总体框图
2)控制核心采用目前较为流行的、且价格低廉的89C51为控制核心,主要包括:单片机电路、加1电路、减1电路、复位电路、振荡电路、数字驱动与显示电路,下面我们一一进行阐明。硬件电路原理图如图4所示。
图4 硬件电路原理图
2 . 2 . 1单片机AT89C51及其特点
本系统以单片机AT89C51为控制核心,AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
1.主要特性:
·与MCS-51 兼容
·4K字节可编程闪烁存储器
寿命:1000写/擦循环
数据保留时间:10年
·全静态工作:0Hz-24Hz
·三级程序存储器锁定
·128*8位内部RAM
·32可编程I/O线
·两个16位定时器/计数器
·5个中断源
·可编程串行通道
·低功耗的闲置和掉电模式
·片内振荡器和时钟电路
图4 89C2051引脚排列图和主要参数
2.管脚说明:
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在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口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚 备选功能
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口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
3.芯片擦除:
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
2 . 2 . 2振荡器电路
单片机振荡器电路如图所指示。
XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。如图(5)所示:
图(5)振荡电路
2 . 2 . 3复位电路:
MCS-51单片机的复位条件是在RST端出现正脉冲,并能保持10ms以上的高电平,其复位电路一般采用上电复位和开关复位两种形式,本系统复位如图6所示:
图6系统复位电路
2 . 2 . 4驱动与显示电路
1.缓冲器74LS244
本系统为了加大驱动显示能力采用74LS244作为驱动器,74LS244是一种三态输出的八缓冲器和线驱动器。
74LS244缓冲器主要用于三态输出的存储地址驱动器、时钟驱动器和总线定向接收器等。其管脚图如图7所指示,参数表如表174LS244是三态输出的八缓冲器,由2组、每组四路输入、输出构成。每组有一个控制端,由控制端的高或低电平决定该组数据被接通还是断开。
图 7 74LS244管脚排列图
2.2.5数码管显示电路
本系统数码管显示电路如图 所示,采用6个数码管,数码管管脚排列图如图所指示,在电子钟里能分别显示小时,分和秒,如13.26.21,在电子秒表中,分别显示,分,表和毫秒,如99.56.86
数码管管脚排列图
在本系统中,由于用到的LED显示器的位数较多时,为减少I/O口数目,简化电路,降低成本,我们在LED显示器采用动态显示方式,如图8所示。
动态LED显示器接口及工作原理 动态LED显示器的电路连接特点是将各位LED显示器的所有对应段线并联在一起,由一个8位I/O口控制输出字段码,而每位LED显示器的公共端(共阳极点或共阴极点)不直接接地或+5V电源,而是分别由另外的I/O口线控制(称为位选)。LED显示器的显示内容通过段码I/O口和位选I/O口的相互配合控制,以动态扫描显示的工作方式输出待显示的内容。我们通过软件程序系统,发出控制信号,用P2。0-P2。5动态控制各个三极管的导通,来达到动态扫描的效果。
图8
第三章 系统软件电路设计
3.1系统软件设计概述
在系统软件设计时,应根据系统软件功能要求,将系统软件分成若干个相对独立的部分,并根据它们的联系和时间上的关系,设计出合理的软件总体结构。通常在编制程序前先根据系统输入和输出变量建立起正确的数学模型,然后画出程序流程框图,要求流程框图结构清晰、简捷、合理,画流程框图时还要对系统资源作具体的分配和说明。编制程序时一般采用自顶向下的程序设计技术,先设计监控程序再设计各应用程序模块。各功能程序应模块化、子程序化,这样不仅便于调试、链接,还便于个性和移植。
在进行应用系统的总体设计时,软件设计和硬件设计应统一考虑,相结合进行。当系统的电路设计定型后,软件的任务也就明确了。下图为多功能计时器系统设计流程图及系统框图9:
开始
系统定义
软件结构设计
建立数学模型
绘制程序流程图
编写程序
汇编
在线仿真调试
程序是否有错
修改程序
固化程序
结束
图9 多功能计时器系统设计流程图
3.2)系统软件程序介绍
主程序
本设计中计时采有定时器To中断完成,其余状态循环调用显示子程序,当端口开按下时,转入相应功能程序。基主程序执行流程见图10
图10程序执行流程
2.显示子程序:
数码管显示的数据存放在内存单元70H~75H中。其70H~71H存放秒数据,72H~73H存放分数据,74H~75H存时数据,每一地真址单元内均为十进制BCD码。由于采用软件动态扫描实现数据显示功能,显示用十进制BCD码数据的对应段码存放在ROM表中。显示时,先取出70H~75H某一地址中的数据,然后查得对应的显示用段码,并从P0口输出,P2口将对应的数码管选中供电,就能显示该地址单元的数据值。为了显示小数点及“一”、“A”等特殊字符,在显示班级及计时时采用不同的显示子程序。
定时器T0中断服务程序:
定时器T0用于时间计时。定时溢,出中断周期可分设为50ms和10ms。中断进入后,先判断是时钟计时还是秒表计时,时钟计时累计中断20次(即1s)时,对秒计数单元进行加1操作,秒表计时每10ms 进行加1操作.时钏计数单元地址分别在70H~71H(秒)、76H~77H(分)和78H~79H(时),最大计时值为23时59分59秒.而秒表计数单元地址也在70H~71H(0.001毫秒) 、76H~77H(秒)和78H~79H(分),最大工业计时值为99分59.99秒。7AH单元内存放“熄灭符”数据(#0AH)。在计数单元中采用十进制BCD码计数,满60(秒)表功能时有100)进位,T0中断服务程序执行流程见图11
图11
T1中断服务程序
T1中断服务程序用于指示调整单元数字的亮闪。在时间调整状态下,每过0.3 s,将对应单元的显示数据换成“熄灭符”数据(#0AH)。这样在调整时间时,对应调整单元的显示数据会间隔闪亮。
调时功能程序
调时功能程序的设计方法是:按下P1.0口按键,若按下时间短于1s,则进入省电状态(数码管不亮,时钟不停);否则进入调分状态,等待操作,此时计时器停止走动。当再按下按钮时,若按下时间短于0.5s,则时间加1分;若按下时间长于0.5s,则进入[小]时调整状态。在[小]时调整状态下,当按键按下的时间长于0.5s时,退出调整状态,时钟继续走动。P1.1口按键在调时状态下可实现减1功能。
时钟/秒表功能程序
在正常计时状态下,若按下P1.1口按键,则进行时钟/秒表功能的转换,转换后计时从零开始。当按下P1.2口的按键时,可实现清、计时启动、暂停功能。
第四章 系统调试与调试及抗干扰设计
4 .1硬件调试
硬件调试时,可先检查印制及焊接的质量情况,在检查无误后,可通电检查LED显示器的点亮状况,若亮度不理想,可以调整P0口的电阻大小,一般情况下,取200Ω电阻即可获得满意的亮度效果。实验室制作时,可结合示波器测试晶振及P0、P2端口的波形情况,进行综合硬件测试分析。
我们对硬件电路进行了调试,主要包括:
(1) 在焊接前元器件要一一检查是否完好,在焊接过程中逐一检查电路是否接通。
(2) 管座、元件焊接完毕,还要仔细检查元件面各元件之间裸露部分有无相互接触现象,焊接面的各捍点间、焊点与近邻线有无连接,对布线密或未加阴处理的应注意检查,这此可能造成短路的原因。
(3) 在完成检查后,先空载上电(未插芯片),检查线路各管脚级插件的电位是否正常,特别是单片机管脚注上的各点电位(若有高压,联机调试时会通过仿真线进入仿真系统,损坏有关器件)。若一切下沉将芯片插入各管座,再通电检查各点电压是否达到要求,逻辑电平是否符合电路或器件的逻辑关系。若有问题,掉电后再认真检查故障原因。
4 .2软件调试
软件调试在Wave E6000编译器下进行,源程序编译及仿真调试应分段或以子程序为单位一个一个进行,最后可结合硬件实时调试。
系统调试包括硬件调试和软件调试。硬件调试的任务是排除系统的硬件电路故障,包括设计性错误和工艺性故障。软件调试是利用开发工具进行在线仿真调试,除发现和解决程序错误外,也可以发现硬件故障。
程序调试一般是一个模块一个模块地进行,一个子程序一个子程度地调试,最后联起来统调。利用开发工具的单步和断点运行方式,通过检查应用系统的CPU现场、RAM和SFR的内容以及I/O口的状态,来检查程序的执行结果和系统I/O设备的状态变化是否正常,从中发现程序的逻辑错误,转移地址错误以及随机的录入错误等。也可以发现硬件设计与工艺错误和软件算法错误。在调试过程中,要不断调整、修改系统的硬件和软件,直到其正确为止。联机调试运行正常后,将软件固化到EPROM中,脱机运行,并到生产现场投入实际工作,检验其可靠性和抗干扰能力,直到完全满足要求,系统才算研制成功。
4 .3系统抗干扰设计
在提高硬件系统抗干扰能力的同时,软件抗干扰以其设计灵活、节省硬件资源、可靠性好越来越受到重视。下面以MCS-51单片机系统为例,对微机系统软件抗干扰方法进行研究。
1 软件抗干扰方法的研究
在工程实践中,软件抗干扰研究的内容主要是: 一、消除模拟输入信号的嗓声(如数字滤波技术);二、程序运行混乱时使程序重入正轨的方法。本文针对后者提出了几种有效的软件抗干扰方法。
1.1 指令冗余
CPU取指令过程是先取操作码,再取操作数。当PC受干扰出现错误,程序便脱离正常轨道“乱飞”,当乱飞到某双字节指令,若取指令时刻落在操作数上,误将操作数当作操作码,程序将出错。若“飞” 到了三字节指令,出错机率更大。
在关键地方人为插入一些单字节指令,或将有效单字节指令重写称为指令冗余。通常是在双字节指令和三字节指令后插入两个字节以上的NOP。这样即使乱飞程序飞到操作数上,由于空操作指令NOP的存在,避免了后面的指令被当作操作数执行,程序自动纳入正轨。
此外,对系统流向起重要作用的指令如RET、 RETI、LCALL、LJMP、JC等指令之前插入两条NOP,也可将乱飞程序纳入正轨,确保这些重要指令的执行。
1.2 拦截技术
所谓拦截,是指将乱飞的程序引向指定位置,再进行出错处理。通常用软件陷阱来拦截乱飞的程序。因此先要合理设计陷阱,其次要将陷阱安排在适当的位置。
1.2.1 软件陷阱的设计
当乱飞程序进入非程序区,冗余指令便无法起作用。通过软件陷阱,拦截乱飞程序,将其引向指定位置,再进行出错处理。软件陷阱是指用来将捕获的乱飞程序引向复位入口地址0000H的指令。通常在EPROM中非程序区填入以下指令作为软件陷阱:
NOP
NOP
LJMP 0000H
其机器码为0000020000。
1.2.2 陷阱的安排
通常在程序中未使用的EPROM空间填0000020000。最后一条应填入020000,当乱飞程序 落到此区,即可自动入轨。在用户程序区各模块之间的空余单元也可填入陷阱指令。当使用的中断因干扰而开放时,在对应的中断服务程序中设置软件陷阱,能及时捕获错误的中断。如某应用系统虽未用到外部中断1,外部中断1的中断服务程序可为如下形式:
NOP
NOP
RETI
返回指令可用“RETI”,也可用“LJMP 0000H”。如果故障诊断程序与系统自恢复程序的设计可靠、 完善,用“LJMP 0000H”作返回指令可直接进入故障诊断程序,尽早地处理故障并恢复程序的运行。
考虑到程序存贮器的容量,软件陷阱一般1K空间有2-3个就可以进行有效拦截。
1.3 软件“看门狗”技术
若失控的程序进入“死循环”,通常采用“看门狗”技术使程序脱离“死循环”。通过不断检测程序循环运行时间,若发现程序循环时间超过最大循环运行时间,则认为系统陷入“死循环”,需进行出错处理。
“看门狗”技术可由硬件实现,也可由软件实现。 在工业应用中,严重的干扰有时会破坏中断方式控制字,关闭中断。则系统无法定时“喂狗”,硬件看门狗电路失效。而软件看门狗可有效地解决这类问题。
在实际应用中,采用环形中断监视系统。用定时器T0监视定时器T1,用定时器T1监视主程序,主程序监视定时器T0。采用这种环形结构的软件“看门狗”具有良好的抗干扰性能,大大提高了系统可靠性。对于需经常使用T1定时器进行串口通讯的测控系统,则定时器T1不能进行中断,可改由串口中断进行监控(如果用的是MCS-52系列单片机,也可用T2代替T1进行监视)。这种软件“看门狗”监视原理是:在主程序、T0中断服务程序、T1中断服务程序中各设一运行观测变量,假设为MWatch、T0Watch 、T1Watch,主程序每循环一次,MWatch加1,同样T0、T1中断服务程序执行一次,T0Watch、 T1Watch加1。在T0中断服务程序中通过检测T1Watch的变化情况判定T1运行是否正常,在T1中断服务程序中检测MWatch的变化情况判定主程序是否正常运行,在主程序中通过检测T0Watch的变化情况判别T0是否正常工作。若检测到某观测变量变化不正常,比如应当加1而未加1,则转到出错处理程序作排除故障处理。当然,对主程序最大循环周期、定时器T0和T1定时周期应予以全盘合理考虑。
2 系统故障处理、自恢复程序的设计
单片机系统因干扰复位或掉电后复位均属非正常复位,应进行故障诊断并能自动恢复非正常复位前的状态。
2.1 非正常复位的识别
程序的执行总是从0000H开始,导致程序从 0000H开始执行有四种可能:一、系统开机上电复位;二、软件故障复位;三、看门狗超时未喂狗硬件复位; 四、任务正在执行中掉电后来电复位。四种情况中除第一种情况外均属非正常复位,需加以识别。
2.1.1 硬件复位与软件复位的识别
此处硬件复位指开机复位与看门狗复位,硬件复位对寄存器有影响,如复位后PC=0000H, SP=07H,PSW=00H等。而软件复位则对SP、SPW无影响。故对于微机测控系统,当程序正常运行时,将SP设置地址大于07H,或者将PSW的第5位用户标志位在系统正常运行时设为1。那么系统复位时只需检测PSW.5标志位或SP值便可判此是否硬件复位。图12是采用PSW.5作上电标志位判别硬、软件复位的程序流程图。
图12 硬、软件复位识别流程图
此外,由于硬件复位时片内RAM状态是随机的,而软件复位片内RAM则可保持复位前状态,因此可选取片内某一个或两个单元作为上电标志。设 40H用来做上电标志,上电标志字为78H,若系统复位后40H单元内容不等于78H,则认为是硬件复位,否则认为是软件复位,转向出错处理。若用两个单元作上电标志,则这种判别方法的可靠性更高。
2.1.2 开机复位与看门狗故障复位的识别
开机复位与看门狗故障复位因同属硬件复位, 所以要想予以正确识别,一般要借助非易失性RAM或者EEROM。当系统正常运行时,设置一可掉电保护的观测单元。当系统正常运行时,在定时喂狗的中断服务程序中使该观测单元保持正常值(设为 AAH),而在主程中将该单元清零,因观测单元掉电可保护,则开机时通过检测该单元是否为正常值可判断是否看门狗复位。
2.1.3 正常开机复位与非正常开机复位的识别
识别测控系统中因意外情况如系统掉电等情况引起的开机复位与正常开机复位,对于过程控制系统尤为重要。如某以时间为控制标准的测控系统,完成一次测控任务需1小时。在已执行测控50分钟的情况下,系统电压异常引起复位,此时若系统复位后又从头开始进行测控则会造成不必要的时间消耗。因此可通过一监测单元对当前系统的运行状态、系统时间予以监控,将控制过程分解为若干步或若干时间段,每执行完一步或每运行一个时间段则对监测单元置为关机允许值,不同的任务或任务的不同阶段有不同的值,若系统正在进行测控任务或正在执某时间段,则将监测单元置为非正常关机值。那么系统复位后可据此单元判系统原来的运行状态,并跳到出错处理程序中恢复系统原运行状态。
2.2 非正常复位后系统自恢复运行的程序设计
对顺序要求严格的一些过程控制系统,系统非正常复位否,一般都要求从失控的那一个模块或任务恢复运行。所以测控系统要作好重要数据单元、参数的备份,如系统运行状态、系统的进程值、当前输入、输出的值,当前时钟值、观测单元值等,这些数据既要定时备份,同时若有修改也应立即予以备份。
当在已判别出系统非正常复位的情况下,先要恢复一些必要的系统数据,如显示模块的初始化、片外扩展芯片的初始化等。其次再对测控系包括显示界面等的恢复。之后再把复位前的任务、参数、运行时间等恢复, 再进入系统运行状态。
应当说明的是,真实地恢复系统的运行状态需 要极为细致地对系统的重要数据予以备份,并加以数据可靠性检查,以保证恢复的数据的可靠性。
其次,对多任务、多进程测控系统,数据的恢复需考虑恢复的次序问题,笔者实际应用的数据恢复过程流程图如图13所示。统的系统状态、运行参数等予以恢复,
图13 系统自恢复程序流程图
图中恢复系统基本数据是指取出备份的数据覆盖当前的系统数据。系统基本初始化是指对芯片、显示、输入输出方式等进行初始化,要注意输入输出的初始化不应造成误动作。而复位前任务的初始化是指任务的执行状态、运行时间等。
3 结束语
对于软件抗干扰的一些其它常用方法如数字滤波、RAM数据保护与纠错等,限于篇幅,本文未作讨论。在工程实践中通常都是几种抗干扰方法并用,互相补充完善,才能取得较好的抗干扰效果。从根本上来说,硬件抗干扰是主动的,而软件是抗干扰是被动的。细致周到地分析干扰源,硬件与软件抗干扰相结合,完善系统监控程序,设计一稳定可靠的单片机系统是完全可行的。
4 .4性能分析
按照设计程序分析,LED显示器动态扫描的频率约为167Hz,实际使用观察时完全没有闪烁。由于计时中断程序中加了中断延时误差处理,所以实际计时的走时精度非常高,可满足多种场合的应用需要;另外上电时的班级、学号、制作日期滚动显示可以方便学生设计作业的辩认区别。
系统程序清单
中断入口程序
主程序
1s计时程序
T0中断服务程序
秒表计时程序
闪动调时程序
T1中断服务程序,用作时间调整时调整单元闪烁指示
加1子程序
分减1子程序
时减1子程序
清0程序
时钟调整程序
显示程序
ST子程序,上电时显示年月班级用,采用移动显示
延时程序
控制源程序清单
以下是秒表/时钟计时器的控制源程序
AT89C51秒表/时钟程序
定时器T0、T1溢出周期为50ms(10ms),T0为调整时闪烁用,P1.0、P1.1、P1.2为调整按钮,P0口为字符输出口,采用共阳显示管。
中断入口程序
ORG 0000H 程序执行开始地址
LJMP START 跳到标号START执行
ORG 0003H驶 外中断0中断程序入口
RETI 外中断0中断返回
ORG 000BH 定时器T0中断程序入口
LJMP INTT0 跳至INTT0执行
ORG 0013H 外中断1中断程序入口
RETI 外断1中断返回
ORG 001BH 定时器T1中断程序入口
LJMP INTT1 跳至INTT1执行
ORG 0023H 串行中断程序入口地址
RETI 串行中断程序返回
主程序
START: LCALL ST 上电显示年月日及班级学号
MOV R0, #70H 清70H~7AH共11个内存单元
MOV R7, #0BH
Cldisp: MOV @R0, #00h
INC R0
DJNZ R7,CLdisp
MOV 20H,#00H 清20H(标志用)
MOV 7AH,#0AH 放入“熄灭符”数据
MOV TMOD,#11H 设T1、T1为16时器
MOV TL0,#0B0H 50定时初值(T0计时用)
MOV TH0,#3CH 50定时初值
MOV TL1,#0B0H 50ms定时初值(T1内烁定时用)
MOV TH1,#3CH 50ms定时初值
SETB EA 总中断开放
SETB ET0 允许T0中断
SETB TR0 开启T0定时器
MOV R4,#14H 1s定时用初值(50msX20)
START1: LCALL DISPLAY 调用显示子程序
JNB P1.0,SETMM1 P1.0口为0时,转时间调整程序
JNB P1.1,FUNSS 秒表功能,P1.1按键调时时作减1操作
JNB P1.2,FUNPT STOP,PUSE,CLR
SJMP START1 P1.0口为1时跳回START1
SETMM1: LJMP SETMM 转到时间调整程序SETMM
FUNSS: LCALL DS20MS
JB P1.1,start1
WAIT11: JNB P1.1,WAIT11
CPL 03H
MOV 70H,#00H
MOV 71H,#00H
MOV 76H,#00H
MOV 77H,#00H
MOV 78H,#00H
MOV 79H,#00H
AJMP START1
FUNPT: LCALL DS20MS
JB P1.2,START1
WAIT22: JNB P1.2,WAIT21
CLR ET0
CLR TR0
WAIT33: JB P1.2,WAIT31
LCALL DS20MS
JB P1.2,WAIT33
WAIT66: JNB P1.2,WAIT61
MOV R0,#70H 清70H~79H共10个内存单元
MOV R7,#0AH
CLEARP: MOV @R0,#00H
INC R0
DJNZ R7,CLEARP
WAIT44: JB P1.2,WAIT41
LCALL DS20MS
JB P1.2,WAIT44
WAIT55: JNB P1.2,WAIT51
SETB ET0
SETB TR0
AjmP START1
WAIT21: LCALL DISPLAY
AJMP WAIT22
WAIT31: LCALL DISPLAY
AJMP WAIT33
wait41: lcall display
ajmp wait44
WAIT51: LCALL DISPLAY
AJMP WAIT55
WAIT61: LCALL DISPLAY
AJMP WAIT66
;1s计时程序
T0中断服务程序
INTT0: PUSH ACC 累加器入栈保护
PUSH PSW 状态字入栈保护
CLR ET0 关T0中断允许
CLR TR0 关闭定器T0
JB 03H,FSS 标志为1转秒表处理程序(10ms定时)
MOV A,#0B7H 中断响应时间同步修正
ADD A,TL0 低8位初值修正
MOV TL0,A 重装初值(低8位修正值)
MOV A,#3CH 高8位初值修正
ADDC A,TH0
MOV TH0,A 重装初值(高8位修正值)
SETB TR0 开启定时器T0
展开阅读全文