《《C51单片机看门狗电路及程序设计方案》》由会员分享,可在线阅读,更多相关《《C51单片机看门狗电路及程序设计方案》(10页珍藏版)》请在金锄头文库上搜索。
1、C51单片机看门狗电路及程序设计方案院系:信息工程学院年级:2010级电子一班刘禹豪电子一班赵训虎电子二班邓启新引言在由单片机构成的微型计算机系统中,序的正常运行常常会因为来自外界的电磁场干而陷扰等原因而被打断,从而造成程序的跑飞,继入死循环。由此导致单片机控制的系统无法发生不续工作,造成整个系统的陷入停滞状态,程可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片或程序,俗称”看门狗(watchdog)(1)看门狗电路基本原理看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连*,该
2、I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。此处设计原理实际上为下文中硬件看门狗设计思路。(2)看门狗电路一般设计方式“看门狗”电路一般分为硬件看门狗与软件看门狗两种设计方式。硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是
3、说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位。如果出现死循环,或者说PC指针不能回来,那么定时时间到后就会使单片机复位。常用的WDT芯片如MAX813,5045,IMP813等,价格410元不等.只不过是用软件的方法实现(即利用单片机,以51系列为例:因在51单片机中可以对T1(或T0),当产生定时中断的时候对。当主程序运行至最后时对T0中断正常,如果没有发生变化软件看门狗技术的原理和硬件看门狗类似,内部定时器资源,通过编程模拟硬件看门狗工作方式)有两个定时器,在利用内部定时器资源来对主程序的运行进行监控时设定一定的定时时间(设定的定时值要小于主程序的运行时间)一个变量进行赋
4、值(此变量在主程序运行的开始已有一个初值)此变量的值进行判断,如果值发生了预期的变化,就说明则使程序复位。考虑到设计要求,本设计采用软件看门狗设计思路。看门狗电路整体设计思路根据设计要求,本设计利用C51单片机内部自带的定时器1进行编程,并配合少量电路实现“看门狗“电路功能。整个设计分为软件部分与硬件部分,如下:(1)软件部分设计原理:软件设计分为三部分:“看门狗“定时器设置程序、溢出中断服务程序和喂狗代码。1.1设计思路:1)在主程序开头,“看门狗“定时器设置程序设置定时器1计时50mso2)当定时达50ms时,定时器1产生溢出中断,溢出中断服务程序开始工作,将看门狗标志num加1。当num
5、的值等于100时,说明看门狗定时器已经计时5s,此时,单片机I/O端口P1.0输出高电平,对程序进行复位。3)在此过程中,喂狗代码将被穿插于程序中循环体末尾。当循环体结束时,喂狗代码执行,关闭定时器1、清空num并重新初始化定时器设置。若循环体进入死循环,喂狗代码无法执行,num将一直累加至100,此时程序复位。注:喂狗代码放置位置可根据num预计数值进行调整:当num门限值较小,即看门狗计数时间较短时,喂狗代码可放于程序中各循环体之后或均匀分布于整个主程序中。当num门限值较大,即看门狗计数时间较长时,喂狗代码可放于程序主循环体末尾。但是需注意看门狗计数时间必须长于正常工作时间,以免非正常复
6、位。1.2软件设计流程图:喂狗代码num+1yes复位1.3“看门狗“定时器设置程序:“看门狗“定时器设置程序对定时器1进行设置。设定时器1为工作方式1。设M为工作方式1下,定时器最大计数值,可知M=65536。所以,设定时器1的初值为X,贝U初值X与机器周期I机及定时时间T的关系为:(M-X)T机=T其中:T机=12个时钟周期=12/fosc。所以,定时器1的初值为:X=MT/T机因此,当T1工作于方式1,定时时间为50ms,时钟频率fosc=12MHz时,可知:X=M-T/T机=65536-50000/1=15536=3CB0H所以,“看门狗“定时器设置程序清单(c语言)如下:TMOD=0
7、x10;TL仁0xB0;TH1=0x3C;ET1=1;EA=1;TF1=0;TR1=1;/设置TMOD寄存器,定时器1设为方式1/设置定时器初值低8位/设置定时器初值高8位,设置为计时50ms开定时器1溢出中断/开总中断控制/定时器1溢出中断标志清零开定时器11.4溢出中断服务程序:溢出中断服务程序为定时器1溢出中断服务程序,每执行一次,num加1,并判断num是否达到100,即计时5s。若已达到5s,I/O口P1.0输出复位信号。溢出中断服务程序清单(c语言)如下:voidint_T1()interrupt3using3/定时器1溢出中断服务程序num+;if(num=100)/每溢出一次标
8、志加1/当标志等于100时,即计时5sP仁(0x01);/P1.0输出1.5喂狗代码:喂狗代码主要功能为暂时关定时器1,定时器1寄存器清零,看门狗标志num清零和重新开启定时器1.喂狗代码程序清单(c语言)如下:TR1=0;TL1=0xB0;TH1=0x3C;喂狗代码,关定时器1/重新设置定时器初值TF1=0;TR1=1;/定时器1溢出中断标志清零开定时器11.6完整测试程序清单完整测设程序分为两部分,以一个正向运行一次的流水灯程序和逆向无限循环流水灯程逆向无限循环流水灯序组成。在正向进行一次流水灯程序时,程序时,延时5s,看门狗复位单片机。看门狗代码不会复位单片机;完整测试程序清单(c语言)
9、如下:设置变量/声明delay函数#includereg51.h#ineludestdio.hunsignedinti,num;unsignedchartemp;voiddelay(unsignedintt);intmain()num=0;P仁(0x00);TMOD=0x10;TL1=0xB0;TH1=0x3C;看门狗复位标志/将P1口赋值为0/设置TMOD寄存器,定时器1设为方式1/设置定时器初值低8位ET1=1;EA=1;TF1=0;TR1=1;/设置定时器初值高8位,设置为计时50ms开定时器1溢出中断/开总中断控制/定时器1溢出中断标志清零开定时器1流水灯状态标志/流水灯程序(1)te
10、mp=0x01;for(i=0;i8;i+)/点亮P0口对应的LED点亮的LED灯前移一位P0=temp;delay(100);temp=1;TR1=0;TL1=0xB0;TH1=0x3C;/喂狗代码,关定时器/重新设置定时器初值TF1=0;TR1=1;/定时器1溢出中断标志清零开定时器1while(1)/流水灯程序(2)temp=0x80;/倒序,无限循环for(i=0;i=1;/喂狗代码TR1=0;TL1=0xB0;TH1=0x3C;TF1=0;TR1=1;num=0;return0;延时子程序voiddelay(unsignedintt)(registerunsignedintbt;fo
11、r(;t;t-)for(bt=0;bt255;bt+);P仁(0x01);定时器1溢出中断服务程序/每溢出一次标志加1当标志等于100时,即计时5s/P1.0输出1voidint_T1()interrupt3using3(num+;if(num=100)(完整测试程序清单(c语言反汇编版)如下Q0000:LJMPQ00ABQ0003:PUSHACCINC0AHMOVA,0AHJNZQ000DINC09HQ000DXRLA,#64HORLA,09HJNZQ0016MOVP1,#0FEHQ0016:Q001E:Q003E:Q004F:Q0064:Q006C:POPRETIACCNOPNOPLJMP
12、Q0003CLRAMOV09H,AMOV0AH,AMOVP1,#0FFHMOVTMOD,#1OHMOVTL1,#0B0HMOVTH1,#3CHSETBET1SETBEACLRTF1SETBTR1MOV08H,#01HMOV0BH,AMOV0CH,ALCALLQ0089MOVA,08HADDA,ACCMOV08H,AINC0CHMOVA,0CHJNZQ004FINC0BHCLRCSUBBA,#08HMOVA,0BHSUBBA,#00HJCQ003ECLRTR1MOVTL1,#0B0HMOVTH1,#3CHCLRTF1SETBTR1MOV08H,#80HCLRAMOV0BH,AMOV0CH,ALC
13、ALLQ0089MOVCLRCRRCAMOV08H,AINC0CHMOVA,0CHJNZQ007DINC0BHQ007D:CLRCSUBBA,#08HMOVA,0BHSUBBA,#00HJCQ006CSJMPQ0064RETQ0089:MOVA,08HCPLAMOVP0,AMOVR7,#64HMOVR6,#00HQ0092:MOVA,R7ORLA,R6JZQ00AACLRAMOVR5,AMOVR4,AQ0099:INCR5CJNER5,#00H,Q009EINCR4Q009E:MOVA,R5CPLAORLA,R4JNZQ0099MOVA,R7DECR7JNZQ0092DECR6SJMPQ0092Q00AA:RETQ00AB:MOVR0,#7FHCLRAQ00AE:MOVR0,ADJNZR0,Q00AEMOVSP,#0CHLJMPQ001E(2)硬件部分设计原理因C51单片机复位端RST接收到一正脉冲时,单片机复位,所以P1.0引脚的复位信号(输出由低电平变为高电平)应通过一电容与电阻组成的微分电路,将方波转化为脉冲波。整个复位电路包括上电复位、手动复位和看门狗复位三部分,如图:pi.0LOljFVcc1OUFioonRSTlOKn