8051单片机看门狗原理C语言演示程序(以STC89C52RC单片机为例包含最简单的程序只有三条)
C51单片机看门狗电路及程序设计方案
C51单片机看门狗电路及程序设计案院系:信息工程学院年级:2010级电子一班禹豪电子一班训虎电子二班邓启新一、引言在由单片机构成的微型计算机系统中,程序的正常运行常常会因为来自外界的电磁场干扰等原因而被打断,从而造成程序的跑飞,而陷入死循环。
由此导致单片机控制的系统无法继续工作,造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片或程序,俗称"看门狗"(watchdog)(1)看门狗电路基本原理看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连**,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
*此处设计原理实际上为下文中硬件看门狗设计思路。
(2)看门狗电路一般设计式“看门狗”电路一般分为硬件看门狗与软件看门狗两种设计式。
硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位。
如果出现死循环,或者说PC指针不能回来,那么定时时间到后就会使单片机复位。
常用的WDT芯片如MAX813,5045,IMP 813等,价格4~10元不等.软件看门狗技术的原理和硬件看门狗类似,只不过是用软件的法实现(即利用单片机部定时器资源,通过编程模拟硬件看门狗工作式),以51系列为例:因在51单片机中有两个定时器,在利用部定时器资源来对主程序的运行进行监控时。
看门狗
看门狗百科名片单片机"看门狗"在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"(watchdog)目录应用基本原理看门狗使用注意看门狗运用设计思路编辑本段应用看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
编辑本段基本原理看门狗,又叫watchdog timer,是一个定时器电路, 一般有一个输入,叫喂狗(kicking the dog or service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一端时间输出一个信号到喂狗端,给WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就会给出一个复位信号到MCU,使MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。
工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。
看门狗(WatchDog)
1.4 WatchDog 库函数
1. 运行控制
函数 WatchdogEnable( )的作用是使能看门狗。该函数实际执行的操作是使能看门狗中断 功能,即等同于函数 WatchdogIntEnable( )。中断功能一旦被使能,则只有通过复位才能被 清除。因此库函数里不会有对应的 WatchdogDisable( )函数。参见表 1.2 的描述。
i
广州周立功单片机发展有限公司 Tel:(020)38730923 38730976 Fax:38730925
第1章 看门狗(WatchDog)
函数原型 void WatchdogEnable(unsigned long ulBase) tBoolean WatchdogRunning(unsigned long ulBase) void WatchdogResetEnable(unsigned long ulBase) void WatchdogResetDisable(unsigned long ulBase) void WatchdogStallEnable(unsigned long ulBase) void WatchdogStallDisable(unsigned long ulBase) void WatchdogReloadSet(unsigned long ulBase, unsigned long ulLoadVal) unsigned long WatchdogReloadGet(unsigned long ulBase) unsigned long WatchdogValueGet(unsigned long ulBase) void WatchdogLock(unsigned long ulBase) void WatchdogUnlock(unsigned long ulBase) tBoolean WatchdogLockState(unsigned long ulBase) void WatchdogIntEnable(unsigned long ulBase) unsigned long WatchdogIntStatus(unsigned long ulBase, tBoolean bMasked) void WatchdogIntClear(unsigned long ulBase) void WatchdogIntRegister(unsigned long ulBase, void(*pfnHandler)(void)) void WatchdogIntUnregister(unsigned long ulBase)
单片机看门狗的描述
单片机看门狗的描述下面是关于STC89C5XX-51 单片机看门狗的描述WDT_CONTR 位置0xE1; [-] [-] [EN_WDT] [CLR_WDT] [IDLE_WDT] [PS2] [PS1] [PS0]EN_WDT: 看门狗允许位,置1 启动看门狗,看门狗不能自动启动,需要设置该位后启动,一旦启动不能关闭(只能系统重新上电和看门狗复位可以关闭)CLR_WDT: 看门狗计数器清零位,置1 清零看门狗计数器,当计数器开始重新计数,硬件清零该位。
IDLE_WDT: 单片机IDLE 模式看门狗允许位,当IDLE_WDT=1 时,单片机在IDLE 模式(空闲模式)依然启用看门狗PS2~PS0: 看门狗定时器预分频器,下表中Prescale 表示预分频数PS2 PS1 PS0 Prescale0 0 0 20 0 1 40 1 0 80 1 1 161 0 0 321 0 1 641 1 0 1281 1 1256看门狗溢出时间:(N*Prescale*32768)/晶振频率,其中N 表示指令周期数N=12 表示12 时钟周期模式;N=6 表示6 时钟周期模式。
如N=12,晶振频率为12MHz,PS2~PS0 为100 时,溢出时间=(12*32*32768)/12=1048576us,差不多是1s。
例如:给WDT_CONTR 写入0 乘以34,即是激活看门狗,同时预分频数设为32。
喂狗过程也是一样的。
顺便说一下ATMEL-51 单片机的看门狗下面是关于ATMEL-51 单片机看门狗的描述【看门狗计数器】(watchdog timer)是一个14 位的计数器,它以机器周期(晶振频率/12)增加,当计数值计满(16383/0 乘以3FFF)了就使单片机软复位;当启动了【看门狗计数器】之后,我们需要在它计数没有满之前复位计数器强制。
单片机看门狗(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死机。
看门狗的作用就是防止程序发生死循环,或者说程序跑飞。
工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。
所以,在使用有看门狗的芯片时要注意清看门狗。
C51单片机看门狗电路及程序设计方案解读
C51单片机看门狗电路及程序设计方案院系:信息工程学院年级:2010级电子一班刘禹豪电子一班赵训虎电子二班邓启新一、引言在由单片机构成的微型计算机系统中,程序的正常运行常常会因为来自外界的电磁场干扰等原因而被打断,从而造成程序的跑飞,而陷入死循环。
由此导致单片机控制的系统无法继续工作,造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片或程序,俗称"看门狗"(watchdog)(1)看门狗电路基本原理看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连**,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
(2)看门狗电路一般设计方式“看门狗”电路一般分为硬件看门狗与软件看门狗两种设计方式。
硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位。
如果出现死循环,或者说PC指针不能回来,那么定时时间到后就会使单片机复位。
常用的WDT芯片如MAX813,5045,IMP 813等,价格4~10元不等.软件看门狗技术的原理和硬件看门狗类似,只不过是用软件的方法实现(即利用单片机*此处设计原理实际上为下文中硬件看门狗设计思路。
内部定时器资源,通过编程模拟硬件看门狗工作方式),以51系列为例:因在51单片机中有两个定时器,在利用内部定时器资源来对主程序的运行进行监控时。
看门狗
看门狗(WatchDog)1.看门狗的作用•监测单片机程序的运行状态的芯片•看门狗(WatchDog)是计算机引入的一种专门的复位监控电路。
•一旦MCU运行出现故障,就强制对MCU进行硬件复位,确保MCU安全可靠运行。
复位嵌入式系统在无人值守的时候出现异常导致‘死机’现象看门狗的工作原理•MCU完成一次喂狗操作•在看门狗“饥饿”前等待下次操作•程序异常,喂狗超时,复位单片机•程序正常,狗被喂饱,等待再次喂狗•看门狗芯片和单片机的一个I/O口连接,该I/O口通过程序的控制定时的向看门狗送入高电平(低电平),这一程序分散的放在其他单片机控制程序之间,一旦单片机因为干扰跑飞进入死循环,写看门狗的程序就不能被执行,看门狗就会发出一个复位信号,复位单片机。
喂狗•看门狗就是一个计数器,由于位数有限计数器能够装的数值是有限的(比如8位的最多装256个数,16位的最多装65536个数),从开启看门狗那刻起,他就不停的数机器周期(12个时钟周期),输一个机器周期加1,加到计数器盛不下了(溢出)就产生一个复位信号,重启系统。
•我们在设计程序时,先根据看门狗计数器的位数和系统的时钟周期算一下计满数需要的时间,就是说在这个时间内看门狗计数器是不会装满的,然后在这个时间内告诉他重新开始计数,就是把计数器清零,这就是喂狗。
例子:•8051单片机选用12MHz晶振,一个机器周期为1us,如果看门狗是十六位的,最大计数65536个,那么从0开始计到65535需要65ms,所以我们可以在程序的50ms左右清零一次计数器(喂狗),让他从新从零开始计,再过50ms,再清,---,这样下去只要程序正常运行,计数器永远不会计满,也就永远不会被看门狗复位。
•看门狗都是启动之后就不能被关闭,只能系统复位(重新断电再上电)才能关闭。
看门狗的两个种类一般,看门狗主要是针对在实际应用环境中出现强烈干扰而导致程序意外跑飞的现象将看门狗的使用看为解决程序本身存在BUG导致跑飞的问题是一种误区AT89S52的看门狗定时器(WDT)•WDT由14位计数器和特殊功能寄存器中的看门狗复位存储器(WDTRST)构成。
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”时,启动看门狗。
单片机看门狗工作原理
单片机看门狗工作原理
单片机看门狗(Watchdog)是一种硬件电路,可监视程序运行的状态,并在程序出现故障或死锁的情况下,自动重启系统或执行特定的故障处理程序,保障系统的稳定运行。
单片机看门狗的工作原理如下:
1. 由程序周期性定时启动看门狗计数器,计数器的初始值需要预设。
2. 在规定的时间内(通常为几秒钟至十几秒钟),程序必须定时往计数器中喂给一个足够的脉冲,否则看门狗计数器就会超时。
3. 当看门狗超时时,看门狗电路会自动复位系统,并执行特定的故障处理程序。
4. 看门狗计数器重置后,上述过程会重新开始,保证系统在运行中不断重复的维护状态的监测,以确保系统的正常和可靠工作。
需要注意的是,单片机看门狗必须在程序中明确地初始化、启动和清除,以便防止误触和误操作,确保其正常可靠工作。
在程序中设置合适的看门狗定时器周期和喂狗脉冲,能够有效地保护单片机系统免受一些错误、异常、嵌套和死循环等异常情况的侵袭。
基于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 寄存器,其相应功能见下个知识点。
看门狗的实现
标题:单片机看门狗电路2009-04-22 10:50:3651单片机看门狗电路采用89C51单片机和X25045组成的看门狗电路,X25045硬件连接图如图2所示。
X25045芯片内包含有一个看门狗定时器,可通过软件预置系统的监控时间。
在看门狗定时器预置的时间内若没有总线活动,则X25045将从RESET输出一个高电平信号,经过微分电路C2、R3输出一个正脉冲,使CPU复位。
图2电路中,CPU的复位信号共有3个:上电复位(C1、R2),人工复位(S、R1、R2)和Watchdog复位(C2、R3),通过或门综合后加到RESET端。
C2、R3的时间常数不必太大,有数百微秒即可,因为这时CPU的振荡器已经在工作。
图2 X25045看门狗电路硬件连接图看门狗定时器的预置时间是通过X25045的状态寄存器的相应位来设定的。
如表2所示,X25045状态寄存器共有6位有含义,其中WD1、WD0和看门狗电路有关,其余位和EEPROM的工作设置有关。
表2 X25045状态寄存器WD1=0,WD0=0,预置时间为1.4s。
WD1=0,WD0=1,预置时间为0.6s。
WD1=1,WD0=0,预置时间为0.2s。
WD1=1,WD0=1,禁止看门狗工作。
看门狗电路的定时时间长短可由具体应用程序的循环周期决定,通常比系统正常工作时最大循环周期的时间略长即可。
编程时,可在软件的合适地方加一条喂狗指令,使看门狗的定时时间永远达不到预置时间,系统就不会复位而正常工作。
当系统跑飞,用软件陷阱等别的方法无法捕捉回程序时,则看门狗定时时间很快增长到预置时间,迫使系统复位。
以下是C语言编写的看门狗程序部分。
#include reg51.hsbit cs=P1^2;/*片选信号由P1.2产生*/sbit sck=P1^3; /*时钟信号由P1.3 产生*/sbit si=P1^0; /*SI由P1.0产生*/sbit so=P1^1; /*SO由P1.1产生*/sbit c=ACC^7; /*定义位变量*/bdata unsigned char com;void tran() /*发送一字节数据子函数*/{unsigned char i;for(i=0; i<8; i++){ ACC=com; /*将数据放入a中*/si=c;sck=0; /*sck产生一个上跳变*/sck=1;com=com<<1; /*左移一位*/}return;}main(){com=0x06; /*发写读使能命令*/cs=0;tran();cs=1;com=0x01; /*发写状态字命令*/cs=0;tran();com=0x00; /*定时1.4s*/tran();cs=1;...;系统正常运行的程序部分}需要注意的是,在程序正常运行的时候,应该在适当的地方加一条喂狗指令,使系统正常运行时的定时时间达不到预置时间。
单片机任务型软件_看门狗_原理及应用
借助单片机中的定时器中断机制, 每个任务分配计时单元 和运行标志位,由定时中断依据运行标志位状态独立计时, 任 务正常完成时, 运行标志位和计时单元均恢复到非运行状态描 述。在主程序循环中, 任务的限时判断模块独立于原任务处理 它只是对任务运行的时间进行判断, 如 模块之外, 如图 2 所示, 果服务时间超过了正常的运行时间, 则复位这个任务, 即将其 使用的有关资源, 恢复到任务开始前的初始状态, 供下一次任 务使用, 从而实现了任务型软件“ 看门狗” 的功能, 避免了相同 任务之间的干扰。
器的控制命令, 如重起操作系统等。 以下是统计管理程序和中央监控程序通信数据报的结构:
9:; 应 用 程 序 到 目 录 7 <=> 7 ?@AB? 7 C:;+ 后 , 在 文 件 7 :DA 7 :EF@>D=
中添加 一 行 7 <=> 7 ?@AB 7 C:;= ( , 这表明这个目录可以在装载 >C ) 并有读写权限。在每个真实服务 56+ 的任何远程系统上使用, 器上, 在其文件 7 :DA 7 G=DB; 中添加下面一行: &"$&&$3$’ : 7 <=> 7 ?@AB? 7 C:;= 7 <=> 7 ?@AB? 7 D@HABD 7 C:;BFF= 7 IJJK 7 CLMN=@GD, 将 C:;= 映射为本地目录 7 <=> 7 ?@AB? 7 D@HABD 7 C:;BFF= 7 IJJK 7
文章编号 &""!12%%&1( !""# ) %#1"&!!1"!
!"#$%#&’( )$* +&&’#%),#-$ -. /-.,01),%2*-3 4(%2$-’-35 .-" 6)%2 4)78 #$ 9:;
51单片机 c语言看门狗程序怎么写
51单片机c语言看门狗程序怎么写看门狗在51单片机电路里的作用是防止程序“跑飞”、“死机”后,系统不动作,而采取复位的办法“唤醒”系统。
89S51、89S52系列单片机自带有看门狗功能,片内数据区A6H寄存器具有看门狗功能,使用很简单:#include<reg51.h>...sfr WDTRST = 0xA6;...void main(){WDTRST=0x1E;;//初始化看门狗WDTRST=0xE1;//初始化看门狗for(;;){WDTRST=0x1E;;//喂狗指令WDTRST=0xE1;//喂狗指令}}可见,你只要在程序的大循环体内加一条喂狗指令就行。
但这种看门狗功能有限,不是很可靠的,它依靠晶振工作,一旦晶振不起振,就无效了。
实践中多采用外部看门狗的方法,可以选用的芯片很多:MAX708、MAX813、X25045.....具体编程就要看芯片的参考资料了。
例如:X25045是SPI总线的看门狗芯片,复位端和单片机复位端连接,SPI数据输入你可以选择合适的IO接口。
WREN 0x06 设置写允许位WRDI 0x04 复位写允许位RDSR 0x05 读状态寄存器WRSR 0x01 写状态寄存器READ 0x03/0x0b 读操作时内部EEPROM页地址WRITE 0x02/0x0a 写操作时内部EEPROM页地址#include <reg51.h>sbit CS= P2^7;sbit SO= P2^6;sbit SCK= P2^5;sbit SI= P2^4;#define WREN 0x06 //#define WRDI 0x04 //#define RDSR 0x05 //#define WRSR 0x01 //#define READ0 0x03 //#define READ1 0x0b //#define WRITE0 0x02 //#define WRITE1 0x0a //#define uchar unsigned charuchar ReadByte() //read a byte from device{bit bData;uchar ucLoop;uchar ucData;for(ucLoop=0;ucLoop<8;ucLoop++){SCK=1;SCK=0;bData=SO;ucData<<=1;if(bData){ ucData|=0x01; }}return ucData;}void WriteByte(uchar ucData)//write a byte to device {uchar ucLoop;for(ucLoop=0;ucLoop<8;ucLoop++){if((ucData&0x80)==0) //the MSB send first{SI=0;}else{SI=1;}SCK=0;SCK=1;ucData<<=1;}}uchar ReadReg() //read register{uchar ucData;CS=0;WriteByte(RDSR);CS=1;return ucData;}uchar WriteReg(uchar ucData) //write register{uchar ucTemp;ucTemp=ReadReg();if((ucTemp&0x01)==1) //the device is busyreturn 0;CS=0;WriteByte(WREN);//when write the WREN, the cs must have a high levelCS=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 busyCS=0;WriteByte(WREN); //when write the wren , the cs must have a high levelCS=1;CS=0;if(bRegion==0){ WriteByte(WRITE0);} //write the page addrelse{WriteByte(WRITE1);}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 busyCS=0;if(bRegion==0)else{WriteByte(READ1);}WriteByte(cAddress);cData=ReadByte();CS=1;return cData;}main(){WriteReg(0x00);//set the watchdog time as 1.4sCS=1;CS=0; //reset the watchdog}回复:xuzhimin9514所有的89S系列都带狗,所有的80C系列都不带狗。
(完整word版)C51单片机看门狗电路及程序设计方案解读
C51单片机看门狗电路及程序设计方案院系:信息工程学院年级:2010级电子一班刘禹豪电子一班赵训虎电子二班邓启新一、引言在由单片机构成的微型计算机系统中,程序的正常运行常常会因为来自外界的电磁场干扰等原因而被打断,从而造成程序的跑飞,而陷入死循环。
由此导致单片机控制的系统无法继续工作,造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片或程序,俗称"看门狗"(watchdog)(1)看门狗电路基本原理看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连**,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
(2)看门狗电路一般设计方式“看门狗”电路一般分为硬件看门狗与软件看门狗两种设计方式。
硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位。
如果出现死循环,或者说PC指针不能回来,那么定时时间到后就会使单片机复位。
常用的WDT芯片如MAX813,5045,IMP 813等,价格4~10元不等.软件看门狗技术的原理和硬件看门狗类似,只不过是用软件的方法实现(即利用单片机*此处设计原理实际上为下文中硬件看门狗设计思路。
内部定时器资源,通过编程模拟硬件看门狗工作方式),以51系列为例:因在51单片机中有两个定时器,在利用内部定时器资源来对主程序的运行进行监控时。
STC89C52RC单片机存储以及引脚应用和定时器2及看门狗定时
表 4 定时器 2 工作方式
RCLK+TCLK 0 0 1 X 1、捕获模式Βιβλιοθήκη CP/RL2 0 1 X X
TR2 1 1 1 0
模式 16 位自动重装 16 位捕获 波特率发生器 (关闭)
在捕获模式中,通过 T2CON 中的 EXEN2 设置 2 个选项。如果 EXEN2=0, 定时 器 2 作为一个 16 位定时器或计数器(由 T2CON 中的 C/������2位选择) ,溢出时置位 TF2(定时器 2 溢出标志位) 。该位可用于产生中断(通过使能 IE 寄存器中的定 时器 2 中断使能位) 。如果 EXEN2=1,与以上描述相同,但增加了一个特性,即 外部输入 T2EX 由 1 变 0 时, 将定时器 2 中 TL2 和 TH2 的当前值各自捕获到 RCAP2L 和 RACP2H。另外,T2EX 的负跳变使 T2CON 中的 EXF2 置位,EXF2 也像 TF2 一样 能够产生中断 (其向量与定时器 2 溢出中断地址相同,定时器 2 中断服务程序通 过查询 TF2 和 EXF2 来确定引起中断的事件) , 捕获模式如图 X 所示。 在该模式中, TL2 和 TH2 勿重新装载值,甚至当 T2EX 产生捕获时间时,计数器仍以 T2EX 的负 跳变或振荡频率的 1/2(12 时钟模式)或 1/6(6 时钟模式)计数。
定时器 2 是一个 16 位定时/计数器。通过设置特殊功能寄存器 T2CON 中的 C/T2 位,可将其作为定时器或计数器(特殊功能寄存器 T2CON 的描述如表 2 所 列) 。定时器 2 有 3 种操作模式:捕获、自动重新装载(递增或递减计数)和波 特率发生器,这 3 种模式由 T2CON 中的位进行选择(如表 2 所列) 表1 STC89C52RC 的特殊功能寄存器
8051单片机c语言程序设计与实例解析
8051单片机C语言程序设计与实例解析在现代电子技术领域,单片机是一种应用十分广泛的微处理器,而在单片机的应用中,8051单片机是一种非常经典的代表。
与此C语言作为一种高级编程语言,在单片机的程序开发中也有着广泛的应用。
本文将从8051单片机C语言程序设计的角度,对其进行深度和广度兼具的解析,通过实例来帮助读者更好地理解和掌握这一技术。
1. 8051单片机概述8051单片机是由Intel公司于上世纪80年代推出的一款经典单片机,至今仍然广泛应用于各种领域。
它的特点是体积小、功能强大、接口丰富,以及使用方便等。
在实际应用中,我们可以根据不同的需求选择不同型号的8051单片机,比如常见的AT89S52、AT89C52等。
2. C语言在8051单片机中的应用C语言作为一种高级编程语言,具有结构化、模块化和可移植性等优点,因此在单片机的程序设计中有着广泛的应用。
通过C语言编程,我们可以更轻松地实现对单片机的控制和管理,而且代码的可读性也更好,易于维护和修改。
3. 程序设计与实例解析接下来,我们将结合具体的实例来说明8051单片机C语言程序设计的方法和技巧。
我们可以以LED灯的控制、数码管的显示、蜂鸣器的驱动等为例,详细讲解如何使用C语言编写程序,通过8051单片机实现相应的功能。
我们也可以讲解一些常用的库函数和编程技巧,让读者能够更好地理解和应用这些知识。
4. 个人观点与理解在我看来,8051单片机C语言程序设计是一项非常有趣和有挑战性的工作。
通过编写程序,我们可以将自己的想法转化为现实,实现各种各样的功能,这种成就感是非常有价值的。
掌握了这项技能之后,我们也能够更好地应对各种实际问题,为自己的学习和职业发展打下良好的基础。
总结回顾通过本文的阐述,我们对8051单片机C语言程序设计进行了全面的评估和解析,从基本概念到具体实例,再到个人观点和理解,希望读者能够从中受益。
通过不断地实践和学习,我们相信大家一定能够掌握这一领域的知识,成为优秀的单片机程序设计工程师。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
***************************************************************************/
#include <Reg52.H>
sfr WDT_CONTR=0xE1;
//定义特殊功能寄存器:STC 单片机看门狗控制寄存器
#define uchar unsigned char
//初始化时两盏灯都熄灭 LED=1; LED_busy=1;
TMOD=0x21; 为串行口波特率发生器
TH0=0x4C; TL0=0x00; IE=0x82; TR0=1;
//定时器 0 工作在方式 1,作为 16 位定时器;定时器 1 工作在方式 2,作
//定时器 0 装初值:每隔 50ms 溢出一次
#define true 1
#define false 0
#define WEIGOU WDT_CONTR=0x34
//看门狗启动设置和“喂狗”操作
sbit LED=P1^6; sbit LED_busy=P1^7;
//信号灯,系统正常工作就一闪一闪的 //工作灯,上电灭一会儿(约 800ms),然后正常工作的时
注解:这里顺便说一下,一般教材上叫“看门狗定时器”,其实定时器原理 还是计数器,只是计的是时钟周期,所以我为了初学者好理解叫统一叫“计数 器”,这里阐明一下。
明白了上面的原理,我们在设计程序时,先根据看门狗计数器的位数和系统 的时钟周期算一下计数器计满数需要的时间,就是说在这个时间内“看门狗”计 数器是丌会装满的,然后在这个时间内告诉它重新开始计数,就是把计数器清零,
由于现在 AT89S52 用的很广泛,所以我先说说 ATMEL 的看门狗;再说说本次试验用的 STC89C52RC 的看 门狗;注意两个不一样!!!
★下面是关于 ATMEL-51 单片机看门狗的描述 【看门狗计数器】(watchdog timer)是一个 14 位的计数器,它以机器周期(晶振频率/12)增加,
~6~
关于实验的注意事项:
1. 本次试验使用的是 11.0592MHz 晶振,设置 WDT_CONTR=(0011 0100)B,32 预分频,单片机使用 12 指令周期模式。
计算看门狗溢出时间:[12*32*32768/(11059200)]≈1s。 2. 本次试验的硬件电路很简单,就是最小系统上增加两个 LED 灯,原理图见正文,用户可以很容易实现。
如果没有我们的实验板,请按照下面的硬件原理图自己在最小系统上搭建一 个实验环境也很容易。 硬件电路图:
图 1. STC89C52 最小单片机系统+两个指示灯
~4~
图 2. 串行口接口(用于下载程序和测试本次试验) 实验现象及解释: 1. 我们设置 32 分频,看门狗溢出时间约为 1s。 2. 如果系统正常运行:
STC89C5X 系 列 单 片 机 由 于 采 用 了 “ 预 分 频 技 术 ” , 它 的 溢 出 时 间 是 =(N*Prescale*32768)/晶振频率(不要问我为什么,他们就是这么设计的,我们就 这么用就行)。
其中 N 是单片机的时钟周期,STC89C5X 系列单片机提供 6 时钟周期和 12 时钟周期两种时钟周期,可以在烧写程序时修改;
当计数值计满(16383/0x3FFF)了就使单片机软复位; 当启动了【看门狗计数器】之后,我们需要在它计数没有满之前复位计数器强制它不能够溢出,这个
过程称作喂狗。
"看门狗"原理: 1. 系统上电并不启动看门狗计数器,通过设置【看门狗重置寄存器(WDTRST SFR)】启动【看门狗计 数器】,一般设置是给 WDTRST 写入 0x1E 和 0xE1 启动; 2. 【看门狗计数器】一旦启动不可停止,除非是硬件 RST 或者看门狗的软复位才能使其停止; 3. 设计程序在适当的时间喂狗一次,使其不能计满,程序就能不间断执行; 4. 如果程序中出现死循环或者执行某一步超时,看门狗计数器就会计满溢出,(这个时候我们认为程 序没有按照预定计划执行--程序跑飞),则复位系统。
很多人初次接触丌太理解怎么用,书上也讲的含含糊糊,故意说的很复杂很 玄妙(可能是现在写书人的通病,生怕写的简单的别人觉得他没水平)。其实要 是说明白点:“看门狗”就是一个计数器,由于位数有限计数器能够装的数值是有 限的(比如 8 位的最多装 256 个数、16 位的最多装 65536 个数),从开启“看门狗” 那刻起,它就开始丌停的数机器周期,数一个机器周期就计数器加1,加到计数 器盛丌下了(术语叫溢出)就就产生一个复位信号,重启系统。
unsigned x,y; for(x=xms; x>0; x--)
for(y=110; y>0; y--);********************************************/
/*************************************************************************/ //主程序初始化函数 void InitMain() {
★下面是关于 STC89C5XX-51 单片机看门狗的描述(详细请看 STC89C51RC-RD 单片机使用说明) WDT_CONTR 位置 0xE1; [-] [-] [EN_WDT] [CLR_WDT] [IDLE_WDT] [PS2] [PS1] [PS0] EN_WDT: 看门狗允许位,置 1 启动看门狗,看门狗不能自动启动,需要设置该位后启动,一旦启
候一直亮着;用于指示系统是否重启
uchar timer0_ctr,i;
const uchar str[]="I love MCU!"; //定义一句话,让他从串口输出,只有系统重启的时候才输 出一次,所以也是用于验证看门狗有没有重启系统
/*************************************************************************/ //延时函数,11.0592MHz 晶振下延时约 xms 毫秒 void delay_ms(unsigned xms) {
上电会通过串行口发送一次“I love MCU!”字符串,通过串口调试助手可 以查看;
同时信号灯每隔 1.5s 闪一下; 工作指示灯在上电约 800ms 会点亮,只要系统正常运行会一直亮着。 3. 我们通过设置 while 大循环中的延时时间来调节喂狗时间,如果在 1s 内喂狗, 系统会正常运行,如果超过 1s,比如 2 秒喂狗一次,那么看门狗就会复位系 统,表现的现象就是:通过串口不停地发送字符串,同时两盏灯都不亮。
//IE=(1000 0010)B, 使能定时器 0 中断 //启动定时器 0
看门狗定时器预分频器,下表中 Prescale 表示预分频数
PS0 Prescale
根据时间不同的需要选择分频系数
0
0
0
2
0
0
1
4
0
1
0
8
0
1
1
16
1
0
0
32
1
0
1
64
1
1
0
128
1
1
1
256
看门狗溢出时间:(N*Prescale*32768)/晶振频率,其中 N 表示指令周期数 N=12 表示 12 时钟周 期模式;N=6 表示 6 时钟周期模式
~1~
这个过程叫“喂狗”,这样隔一段时间喂一次狗,只要程序正常运行他就永远计 丌满,一旦出现死循环之类的故障,没有及时来清零计数器,就会导致装满了溢 出,他就重启系统,这就是看门狗的看门原理,其实想想傻傻的、笨笨的。
举个例子说:8051 单片机选用 12MHz 晶振,一个时钟周期为 1us,如果“看 门狗计数器”是 16 位的,最大计数 65536 个,那么从 0 开始计到 65535 需要约 65ms, 所以我们可以在程序的 50ms 左右清零一次计数器(“喂狗”),让他重新从 0 开始 计,再过 50ms,再清,……,这样下去只要程序正常运行,计数器永远不会计 满,也就永远不会被“看门狗”复位。当然这个喂狗的时间是大家自己选的,只要 不超过 65ms,你选多少都可以,一般不要喂得太勤,这样单片机运行时间浪费 了,比如你 1ms 喂一次就太勤了,也不要说那我 65ms 喂一次,这样太边缘,这 样抗干扰能力就下降了,最好是留一定的余量,这个就是设计者自己掌握了,我 一般是让计到 90%左右就清一次。
每种单片机的“看门狗”实现方法丌尽相同,但是原理都一样,而且“看门 狗”都是启动了之后就丌能被关闭,只能系统复位(重新断电在上电)才能关闭。 设置“看门狗”的一般步骤如下:
1. 设置“看门狗”相关寄存器, 启动“看门狗”; 2. 隔一段时间清零一次,“喂狗”; 3. 如果程序正常,一直运行;如果程序出错,没有按时“喂狗”,“看门狗”就 在溢出的时候复位系统。
Prescale 是预分频数,通过设置【看门狗控制寄存器】可以设置为 2、4、 8、16、32、64、128、256;
晶振频率就是系统选用的晶振。 所以如果同样选择 12MHz 晶振,使用传统的 12 时钟周期,它最小的溢出时 间是 (12*2*32768 ) /(12*106)=65.536ms , 最大 溢出时间是 (12*256*32768 ) /(12*106)≈8.38s。如果选择 256 分频,也就是说只要在 8.38 秒之内喂一次狗就可 以了。戏谑的说:这只狗比较抗饿,~~ 对于我们用户来说,看门狗的时间是越长越好,这样可以节省更多的单片机 资源,尤其是对时间要求精准的系统,如果执行过程中我们丌停地“喂狗”,那 么是比较浪费时间的。所以 STC89C5X 系列单片机的看门狗更有优势一些。当 然这个也是个人的选择,如果对时间要求的丌苛刻的话,勤喂几次狗也没关系。
~5~