当前位置:首页 > 单片机 > 单片机
[导读]在单片机构成的系统中,由于单片机的工作有可能受到来自外来电磁场的干扰而出现程序跑飞的现象,从而陷入死循环,出于对单片机运行状态进行实时性的监控的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,

在单片机构成的系统中,由于单片机的工作有可能受到来自外来电磁场的干扰而出现程序跑飞的现象,从而陷入死循环,出于对单片机运行状态进行实时性的监控的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称看门狗(watch dog)


看门狗的工作过程如下:


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


示例代码:


用软件观察看门狗的喂狗现象:如果在while循环中屏蔽这一局,那么在看门狗的作用下,程序将会不断

//不断的复位,这是看到的现象是在看门狗的作用下,led灯不断的闪烁



#include

#define uchar unsigned char

#define uint unsigned int


sfr WDT_CONTR = 0xe1;//51系列的单片机的看门狗的位置

sbit led1 = P1^0;


void delayms(uint x)

{

uint i,j;

for(i = x;i>0;i--)

for(j = 110;j>0;j--);

}


main()

{

WDT_CONTR = 0x35;//0011 0101表示喂狗,时间是2.095m要喂一次

led1 = 0;

delayms(500);

led1 = 1;

while(1)

{

delayms(1000);

// WDT_CONTR = 0x35;如果在while循环中屏蔽这一局,那么在看门狗的作用下,程序将会不断

//不断的复位,这是看到的现象是在看门狗的作用下,led灯不断的闪烁

}

}


看门狗的寄存器为WDT_CONTR,字节地址是e1,不能位寻址,实现喂狗功能一般是在程序中插入


sfr WDT_CONTR = 0xe1 ;


WDT_CONTR= 0x35;//0011 0000这里可以查看专门的书籍看寄存器的相关位的设置



用软件实现单片机的系统复位:


STC单片机增加了响应的硬件功能,内部的ISP/IAP控制寄存器ISP_CONTR便可以实现此功能,用户只需要简单的控制ISP_CONTR特殊功能寄存器中的SWBS和SWRST两位便可以实现系统的复位


示例代码:


#include

#define uint unsigned int

#define uchar unsigned char

sfr ISP_CONTR = 0xe7;


sbit dula = P2^6;

sbit wela = P2^7;

uchar num ,gw,sw,aa;

uchar code table[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};


void init()//初始化函数

{

TMOD = 0x01;

TH0 = (65535-50000)/256;

TL0 = (65535-50000)%256;


EA = 1;

ET0 = 1;

TR0 =1;


}


void delayms(uint x)//延时函数

{

uint i,j;

for(i = x;i>0;i--)

for(j=110;j>0;j--);

}


void display(uchar gw,uchar sw)//显示函数

{

dula = 1;

P0 = table[sw];

dula = 0;


P0 = 0xff;

wela = 1;

P0 = 0xfe;

wela = 0;

delayms(5);


P0 = 0x0;//消影

dula = 1;

P0 = table[gw];

dula = 0;


P0 = 0xff;

wela = 1;

P0 = 0xfd;

wela = 0;

delayms(5);


}


void main()

{

init();

while(1)

{

if(aa ==20)

{

aa =0;

num++;

if(num == 99)

num =0;

if(num ==10)

{

ISP_CONTR = 0x20;//0010 0000,操控寄存器实现软件复位

}

gw = num%10;

sw = num/10;

}

display(gw,sw);

}

}


void timer0()interrupt 1

{

TH0 = (65536-50000)/256;

TL0 = (65536-50000)%256;

aa ++;


}


实验现象,数码管以秒速递增,递增到10后,系统复位,之后重新开始从0计时


说一下STC单片机的寄存器ISP/IAP寄存器,这个寄存器的地址是E7H,不能位寻址,在这里只需要将寄存器的第五个bit设置为1,便可以实现软件的复位


因此代码通常是


sfr ISP_CONTR = 0xe7;


ISP_CONTR = 0x20;//0010 0000


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在嵌入式系统开发中,看门狗(Watchdog Timer, WDT)是保障系统可靠性的核心组件,其初始化时机的选择直接影响系统抗干扰能力和稳定性。本文从硬件架构、软件流程、安全规范三个维度,系统分析看门狗初始化的最佳实践...

关键字: 单片机 看门狗 嵌入式系统

看门狗是实现嵌入式计算机系统运行状态监控的一种措施 , 能够有效提高系统运行可靠性 。针对HKSP6102处理器在嵌入式计算机中的应用 ,分析了通用看门狗的设计方法及其特点;最后介绍了数据处理模块的看门狗设计方法 ,基于...

关键字: 看门狗 嵌入式计算机 监控

在嵌入式系统开发中,看门狗(Watchdog Timer, WDT)是一种重要的故障检测和恢复机制。当系统因软件错误、硬件故障或外部干扰而陷入异常状态时,看门狗能够自动触发复位操作,使系统恢复到正常运行状态。本文将深入探...

关键字: 嵌入式系统 看门狗

为了保护个人信息和网络设备的安全,专家们致力于开发各种安全技术和工具。其中,路由器看门狗功能成为了网络安全领域的一大创新。

关键字: 路由器 看门狗

STM32有两个看门狗,独立看门狗和窗口看门狗。其实两者的功能是类似的,只是喂狗的限制时间不同。

关键字: 看门狗 窗口看门狗

本文中,小编将对FPGA不复位的代码实现予以介绍

关键字: FPGA 复位

R是施密特触发器输入端的一个10KΩ下拉电阻,时间常数为10×10-6×10×103=100ms。

关键字: 复位 电路设计 施密特触发器

在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环。程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果。所以...

关键字: 单片机 看门狗 计算机

STC单片机是一款增强型51单片机,完全兼容MCS-51,还增加了新的功能,比如新增两级中断优先级,多一个外中断,内置EEPROM,硬件看门狗,具有掉电模式,512B内存等。还支持ISP下载,不用编程器,只要一个MAX2...

关键字: 单片机 看门狗 中断

今天要学习的是独立看门狗,看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其 工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的 这个引脚上送入高电平(或低电平),这一...

关键字: 看门狗 中断函数 单片机
关闭