C51单片机看门狗电路及程序设计方案.docx
- 文档编号:17839649
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:14
- 大小:37.88KB
C51单片机看门狗电路及程序设计方案.docx
《C51单片机看门狗电路及程序设计方案.docx》由会员分享,可在线阅读,更多相关《C51单片机看门狗电路及程序设计方案.docx(14页珍藏版)》请在冰点文库上搜索。
C51单片机看门狗电路及程序设计方案
盛年不重来,一日难再晨。
及时宜自勉,岁月不待人
C51单片机看门狗电路及
程序设计方案
院系:
信息工程学院
年级:
2010级
电子一班刘禹豪
电子一班赵训虎
电子二班邓启新
发生不可预料的后果,所以出于对单片机运行状
便产生了一种专门用于监测单片机程序运行状态的芯片或程序,俗
一、引言
在由单片机构成的微型计算机系统中,扰等原因而被打断,从而造成程序的跑飞,继续工作,造成整个系统的陷入停滞状态,态进行实时监测的考虑,
称"看门狗"(watchdog)
(1)看门狗电路基本原理
程序的正常运行常常会因为来自外界的电磁场干而陷入死循环。
由此导致单片机控制的系统无法
看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:
看门狗
芯片和单片机的一个I/O引脚相连**,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的
程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单
片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
(2)看门狗电路一般设计方式
“看门狗”电路一般分为硬件看门狗与软件看门狗两种设计方式。
硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位。
如果出现死循环,或者说PC指针不能回
来,那么定时时间到后就会使单片机复位。
常用的WDT芯片如MAX813,5045,IMP813
等,价格4~10元不等.
软件看门狗技术的原理和硬件看门狗类似,只不过是用软件的方法实现(即利用单片机
此处设计原理实际上为下文中硬件看门狗设计思路。
内部定时器资源,通过编程模拟硬件看门狗工作方式),以51系列为例:
因在51单片机中
有两个定时器,在利用内部定时器资源来对主程序的运行进行监控时。
可以对T1(或TO)
设定一定的定时时间(设定的定时值要小于主程序的运行时间),当产生定时中断的时候对
一个变量进行赋值(此变量在主程序运行的开始已有一个初值)。
当主程序运行至最后时对
此变量的值进行判断,如果值发生了预期的变化,就说明TO中断正常,如果没有发生变化
则使程序复位。
考虑到设计要求,本设计采用软件看门狗设计思路。
二、看门狗电路整体设计思路
根据设计要求,本设计利用C51单片机内部自带的定时器1进行编程,并配合少量电
路实现“看门狗“电路功能。
整个设计分为软件部分与硬件部分,如下:
(1)软件部分设计原理:
软件设计分为三部分:
“看门狗“定时器设置程序、溢出中断服务程序和喂狗代码。
1.1设计思路:
1)在主程序开头,“看门狗“定时器设置程序设置定时器1计时50ms。
2)当定时达50ms时,定时器1产生溢出中断,溢出中断服务程序开始工作,将看门狗标志num加1。
当num的值等于100时,说明看门狗定时器已经计时5s,此时,单片机I/O端口P1.0输出高电平,对程序进行复位。
3)在此过程中,喂狗代码将被穿插于程序中循环体末尾。
当循环体结束时,喂狗
代码执行,关闭定时器1、清空num并重新初始化定时器设置。
若循环体进入死循环,喂狗代码无法执行,num将一直累加至100,此时程序复位。
注:
喂狗代码放置位置可根据num预计数值进行调整:
当num门限值较小,即
看门狗计数时间较短时,喂狗代码可放于程序中各循环体之后或均匀分布于整个主程序中。
当num门限值较大,即看门狗计数时间较长时,喂狗代码可放于程序主循环体末尾。
但是需注意看门狗计数时间必须长于正常工作时间,以免非正常复位。
1.2软件设计流程图:
以下为三部分详细程序设计
1.3“看门狗“定时器设置程序:
M为工作方式1下,定时器最大计数值,可知M=65536。
所以,设定时器1的初值
为X,则初值X与机器周期I机及定时时间T的关系为:
(M-X)T机=T⑴
其中:
T机=12个时钟周期=12/fosc。
所以,定时器1的初值为:
X=M—T/T机
(2)
因此,当T1工作于方式1,定时时间为50ms,时钟频率fosc=12MHz时,可知:
X=M-T/T机=65536-50000/1=15536=3CB0H
所以,“看门狗“定时器设置程序清单(c语言)如下:
TMOD=0x10;
//设置TMOD寄存器,定时器1设为方式1
TL仁0xB0;
//设置定时器初值低8位
TH1=0x3C;
//设置定时器初值高8位,设置为计时50ms
ET1=1;
//开定时器1溢出中断
EA=1;
//开总中断控制
TF1=0;
//定时器1溢出中断标志清零
TR1=1;
//开定时器1
1.4溢出中断服务程序:
溢出中断服务程序为定时器1溢出中断服务程序,每执行一次,num加1,并判断num
是否达到100,即计时5s。
若已达到5s,I/O口P1.0输出复位信号。
溢出中断服务程序清单(c语言)如下:
voidint_T1()interrupt3using3//定时器1溢出中断服务程序
num++;//每溢出一次标志加1
if(num==100)//当标志等于100时,即计时5s
{
P仁~(OxO1);//P1.0输出1
}
}
1.5喂狗代码:
喂狗代码主要功能为暂时关定时器1,定时器1寄存器清零,看门狗标志num清零和
重新开启定时器1.
喂狗代码程序清单(
c语言)如下:
TR1=0;
//喂狗代码,关定时器1
TL仁OxBO;
//重新设置定时器初值
TH1=0x3C;
TF1=0;
//定时器1溢出中断标志清零
TR1=1;
//开定时器1
1.6完整测试程序清单
完整测设程序分为两部分,以一个正向运行一次的流水灯程序和逆向无限循环流水灯程
序组成。
在正向进行一次流水灯程序时,看门狗代码不会复位单片机;逆向无限循环流水灯
程序时,延时5s,看门狗复位单片机。
完整测试程序清单(c语言)如下:
#inelude"reg51.h"
#inelude"stdio.h"
unsignedinti,num;
//设置变量
unsignedchartemp;
voiddelay(unsignedintt);
//声明delay函数
intmain()
{
num=0;
//看门狗复位标志
P仁~(0x00);
//将P1口赋值为0
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;i<8;i++)
//流水灯程序
(1)
P0=~temp;
II点亮P0口对应的LED
delay(IOO);
temp<<=1;
II点亮的LED灯前移一位
TR1=0;
II喂狗代码,关定时器1
TL仁OxBO;
II重新设置定时器初值
TH1=0x3C;
TF1=0;
II定时器1溢出中断标志清零
TR1=1;
II开定时器1
while
(1)
II流水灯程序
(2)
{
II倒序,无限循环
temp=0x80;
for(i=0;i<8;i++){
PO=~temp;delay(IOO);
temp>>=1;
TR1=0;
II喂狗代码
TL1=0xB0;
TH1=0x3C;
TF1=0;
TR1=1;
num=O;
return0;
}
voiddelay(unsignedintt)//延时子程序
{
registerunsignedintbt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
//定时器1溢出中断服务程序
//每溢出一次标志加1
//当标志等于100时,即计时5s
voidint_T1()interrupt3using3
{
num++;
if(num==100)
P仁~(OxO1);//P1.0输出1
}
}
完整测试程序清单(c语言反汇编版)如下:
Q0000:
LJMP
Q00AB
Q0003:
PUSH
ACC
INC
0AH
MOV
A,0AH
JNZ
Q000D
INC
09H
QOOOD:
XRL
A,#64H
ORL
A,09H
JNZ
Q0016
MOV
P1,#0F
Q0016:
POP
ACC
RETI
NOP
NOP
LJMPQ0003
Q001E:
CLRA
MOV09H,A
MOV0AH,A
Q003E:
Q004F:
MOV
P1,#0FFH
MOV
TMOD,#10H
MOV
TL1,#0B0H
MOV
TH1,#3CH
SETB
ET1
SETB
EA
CLR
TF1
SETB
TR1
MOV
08H,#01H
MOV
0BH,A
MOV
0CH,A
LCALLQ0089
MOV
A,08H
ADD
A,ACC
MOV
08H,A
INC
0CH
MOV
A,0CH
JNZ
Q004F
INC
0BH
CLR
C
SUBB
A,#08H
MOV
A,0BH
Q0064:
Q006C:
Q007D:
SUBB
A,#00H
JC
Q003E
CLR
TR1
MOV
TL1,#0B0H
MOV
TH1,#3CH
CLR
TF1
SETB
TR1
MOV
08H,#80H
CLR
A
MOV
0BH,A
MOV
0CH,A
LCALLQ0089
MOV
A,08H
CLR
C
RRC
A
MOV
08H,A
INC
0CH
MOV
A,0CH
JNZ
Q007D
INC
0BH
CLR
C
SUBB
A,#08H
Q0089:
Q0092:
Q0099:
Q009E:
MOVA,0BH
SUBBA,#00H
JCQ006C
SJMPQ0064
RET
MOVA,08H
CPLA
MOVP0,A
MOVR7,#64H
MOVR6,#00H
MOVA,R7
ORLA,R6
JZQ00AA
CLRA
MOVR5,A
MOVR4,A
INCR5
CJNER5,#00H,Q009E
INCR4
MOVA,R5
CPLA
ORLA,R4
JNZ
Q0099
MOV
A,R7
DEC
R7
JNZ
Q0092
DEC
R6
SJMP
Q0092
Q00AA:
RET
Q00AB:
MOV
R0,#7FH
CLR
A
Q00AE:
MOV
@R0,A
DJNZ
R0,Q00AE
MOV
SP#0CH
LJMP
Q001E
(2)硬件部分设计原理
P1.0引脚的复
将方波转化
因C51单片机复位端RST接收到一正脉冲时,单片机复位,所以位信号(输出由低电平变为高电平)应通过一电容与电阻组成的微分电路,
为脉冲波。
整个复位电路包括上电复位、手动复位和看门狗复位三部分,如图:
LOuF二二
100«
Vcc
iouf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C51 单片机 看门狗 电路 程序设计 方案
![提示](https://static.bingdoc.com/images/bang_tan.gif)