版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、c51单片机看门狗电路及程序设计方案院系:信息工程学院年级:2010级电子一班 刘禹豪电子一班 赵训虎电子二班 邓启新一、 引言在由单片机构成的微型计算机系统中,程序的正常运行常常会因为来自外界的电磁场干扰等原因而被打断,从而造成程序的跑飞,而陷入死循环。由此导致单片机控制的系统无法继续工作,造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片或程序,俗称看门狗(watchdog) (1)看门狗电路基本原理看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个i/o引
2、脚相连 此处设计原理实际上为下文中硬件看门狗设计思路。*,该i/o引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段 进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。(2)看门狗电路一般设计方式“看门狗”电路一般分为硬件看门狗与软件看门狗两种设计方式。硬件看门狗是利用了一个定时器,来监控主程
3、序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位。如果出现死循环,或者说pc指针不能回来,那么定时时间到后就会使单片机复位。常用的wdt芯片如max813,5045,imp 813等,价格410元不等.软件看门狗技术的原理和硬件看门狗类似,只不过是用软件的方法实现(即利用单片机内部定时器资源,通过编程模拟硬件看门狗工作方式),以51系列为例:因在51单片机中有两个定时器,在利用内部定时器资源来对主程序的运行进行监控时。可以对t1(或t0)设定一定的定时时间(设定的定时值要小于主程序的运行时间),当产生定时中断的时候对一个变量进行赋值(此变量在主程序运行的开始已有一
4、个初值)。当主程序运行至最后时对此变量的值进行判断,如果值发生了预期的变化,就说明t0中断正常,如果没有发生变化则使程序复位。考虑到设计要求,本设计采用软件看门狗设计思路。二、 看门狗电路整体设计思路根据设计要求,本设计利用c51单片机内部自带的定时器1进行编程,并配合少量电路实现“看门狗“电路功能。整个设计分为软件部分与硬件部分,如下:(1) 软件部分设计原理:软件设计分为三部分:“看门狗“定时器设置程序、溢出中断服务程序和喂狗代码。1.1设计思路:1)在主程序开头,“看门狗“定时器设置程序设置定时器1计时50ms。2)当定时达50ms时,定时器1产生溢出中断,溢出中断服务程序开始工作,将看
5、门狗标志num加1。当num的值等于100时,说明看门狗定时器已经计时5s,此时,单片机i/o端口p1.0输出高电平,对程序进行复位。3)在此过程中,喂狗代码将被穿插于程序中循环体末尾。当循环体结束时,喂狗代码执行,关闭定时器1、清空num并重新初始化定时器设置。若循环体进入死循环,喂狗代码无法执行,num将一直累加至100,此时程序复位。注:喂狗代码放置位置可根据num预计数值进行调整:当num门限值较小,即看门狗计数时间较短时,喂狗代码可放于程序中各循环体之后或均匀分布于整个主程序中。当num门限值较大,即看门狗计数时间较长时,喂狗代码可放于程序主循环体末尾。但是需注意看门狗计数时间必须长
6、于正常工作时间,以免非正常复位。1.2软件设计流程图:start定时器1主程序寄存器累加定时器1设置溢出中断开定时器1循环中断服务程序喂狗代码num+1nonum=100?yes复位以下为三部分详细程序设计1.3“看门狗“定时器设置程序:“看门狗“定时器设置程序对定时器1进行设置。设定时器1为工作方式1。设m为工作方式1下,定时器最大计数值,可知m=65536。所以,设定时器1的初值为x,则初值x与机器周期i机及定时时间t的关系为:(m-x)t机 = t (1)其中:t机 =12个时钟周期 =12 /fosc。所以,定时器1的初值为:x = mt/ t机 (2)因此,当t1工作于方式1,定时时
7、间为50ms,时钟频率fosc=12mhz时,可知:x=m- t/ t机 = 65536-50000/1 =15536=3cb0h所以,“看门狗“定时器设置程序清单(c语言)如下:tmod=0x10; /设置tmod寄存器,定时器1设为方式1 tl1=0xb0; /设置定时器初值低8位 th1=0x3c; /设置定时器初值高8位,设置为计时50ms et1=1; /开定时器1溢出中断 ea=1; /开总中断控制 tf1=0; /定时器1溢出中断标志清零 tr1=1; /开定时器11.4溢出中断服务程序:溢出中断服务程序为定时器1溢出中断服务程序,每执行一次,num加1,并判断num是否达到10
8、0,即计时5s。若已达到5s,i/o口p1.0输出复位信号。溢出中断服务程序清单(c语言)如下:void int_t1() interrupt 3 using 3 /定时器1溢出中断服务程序num+; /每溢出一次标志加1if (num=100) /当标志等于100时,即计时5s p1=(0x01); /p1.0输出1 1.5喂狗代码:喂狗代码主要功能为暂时关定时器1,定时器1寄存器清零,看门狗标志num清零和重新开启定时器1.喂狗代码程序清单(c语言)如下:tr1=0; /喂狗代码,关定时器1 tl1=0xb0; /重新设置定时器初值 th1=0x3c; tf1=0; /定时器1溢出中断标志
9、清零 tr1=1; /开定时器11.6完整测试程序清单完整测设程序分为两部分,以一个正向运行一次的流水灯程序和逆向无限循环流水灯程序组成。在正向进行一次流水灯程序时,看门狗代码不会复位单片机;逆向无限循环流水灯程序时,延时5s,看门狗复位单片机。完整测试程序清单(c语言)如下:#include reg51.h#include stdio.hunsigned int i,num; /设置变量unsigned char temp;void delay(unsigned int t); /声明delay函数int main() num=0; /看门狗复位标志 p1=(0x00); /将p1口赋值为0
10、 tmod=0x10; /设置tmod寄存器,定时器1设为方式1 tl1=0xb0; /设置定时器初值低8位 th1=0x3c; /设置定时器初值高8位,设置为计时50ms et1=1; /开定时器1溢出中断 ea=1; /开总中断控制 tf1=0; /定时器1溢出中断标志清零 tr1=1; /开定时器1 temp=0x01; /流水灯状态标志 for(i=0;i8;i+) /流水灯程序(1) p0=temp; /点亮p0口对应的led delay(100); temp=1; /点亮的led灯前移一位 tr1=0; /喂狗代码,关定时器1 tl1=0xb0; /重新设置定时器初值 th1=0x
11、3c; tf1=0; /定时器1溢出中断标志清零 tr1=1; /开定时器1 while(1) /流水灯程序(2) /倒序,无限循环 temp=0x80; for(i=0;i=1; tr1=0; /喂狗代码 tl1=0xb0; th1=0x3c; tf1=0; tr1=1; num=0; return 0;void delay(unsigned int t) /延时子程序 register unsigned int bt; for(;t;t-) for(bt=0;bt255;bt+); void int_t1() interrupt 3 using 3 /定时器1溢出中断服务程序 num+;
12、/每溢出一次标志加1 if (num=100) /当标志等于100时,即计时5s p1=(0x01); /p1.0输出1 完整测试程序清单(c语言反汇编版)如下:q0000: ljmp q00ab q0003: push acc inc 0ah mov a,0ah jnz q000d inc 09h q000d: xrl a,#64h orl a,09h jnz q0016 mov p1,#0feh q0016: pop acc reti nop nop ljmp q0003 q001e: clr a mov 09h,a mov 0ah,a mov p1,#0ffh mov tmod,#10h
13、 mov tl1,#0b0h mov th1,#3ch setb et1 setb ea clr tf1 setb tr1 待添加的隐藏文字内容3 mov 08h,#01h mov 0bh,a mov 0ch,a q003e: lcall q0089 mov a,08h add a,acc mov 08h,a inc 0ch mov a,0ch jnz q004f inc 0bh q004f: clr c subb a,#08h mov a,0bh subb a,#00h jc q003e clr tr1 mov tl1,#0b0h mov th1,#3ch clr tf1 setb tr1
14、q0064: mov 08h,#80h clr a mov 0bh,a mov 0ch,a q006c: lcall q0089 mov a,08h clr c rrc a mov 08h,a inc 0ch mov a,0ch jnz q007d inc 0bh q007d: clr c subb a,#08h mov a,0bh subb a,#00h jc q006c sjmp q0064 ret q0089: mov a,08h cpl a mov p0,a mov r7,#64h mov r6,#00h q0092: mov a,r7 orl a,r6 jz q00aa clr a mov r5,a mov r4,a q0099: inc r5 cjne r5,#00h,q009e inc r4 q009e: mov a,r5 cpl a orl a,r4 jnz q0099 mov a,r7 dec r7 jnz q0092 dec
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论