单片机实验看门狗实验
基于单片机按键控制看门狗仿真设计
基于单片机按键控制看门狗仿真设计本文档旨在介绍《基于单片机按键控制看门狗仿真设计》的主题,并提供写作大纲的目的概述。
该文档将深入探讨如何利用单片机按键控制看门狗的仿真设计。
我们将详细介绍看门狗的概念和原理,并提供一个基于单片机按键的仿真设计案例。
通过本文档的阅读,读者将了解如何使用单片机按键来控制看门狗,在系统遇到异常情况时采取适当的措施来保护系统的稳定性和可靠性。
接下来,将按照以下大纲扩写内容,详细介绍《基于单片机按键控制看门狗仿真设计》的相关内容。
在介绍基于单片机按键控制看门狗的仿真设计之前,我们需要先了解单片机和看门狗的概念,并探讨为什么使用单片机按键控制看门狗是有意义的。
单片机是一种集成了微处理器核心、内存、输入/输出设备和其他功能模块的微型计算机系统。
它具有体积小、功耗低、成本低等特点,因而广泛应用于各种电子设备中。
看门狗(Watchdog)是一种用于检测和处理系统故障的硬件或软件机制。
它监视系统运行状态,并在系统发生故障时自动执行预定的纠错操作。
看门狗的主要作用是保障系统的稳定性和可靠性。
基于单片机按键控制看门狗的仿真设计就是利用单片机上的按键来控制看门狗的功能。
通过按下特定的按键,我们可以触发或关闭看门狗的工作,以解决系统故障或异常情况。
使用单片机按键控制看门狗具有以下意义:提高系统的稳定性:通过按键控制看门狗,可以及时检测和处理系统故障,保障系统的稳定运行。
简化系统调试过程:按键控制看门狗可以方便地触发系统故障模式,便于调试和定位问题。
提升系统的可靠性:看门狗机制可以在系统故障时自动执行纠错操作,提高系统的可靠性和容错能力。
综上所述,基于单片机按键控制看门狗的仿真设计是一种有效的解决方案,可以提高系统的稳定性、简化系统调试过程并提升系统的可靠性。
本文将阐述按键控制看门狗的仿真设计步骤,包括硬件和软件方面的具体要点。
硬件设计步骤准备所需材料和器件,包括单片机、按键、继电器等。
按照电路原理图连接各个器件,确保电路的正确性和稳定性。
C51单片机看门狗电路及程序设计方案
C51单片机看门狗电路及程序设计案院系:信息工程学院年级:2010级电子一班禹豪电子一班训虎电子二班邓启新一、引言在由单片机构成的微型计算机系统中,程序的正常运行常常会因为来自外界的电磁场干扰等原因而被打断,从而造成程序的跑飞,而陷入死循环。
由此导致单片机控制的系统无法继续工作,造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片或程序,俗称"看门狗"(watchdog)(1)看门狗电路基本原理看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连**,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
*此处设计原理实际上为下文中硬件看门狗设计思路。
(2)看门狗电路一般设计式“看门狗”电路一般分为硬件看门狗与软件看门狗两种设计式。
硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位。
如果出现死循环,或者说PC指针不能回来,那么定时时间到后就会使单片机复位。
常用的WDT芯片如MAX813,5045,IMP 813等,价格4~10元不等.软件看门狗技术的原理和硬件看门狗类似,只不过是用软件的法实现(即利用单片机部定时器资源,通过编程模拟硬件看门狗工作式),以51系列为例:因在51单片机中有两个定时器,在利用部定时器资源来对主程序的运行进行监控时。
看门狗实验
看门狗实验1. 为什么要看门狗?看门狗的原理是什么?外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"(watchdog)它的基本原理为,给看门狗设置一个时间周期,如果在这个周期内程序不能正常运行结束,定时器会自动益处,则系统会自动复位,使系统重新运行进而得到监控系统的作用。
假设程序运行的时间为Tp,定时器时间为Ti,Ti>Tp,在Ti时间内程序正常结束则不会发生益处的现象,如果受干扰等原因系统不能在Tp时刻内修改计数器的值,则在Ti时刻时系统会自动复位,引发系统重新运行。
一般情况下都是应用程序在运行结束后去喂狗,当应用程序出现异常而不能去喂狗时,在超过看门狗定时器的时间范围后,cpu会复位,起始喂狗的过程就是给看门狗的寄存器置位,当程序开始运行时,看门狗的计数器开始递减,在减到零之前必须喂狗,否则系统会复位,当减到零时还没有喂狗则系统复位。
2. 看门狗的功能1)作为常规功能可以产生中断,通用的中断用16bit定时器2)作为看门狗使用,当时钟计数器减为0时(超时),他将产生一个128个时(PCLK)钟的的复位信号我们常见的时钟有3个,FCLK,HCLK,PCLK,他们的工作频率分别是400MHz,400/3MHz,和400/6MHz,看门狗使用的是PCLK时钟。
下图为看门狗的电路示意图PCLK经过两次降频,prescaler的值从0到256-1,Division_factor的值为16,32,64,128。
看门狗定时器记数值的计算公式如下:t_watchdog的值是寄存计数器(WDTCNT)多长时间自减一次,他的单位是时间,一旦看门狗定时器被允许,看门狗定时器数据寄存器(WTDAT)的值不能被自动的装载到看门狗计数器(WTCNT)中,因此,看门狗启动前要将一个初始值写入看门狗计数器(WTCNT)中。
STC单片机看门狗功能的验证
SETB EX0 ;允许键盘中断
RET
END
上电实物图:
6.出现的问题及解决方法
7.心得体会及建议
;子程序调用
;****************************************************************************
; 初始化子程序
CH451_INIT:
CLR CH451_DIN ;先低后高,输出上升沿通知 CH451 选择 4 线串行接口
SETB CH451_DCLK ;置为默认的高电平
SETB CH451_DIN
SETB CH451_LOAD
SETB CH451_DOUT ;置为输入
CLR IT0 ;置外部信号为低电平触发
SETB PX0 ;置高优先级或者低优先级
CLR IE0 ;清中断标志
SETB EX0 ;允许键盘中断
MOV B,#04H ;设置为键盘与显示开
MOV A,#03H
SUM DATA 7EH ;定义要用的变量
A1 DATA 7CH
A2 DATA 7BH
A3 DATA 7AH
A4 DATA 79H
DEDADATA 75H
SECDATA 74H
MINDATA 73H
WDT_CONTR EQU 0C1H;看门狗地址
;Pre_scale_Word EQU 00111111B ;清0,启动看门狗,预分频数=64, 1.1377S
CLR CH451_DCLK
MOV CH451_DIN,C ;送出一位数据
SETB CH451_DCLK ;产生时钟上升沿锁通知 CH451 输入位数据
单片机看门狗(Watchdog)的工作原理及其应用
单片机看门狗(Watchdog)的工作原理及其应用2010年05月16日星期日 23:00在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环。
程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果。
所以,出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"(watchdog)。
看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行。
这个时候,看门狗电路就会由于得不到单片机送来的信号。
便在它和单片机复位引脚相连的引脚上送出一个复位信号。
使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
看门狗,又叫 watchdog timer,是一个定时器电路。
一般有一个输入,叫喂狗(kicking the dog or service the dog),一个输出到MCU的RST端,MCU 正常工作的时候,每隔一端时间输出一个信号到喂狗端,给 WDT 清零。
如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就会给出一个复位信号到MCU,是MCU复位,防止MCU死机。
看门狗的作用就是防止程序发生死循环,或者说程序跑飞。
工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。
所以,在使用有看门狗的芯片时要注意清看门狗。
51单片机的看门狗
“看门狗”概念及其应用在由单片机构成的系统中,由于单片机的工作有可能会受到来自外界电磁场的干扰,造成程序的跑飞,从而陷入死循环,程序的正常运行被打断,由单片机控制的系统便无法继续工作,这样会造成整个系统陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称“看门狗”(watch dog)。
加入看门狗电路的目的是使单片机可以在无人状态下实现连续工作,其工作过程如下:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过单片机的程序控制,使它定时地往看门狗芯片的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,给看门狗引脚送电平的程序便不能被执行到,这时,看门狗电路就会由于得不到单片机送来的信号,便将它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,从而单片机将从程序存储器的起始位置重新开始执行程序,这样便实现了单片机的自动复位。
通常看门狗电路需要一个专门的看门狗芯片连接单片机来实现,不过这样会给电路设计带来复杂,STC单片机内部自带有看门狗,通过对相应特殊功能寄存器的设置就可实现看门狗的应用,STC89系列单片机内部有一个专门的看门狗定时器寄存器,Watch Dog Timer 寄存器,其相应功能见下个知识点。
看门狗定时器寄存器(WDT_CONTR)STC单片机看门狗定时器寄存器在特殊功能寄存器中的字节地址为E1H,不能位寻址,该寄存器用来管理STC单片机的看门狗控制部分,包括启停看门狗、设置看门狗溢出时间等。
单片机复位时该寄存器不一定全部被清0,在STC下载程序软件界面上可设置复位关看门狗或只有停电关看门狗的选择,大家根据需要可做出适合自己设计系统的选择。
其各位的定义如表4.2.1所示。
表1看门狗定时器寄存器(WDT_CONTR)EN_WDT:看门狗允许位,当设置为“1”时,启动看门狗。
MSP430单片机看门狗的使用
MSP430单片机看门狗的使用
1、看门狗有三种工作模式:停止模式,计时器模式,看门狗模式。
2、其中后两种模式可以选择的时钟源有:SMCLK 和ACLK。
3、使用后两种模式时要注意单片机所处的状态下看门狗能否工作,如单片
机处在LPM3 时只有ACLK 时钟,处在LPM4 下,没有时钟可以使用。
4、看门狗模式的使用方法
当看门狗计数溢出时,程序复位。
在程序中开启看门狗,在计数溢出前清空看门狗,或重置看门狗,以使其重新计数。
若程序跑飞,看门狗可能没有被清空或重置,就会溢出,使程序复位。
5、MSP430F2274 中,看门狗模式下可以计时最长为1s,若需要以更长的时间复位,可采取的方法,使用其他计数器,计数满后执行((void(*)())
RESET_VECTOR)();或计数满后往看门狗控制寄存器写个错误值或执行一条无效命令:如((void(*)())0x170)();0x170 是外围模块的一个地址,不可能是一个函数地址,所以执行此句将使程序复位。
6、看门狗的具体使用
6.1、停止模式:关闭看门狗
C 语言实现:WDTCTL = WDTPW + WDTHOLD
6.2、计时器模式:作为一个计时器使用,计数器满产生中断时执行看门狗中断函数。
C 语言实现:
主程序中开启看门狗计时器,如:WDTCTL = WDT_MDLY_8;
看门狗中断函数为:
#pragmavector=WDT_VECTOR。
基于51单片机的看门狗程序
{
while((ReadReg()&0x01)==1); //the device is busy
CS=0;
WriteByte(WREN); //when write the wren , the cs must have a high level
CS=1;
CS=0;
if(bRegion==0)
{ WriteByte(WRITE0);} //write the page addr
else
{WriteByte(WRITE1);}
WriteByte(cAddress);
WriteByte(cData);
SCK=0; //
CS=1;
}
uchar ReadEpm(uchar cAddress,bit bRegion)
{
uchar ucLoop;
for(ucLoop=0;ucLoop<8;ucLoop++)
{
if((ucData&0x80)==0) //the MSB send first
{SI=0;}
else
{SI=1;}
Hale Waihona Puke SCK=0;SCK=1;ucData<<=1;
}
}
uchar ReadReg() //read register
/*读入一个字节,cAddress为读入地址,bRegion为页*/
{
uchar cData;
while((ReadReg()&0x01)==1);//the device is busy
STC89系列单片机看门狗的使用及应用程序
STC89 系列单片机看门狗的使用及应用程序
看门狗概念及其应用在由单片机构成的系统中,由于单片机的工作有可能会受到来自外界电磁场的干扰,造成程序的跑飞,从而陷入死循环,程序的正常运行被打断,由单片机控制的系统便无法继续工作,这样会造成整个系统陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称看门狗(watch dog)。
加入看门狗电路的目的是使单片机可以在无人状态下实现连续工作,其工作过程如下:看门狗芯片和单片机的一个I/O 引脚相连,该I/O 引脚通过单
片机的程序控制,使它定时地往看门狗芯片的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,给看门狗引脚送电平的程序便不能被执行到,这时,看门狗电路就会由于得不到单片机送来的信号,便将它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,从而单片机将从程序存储器的起始位置重新开始执行程序,这样便实现了单片机的自动复位。
通常看门狗电路需要一个专门的看门狗芯片连接单片机来实现,这在我们的单片机教程网51hei 以前做过相关的电路介绍。
不过这样会给电路设计带
来复杂,STC 单片机内部自带有看门狗,通过对相应特殊功能寄存器的设置
就可实现看门狗的应用,STC89 系列单片机内部有一个专门的看门狗定时器
寄存器,Watch Dog Timer 寄存器,其相应功能见下个知识点。
单片机汇编语言实现看门狗
CS=0; if(bRegion==0) //write the page addr else WriteByte(cAddress); WriteByte(cData); SCK=0; // CS=1; } uchar ReadEpm(uchar cAddress,bit bRegion) /* 读入一个字节,cAddress 为读入地址,bRegion 为页 */ { uchar cData; while((ReadReg()&0x01)==1);//the device is busy CS=0; if(bRegion==0) else WriteByte(cAddress); cData=ReadByte(); CS=1; return cData; } main() { WriteReg(0x00);//set the watchdog time as 1.4s CS=1; CS=0; } //reset the watchdog
SCK=0; SCK=1; ucData<<=1; } } uchar ReadReg() { uchar ucData; CS=0; WriteByte(RDSR); ucData=ReadByte(); CS=1; return ucData; } uchar WriteReg(uchar ucData) { uchar ucTemp; ucTemp=ReadReg(); if((ucTemp&0x01)==1) //the device is busy return 0; CS=0; WriteByte(WREN);//when write the WREN, the cs must have a high level CS=1; CS=0; WriteByte(WRSR); WriteByte(ucData); CS=1; return 1; } void WriteEpm(uchar cData,uchar cAddress,bit bRegion) /* 写入一个字节,cData 为写入的数,cAddress 为写入地址,bRegion 为页 */ { while((ReadReg()&0x01)==1); //the device is busy CS=0; WriteByte(WREN); //when write the wren , the cs must have a high level CS=1; //write register //read register
CC2530单片机技术与应用 第2版 第7章CC2530看门狗应用
MODE:该位用于启动WDT处于看门狗模式还是定时器模式。当处于定时器模式,设置这些位为IDLE将停 止定时器。注意:当运行在定时器模式时要转换到看门狗模式,首先停止WDT,然后启动WDT处于看 门狗模式。当运行在看门狗模式,写这些位没有影响。
INT:注意间隔只能在WDT处于IDLE时改变,这样间隔必须在定时器启动的同时设置。
描述
7:4 CLR[3:0] 0000 R0/W 清除定时器。当0xA跟随0x5写到这些位,定时器被清除(即加载0)。
模式选择。
3:2
MODE[1: 0]
00
1:0 INT[1:0] 00
00:IDLE(idle空闲的意思)
R/W
01:IDLE(未使用,等于00设置)
10:看门狗模式
11: 定时器模式
定时器间隔选择。这些位选择定时器间隔定义为32 kHz振荡器周期的规
定数。00: 定时周期×32,768 (~1 s)当运行在32 kHz XOSC
R/W
01: 定时周期×8192 (~0.25 s)
10: 定时周期×512 (~15.625 ms)
11: 定时周期×64 (~1.9 ms)
CLR:注意定时器仅写入0xA后,在1个看门狗时钟周期内写入0x5时被清除。当看门狗定时器是IDLE为时写 这些位没有影响。当运行在定时器模式,定时器可以通过写1到CLR[0](不管其他3位)被清除为 0x0000(但是不停止)
3、开发实验
开始实验。。。。。。
3、开发实验
3、开发实验
开始实验。。。。。。
4、拓展题
题1:
实验要求:我们在主函数中把喂狗函数FeedWD注释掉,请把该函 数加入系统,然后重新编译下载至实验板运行,观察现象。LED1还 闪烁吗?为什么?
STM32单片机ADC的模拟看门狗的测试
STM32单片机ADC的模拟看门狗的测试ADC的模拟看门狗用于检查电压是否越界。
他又上下两个边界,可分别在寄存器ADC_HTR和ADC_LTR中设置。
库函数是使用ADC_AnalogWatchdogThresholdsConfig设置的,无论是常规通道还是注入通道,都非常简单。
当模拟看门狗检测到电压高于上限或者低于下限时将会产生看门狗中断。
捕获这个中断,可以做出一些应对措施。
数据手册上特别之处的一个东西:模拟看门狗说使用的比较数据与ADC_CR2寄存器中设置的数据对齐方式无关。
看门狗比较是在数据对齐之前完成的。
先进行看门狗比较,再将数据放入ADC_DR数据寄存器。
在ST的库中,只有简单的三个与看门狗相关的函数:void ADC_AnalogWatchdogCmd(ADC_TypeDef* ADCx,uint32_t ADC_AnalogWatchdog); void ADC_AnalogWatchdogThresholdsConfig(ADC_TypeDef* ADCx,uint16_t HighThreshold,uint16_t LowThreshold);void ADC_AnalogWatchdogSingleChannelConfig(ADC_TypeDef* ADCx,uint8_t ADC_Channel);使用ADC_AnalogWatchdogThresholdsConfig设置触发看门狗的上下限使用ADC_AnalogWatchdogSingleChannelConfig配置要使用模拟看门狗的通道配置完成后使用ADC_AnalogWatchdogCmd启动模拟看门狗。
我写的函数很简单,就这么三行。
将模拟看门狗加在ADC1的CH1上。
代码如下:void ADC_WatchdogConfig(void){ADC_AnalogWatchdogSingleChannelConfig(ADC1,ADC_Channel_0);ADC_AnalogWatchdogThresholdsConfig(ADC1,1500,0xFFF);ADC_AnalogWatchdogCmd(ADC1,ADC_AnalogWatchdog_SingleRegEnable);。
看门狗实验指导书
实验二十二硬件看门狗实验一、实验目的1.掌握“看门狗”(MAX 813L)复位控制的硬件接口技术2.掌握“看门狗”(MAX 813L)复位控制驱动程序的设计方法二、实验说明为了控制系统不受外界干扰而出现死机现象,可采用MAX813L 复位监控芯片,该芯片具备复位及监视跟踪两大功能。
主要功能如下:·精密电源电压、监控4.65V·200ms 复位脉冲宽度·V1=1V 时保证复位RESET 有效。
·TTL/CMOS 兼容的防抖动人工复位输入·独立的监视跟踪定时器1.6S 溢出时间。
·电源故障或欠电压报警的电压监控·加电,掉电有电压降低时输出复位信号。
·低电平有效的人工复位输入。
各引脚的功能和意义如图:(1)MR:人工复位输入、当输入降至0.8V 时产生复位脉冲,低电平有效的输入可用开关短路到地或TTL/CMOS 逻辑驱动,不用时浮空。
(2)VCC:+5V 输入。
(3)GND:地。
(4)PFI:电源故障比较器输入,高PFI 低于1.25V 时PFO 输出低电平吸收电流;否则PFO 输出保持高电平,如果不用将PFI 接地或VCC 。
(5)PFO:电源故障比较器输出,高PFI 低于1.25V 时,输出低电平且吸收电流;否则PFO 输出保持高电平。
(6)WDI:监视跟踪定时器输入,WDI 保持高或低电平时间长达1.6S,WDI 输出低电平,WDI 浮空或接高阻三态门将禁止监控跟踪定时器功能,只要发生复位,内部监视跟踪定时的清零。
(7)RESET:复位输出(低电平有效)。
(8)WDO:监视跟踪定时器输出,当内部监视跟踪定时器完成1.6S 计数后,本脚输出低电平,直到下一次监视跟踪定时器清零,才再变为高电平,在低电源或VCC 低于复位门限电压时,WDO就保持低电平,只要VCC 上升到复位门跟电压以上后 WDO 就变为高电平而没有滞后。
单片机系统中的看门狗技术
个领域,而单片机订:这些场合的T作可靠性以及抗干扰能力也显得 越来越重要。环境幽素对此有蘑人的影响,有时会导致单片机不能 正常T作.尤其足n 些条件比较恶劣、噪声大的场合,甚至经常 收藕日期:2004—02—22
出现单片机崮受外界干扰而导致死机的现象。 由于偶然的干扰,使得单片机的程序跑飞,脱离了用户程序,
薰墼=敬一~≥{|
文章编号:1671-1041(2004)04-0083·03
神·EJB容器封装之后,通过远程接u和home接u.供用户和 其它的sessionbean调用。scdybean(素材调用sessionbean)表示 读取素材这样一个过程,可以被反复调用,在这个bean咀面访问 scbean(素材enfitybean),经EJB容器封装后由用户调用.这样做 的目的是为了将客户端需蓐复做的一些繁杂任务封装到一个bean 里面。以实现事务、并发性、持久性的自动管理。
“看门狗”电路原理如图3所示。其中.Vi是单片机系统向 “看门狗”电路提供的输入脉冲信号;V。是“看门狗”电路向单 片机系统送出的系统故障信号,可供计算机复位使用。在这种情况 F.CPU通过程序周期性地向电路送入脉冲,作为“看门狗”电 路的触茇输入。设输入脉冲周期时间T略小“看门狗”的动作时间 T’,即T<T’,则电路就不会动作。而当单片机由十干扰等原因.使 程序跑飞,脱离正常循环.导致触发脉冲丢失,经过一段时间T’ 后. “看门狗”电路的输出vn产生跳变,这一跳变送至计算机进 行中断处理或进行复位操作,重新将程序纳入正常循环。
复位
域
圈5强制复位。看门摘”电路
通过调节可变电阻R3的值,可以调整TH,使之满足单片机复 位信号RESET的时间要求:调节可变电阻R4舶值,可以改变T L’ TL虚人于单片机程序的一个运行周期,且应保证些重要的程序段 不被打断,以免系统产生_【;{操作。
STM32看门狗实验
1.分析和学习固件库 2.理解固件库的结构 3.通过 stm32f10x_iwdg.c/.h 文件,熟悉 IWDG(独立看门狗)的控制和工作原理 4.复习按键中断的使用方法
实验要求:
1.使用 LED 灯 LED1 来指示程序是否重启(IWDG) 2.使用按键 WAKEUP 来不断地喂狗,并用 LED4 灯指示
最适合应用于要求看门狗运行时,完全独立与主应用之外的项目
硬件电路分析:
这里的核心是在 STM32 内部进行,并不需要外部电路。但是考虑到指示当前状态和喂狗等操作,我们需要 2 个 IO 口,一 个用来输入喂狗信号,另外一个用来指示程序是否重启。喂狗我们采用板上的 WAKEUP 键来操作,而程序重启,则是通过 LED4 来指示的。LED4 和 WAKEUP 的连接在前面跑马灯实验已经介绍了,这里我们不再多说
/* Check the parameters */ assert_param(IS_IWDG_WRITE_ACCESS(IWDG_WriteAccess)); IWDG->KR = IWDG_WriteAccess; } 可以看出,该函数的作用就是把输入参数传递到 IWDG_KR 中去. 在 stm32f10x.h 中我们找到输入参数的定义,如下所示 #define IWDG_WriteAccess_Enable ((uint16_t)0x5555) #define IWDG_WriteAccess_Disable ((uint16_t)0x0000) #define IS_IWDG_WRITE_ACCESS(ACCESS) (((ACCESS) == IWDG_WriteAccess_Enable) || \
STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗 的时钟并不是准确的 40Khz,而是在 30~60Khz 之间变化的一个时钟,只是我们在估算的时候,以 40Khz 的频率来计算, 看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。 通过对 LSI 进行校准可获得相对精确的看门狗超时时间。有关 LSI 校准的问题,详见数据手册 LSI 时钟一节。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验八 看门狗实验
/***************************************************************************** // Function name : rtc_get_date // Description : 获取实时时钟当前时间、日期 // Return type : void // Argument : p_date, 返回日期的指针 *****************************************************************************/ void rtc_get_date(st_date* p_date) { rRTCCON = 0x01; p_date->year = rBCDYEAR ; p_date->mon = rBCDMON ; p_date->day = rBCDDAY ; p_date->week_day= rBCDDATE ; p_date->hour = rBCDHOUR ; p_date->min = rBCDMIN ; p_date->sec = rBCDSEC ; rRTCCON = 0x00; } /***************************************************************************** // Function name : rtc_tick_init // Description : 初始化S3C2410的TICK定时器 // Return type : void // Argument : tick, 设置的TICK频率(时钟滴答的周期为 (1+tick)/128秒) *****************************************************************************/
(0X3 <<3) /* 1/128
((PCLK/1000000-1) <<8)
/******************************************************************** // Function name : watchdog_init // Description : 看门狗初始化 // Return type : void // Argument :
extern unsigned char seg7table[]; /* 表示日期、时间的数据结构 */ typedef struct ST_DATE { short year; // 年 char mon; // 月 char day; // 日 char week_day; // 星期 char hour; // 时 char min; // 分 char sec; // 秒 } st_date;
/* 时钟数据为BCD码格式,以
"\b\b\b\b\b\b\b\b%02x:%02x:%02x", m_date.hour, m_date.min, m_date.sec); } }; } /***************************************************************************** // Function name : rtc_tick_isr // Description : TICK中断处理程序,程序中设置每秒钟引发一次中断 // 为避免看门狗复位在此处喂狗 // Return type : int // Argument : void *****************************************************************************/
实验八 看门狗实验
rALMYEAR = p_date->year; rALMMON = p_date->mon; rALMDATE = p_date->day; rALMHOUR = p_date->hour; rALMMIN = p_date->min; rALMSEC = p_date->sec; rRTCALM = mode; rRTCCON = 0x00; Irq_Enable(IRQ_RTC); } /***************************************************************************** // Function name : Main // Description : JXARM9-2410 看门狗实验主程序 // 完成功能: // 在实时时钟实验的基础上添加看门狗功能,并在时钟滴答 // 中断中实现喂狗处理. // // Return type : void // Argument : void *****************************************************************************/
实验八 看门狗实验
*********************************************************************/ void watchdog_init() { rWTCNT = 8448 * 2; /* 设置看门狗初始值 */ rWTCON = WDT_ENABLE | WDT_RST_ENABLE | WDT_CLK_SEL | WDT_PRE_SCALER; /* 打开看门狗 */ /* 打开看门狗 */ } /***************************************************************************** // Function name : rtc_set_date // Description : 修改实时时钟当前时间、日期 // Return type : void // Argument : p_date, 待设置的日期 *****************************************************************************/ void rtc_set_date(st_date* p_date) { rRTCCON = 0x01; rBCDYEAR = p_date->year; rBCDMON = p_date->mon; rBCDDAY = p_date->day; rBCDDATE = p_date->week_day; rBCDHOUR = p_date->hour; rBCDMIN = p_date->min; rBCDSEC = p_date->sec; rRTCCON = 0x00; }
实验八 看门狗实验
/* 全局变量 */ int led_index = 0; int ext0_count = 0; /* functions */ void rtc_tick_isr(void) __attribute__ ((interrupt("IRQ")));; void rtc_int_isr(void) __attribute__ ((interrupt("IRQ")));;
/* 中断初始化 */ Isr_Init(); /* 初始化端口 */ Port_Init(); /* 初始化串口 */ Uart_Init(0,115200); Uart_Select(0); /* 打印提示信息 */ PRINTF("\n---看门狗测试程序---\n"); PRINTF("\n请将UART0与PC串口进行连接,然后启动超级终端程序 (115200, 8, N, 1)\n"); PRINTF("\n看门狗测试开始\n");
实验八 看门狗实验
/* 采用BCD编码,如2004年需要设置的值为0x2004 */ ********* /* 修改当前日期和时间 */ rtc_set_date(&m_date); m_date.sec = 0x05 ;
/* 设置告警的时间及方式,0x41表示使能RTC告警,以及使能秒时钟告警 */ *********** rtc_tick_init(127); // TODO /* 打开看门狗复位功能 */ old_index = led_index; PRINTF("请在2秒内喂狗,否则系统将在约2秒后复位\n\n");
实验八 看门狗实验
while(1) { if(old_index != led_index) */ { rtc_get_date(&m_date); old_index = led_index; 16进制显示 */ PRINTF( /* 每隔一秒更新一次数据
实验八 看门狗实验
一、实验目的 1、了解WATCHDOG的作用; 2、掌握WATCHDOG定时器的使用方法。 二、实验仪器 JXARM9-2440教学实验箱、ADT1000仿真器和ADT IDE 集成开发环境、串口连接线、PC机。
实验八 看门狗实验
三、实验原理 省略。
实验八 看门狗实验
#define WDT_ENABLE #define WDT_INT_ENABLE #define WDT_RST_ENABLE
#define WDT_CLK_SEL */ #define WDT_PRE_SCALER /* 49 */