完整word版C51单片机看门狗电路及程序设计方案.docx

上传人:b****6 文档编号:3925784 上传时间:2022-11-26 格式:DOCX 页数:11 大小:56.96KB
下载 相关 举报
完整word版C51单片机看门狗电路及程序设计方案.docx_第1页
第1页 / 共11页
完整word版C51单片机看门狗电路及程序设计方案.docx_第2页
第2页 / 共11页
完整word版C51单片机看门狗电路及程序设计方案.docx_第3页
第3页 / 共11页
完整word版C51单片机看门狗电路及程序设计方案.docx_第4页
第4页 / 共11页
完整word版C51单片机看门狗电路及程序设计方案.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

完整word版C51单片机看门狗电路及程序设计方案.docx

《完整word版C51单片机看门狗电路及程序设计方案.docx》由会员分享,可在线阅读,更多相关《完整word版C51单片机看门狗电路及程序设计方案.docx(11页珍藏版)》请在冰豆网上搜索。

完整word版C51单片机看门狗电路及程序设计方案.docx

完整word版C51单片机看门狗电路及程序设计方案

常熟理工学院

项目设计报告

项目:

C51单片机看门狗电路及程序设计方案

专业电气工程及其自动化

学生姓名____________

班级________

学号________

指导教师

完成日期

1.引言…………………………………………………………………………1

1.1看门狗电路基本原理………………………………………………2

1.2看门狗电路一般设计方式………………………………………………3

1.3知识点应用………………………………………………………………4

2.看门狗电路整体设计思路………………………………………………5

2.1硬件设计原理………………………………………………6

2.2软件设计原理………………………………………………7

1.1设计思路:

1.2软件设计流程图:

1.3“看门狗“定时器设置程序:

1.4溢出中断服务程序:

1.5喂狗代码:

1.6完整测试程序清单:

3.作品调试……………………………………………………………………8

4.结语………………………………………………………………………………17

5.参考文献…………………………………………………………………………18

 

一.引言

在由单片机构成的微型计算机系统中,程序的正常运行常常会因为来自外界的电磁场干扰等原因而被打断,从而造成程序的跑飞,而陷入死循环。

由此导致单片机控制的系统无法继续工作,造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片或程序,俗称"看门狗"(watchdog)

(1)看门狗电路基本原理

看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:

看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。

(2)看门狗电路一般设计方式

“看门狗”电路一般分为硬件看门狗与软件看门狗两种设计方式。

硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位。

如果出现死循环,或者说PC指针不能回来,那么定时时间到后就会使单片机复位。

常用的WDT芯片如MAX813,5045,IMP813等,价格4~10元不等.

软件看门狗技术的原理和硬件看门狗类似,只不过是用软件的方法实现(即利用单片机内部定时器资源,通过编程模拟硬件看门狗工作方式),以51系列为例:

因在51单片机中有两个定时器,在利用内部定时器资源来对主程序的运行进行监控时。

可以对T1(或T0)设定一定的定时时间(设定的定时值要小于主程序的运行时间),当产生定时中断的时候对一个变量进行赋值(此变量在主程序运行的开始已有一个初值)。

当主程序运行至最后时对此变量的值进行判断,如果值发生了预期的变化,就说明T0中断正常,如果没有发生变化则使程序复位。

考虑到设计要求,本设计采用软件看门狗设计思路。

(3)知识点的应用

延时、中断、寄存器、定时器、数码管

二.看门狗电路整体设计思路

根据设计要求,本设计利用C51单片机内部自带的定时器1进行编程,并配合少量电路实现“看门狗“电路功能。

整个设计分为硬件部分与软件部分,如下:

(1)硬件部分设计原理

因C51单片机复位端RST接收到一正脉冲时,单片机复位,所以P1.0引脚的复位信号(输出由低电平变为高电平)应通过一电容与电阻组成的微分电路,将方波转化为脉冲波。

整个复位电路包括上电复位、手动复位和看门狗复位三部分,如图:

(2)软件部分设计原理:

软件设计分为三部分:

“看门狗“定时器设置程序、溢出中断服务程序和喂狗代码。

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“看门狗“定时器设置程序:

“看门狗“定时器设置程序对定时器1进行设置。

设定时器1为工作方式1。

设M为工作方式1下,定时器最大计数值,可知M=65536。

所以,设定时器1的初值为X,则初值X与机器周期I机及定时时间T的关系为:

(M-X)T机=T

(1)

其中:

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

TL1=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

{

P1=~(0x01);//P1.0输出1

}

}

1.5喂狗代码:

喂狗代码主要功能为暂时关定时器1,定时器1寄存器清零,看门狗标志num清零和重新开启定时器1.

喂狗代码程序清单(c语言)如下:

TR1=0;//喂狗代码,关定时器1

TL1=0xB0;//重新设置定时器初值

TH1=0x3C;

TF1=0;//定时器1溢出中断标志清零

TR1=1;//开定时器1

1.6完整测试程序清单

完整测设程序分为两部分,以一个正向运行一次的流水灯程序和逆向无限循环流水灯程序组成。

在正向进行一次流水灯程序时,看门狗代码不会复位单片机;逆向无限循环流水灯程序时,延时5s,看门狗复位单片机。

完整测试程序清单(c语言)如下:

#include"reg51.h"

#include"stdio.h"

unsignedinti,num;//设置变量

unsignedchartemp;

voiddelay(unsignedintt);//声明delay函数

intmain()

{

num=0;//看门狗复位标志

P1=~(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;//点亮P0口对应的LED

delay(100);

temp<<=1;//点亮的LED灯前移一位

}

TR1=0;//喂狗代码,关定时器1

TL1=0xB0;//重新设置定时器初值

TH1=0x3C;

TF1=0;//定时器1溢出中断标志清零

TR1=1;//开定时器1

while

(1)//流水灯程序

(2)

{//倒序,无限循环

temp=0x80;

for(i=0;i<8;i++)

{

P0=~temp;

delay(100);

temp>>=1;

}

}

TR1=0;//喂狗代码

TL1=0xB0;

TH1=0x3C;

TF1=0;

TR1=1;

num=0;

return0;

}

voiddelay(unsignedintt)//延时子程序

{

registerunsignedintbt;

for(;t;t--)

for(bt=0;bt<255;bt++);

}

voidint_T1()interrupt3using3

//定时器1溢出中断服务程序

{

num++;//每溢出一次标志加1

if(num==100)//当标志等于100时,即计时5s

{

P1=~(0x01);//P1.0输出1

}

}

完整测试程序清单(c语言反汇编版)如下:

Q0000:

LJMPQ00AB

Q0003:

PUSHACC

INC0AH

MOVA,0AH

JNZQ000D

INC09H

Q000D:

XRLA,#64H

ORLA,09H

JNZQ0016

MOVP1,#0FEH

Q0016:

POPACC

RETI

NOP

NOP

LJMPQ0003

Q001E:

CLRA

MOV09H,A

MOV0AH,A

MOVP1,#0FFH

MOVTMOD,#10H

MOVTL1,#0B0H

MOVTH1,#3CH

SETBET1

SETBEA

CLRTF1

SETBTR1

MOV08H,#01H

MOV0BH,A

MOV0CH,A

Q003E:

LCALLQ0089

MOVA,08H

ADDA,ACC

MOV08H,A

INC0CH

MOVA,0CH

JNZQ004F

INC0BH

Q004F:

CLRC

SUBBA,#08H

MOVA,0BH

SUBBA,#00H

JCQ003E

CLRTR1

MOVTL1,#0B0H

MOVTH1,#3CH

CLRTF1

SETBTR1

Q0064:

MOV08H,#80H

CLRA

MOV0BH,A

MOV0CH,A

Q006C:

LCALLQ0089

MOVA,08H

CLRC

RRCA

MOV08H,A

INC0CH

MOVA,0CH

JNZQ007D

INC0BH

Q007D:

CLRC

SUBBA,#08H

MOVA,0BH

SUBBA,#00H

JCQ006C

SJMPQ0064

RET

Q0089:

MOVA,08H

CPLA

MOVP0,A

MOVR7,#64H

MOVR6,#00H

Q0092:

MOVA,R7

ORLA,R6

JZQ00AA

CLRA

MOVR5,A

MOVR4,A

Q0099:

INCR5

CJNER5,#00H,Q009E

INCR4

Q009E:

MOVA,R5

CPLA

ORLA,R4

JNZQ0099

MOVA,R7

DECR7

JNZQ0092

DECR6

SJMPQ0092

Q00AA:

RET

Q00AB:

MOVR0,#7FH

CLRA

Q00AE:

MOV@R0,A

DJNZR0,Q00AE

MOVSP,#0CH

LJMPQ001E

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 韩语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1