8051单片机“看门狗”原理、详解和C语言演示程序

合集下载

ST单片机:独立看门狗和窗口看门狗

ST单片机:独立看门狗和窗口看门狗

ST单片机:独立看门狗和窗口看门狗
STM32单片机中有两只看门狗,分别是独立看门狗和窗口看门狗。

这两只看门狗有什么区别,今天来看一下。

1. 时钟源的区别
▪独立看门狗使用的是内部低速时钟,其频率为40kHz,但是这个40KHz不是准确的,其大致的范围是(30-60)KHz。

该时钟与外设时钟无关,所以不受系统晶振影响。

▪窗口看门狗使用的是PCLK1的时钟,该时钟与晶振相关。

2. 喂狗时间不同
▪独立看门狗喂狗时只要下限大于0就可以,上限是0XFFF。

而窗口看门狗必须在一个区域内喂狗才可以,上限是0x7F,下限是0X40,
3. 计数器不同
▪独立看门狗的计数器是12位递减的,即最大值是0XFFF;
▪窗口看门狗的计数器是7位递减的,即最大值是0X7F;
4. 产生结果不同
▪独立看门狗时,如果超时不喂狗,则直接产生复位,程序从头执行;
▪独立看门狗会在计数器到达0X40时产生中断,在0X3F时产生复位,所以可以把独立看门狗看成是一种中断。

使用用途举例
▪独立看门狗可以用来防止程序跑飞,在程序中开启看门狗,定时喂狗,尤其在通讯中使用广泛,当逻辑处理不当,使程序一直处于发送或接收状态不退出时,这时独立看门狗可以使程序复位,程序从头执行。

▪窗口看门狗可以产生中断,利用这一特点可以用来进行数据保存,当产生窗口看门狗中断时,可以用来保存数据。

C8051F020单片机初始化程序和编译步骤

C8051F020单片机初始化程序和编译步骤

C8051F020单片机初始化程序和编译步骤2011-02-15 12:20:06| 分类:默认分类| 标签:|字号大中小订阅C8051F020编程步骤一、编程步骤:1、看门狗设置2、系统初始化3、端口初始化4、对应功能初始化(如:串口,定时器,I2C,SPI,PCA,DAC/ADC,中断等等)5、功能函数或中断函数(如需要)6、包含的头文件7、项目说明二、对应功能初始化要点:1、Uart:(1)串口工作模式由SCON设定(2)定时器工作方式设定TMOD (3)波特率TH 载入值设定(4)启动TR1 (5)时钟基准CKCON (6)波特率加倍设定PCON(7)开中断使能TI2、Time:(1)工作方式设定TMOD (2)定时器时钟基准CKCON (3)启动/停止TCON设定TRn3、Interrupt:(1)中断允许IE (2)触发方式设定(上下沿,电平)(3)对应控制位允许设定,如ES串口允许C8051F020单片机初始化程序; $INCLUDE (C8051F020.inc) /C8051F020单片机功能强大,初始化也比较繁杂,为了便于初始化各功能模块,我们编了此程序可看着“说明”初始化。

ORG SYS_INIT;※▲◆●◎★☆△;◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆;■-- <1> --电源管理; PCON ; POWER CONTROL;■-- <2> --系统时钟和振荡器; OSCXCN ; EXTERNAL OSCILLA TOR CONTROL; OSCICN ; INTERNAL OSCILLA TOR CONTROL;■-- <3> --复位及看门狗管理; RSTSRC ; RESET SOURCE; WDTCN ; W A TCHDOG TIMER CONTROL;■-- <4> --FLASH存储器编程和安全管理; FLSCL ; FLASH MEMORY TIMING PRESCALER; PSCTL ; PROGRAM STORE R/W CONTROL; FLACL ; FLASH ACESS LIMIT;■-- <5> --中断控制; IE ; INTERRUPT ENABLE; EIE1 ; EXTERNAL INTERRUPT ENABLE 1; EIE2 ; EXTERNAL INTERRUPT ENABLE 2; IP ; INTERRUPT PRIORITY; EIP1 ; EXTERNAL INTERRUPT PRIORITY REGISTER 1; EIP2 ; EXTERNAL INTERRUPT PRIORITY REGISTER 2; P3IF ; PORT 3 EXTERNAL INTERRUPT FLAGS;■-- <6> --端口IO初始化及交叉开关设置; XBR0 ; DIGITAL CROSSBAR CONFIGURA TION REGISTER 0; XBR1 ; DIGITAL CROSSBAR CONFIGURA TION REGISTER 1; XBR2 ; DIGITAL CROSSBAR CONFIGURA TION REGISTER 2; P0MDOUT ; PORT 0 OUTPUT MODE CONFIGURA TION; P1MDOUT ; PORT 1 OUTPUT MODE CONFIGURA TION; P2MDOUT ; PORT 2 OUTPUT MODE CONFIGURA TION; P3MDOUT ; PORT 3 OUTPUT MODE CONFIGURA TION; P74OUT ; PORTS 4 - 7 OUTPUT MODE;■-- <7> --外部RAM和片内XRAM; EMI0CN ; EXTERNAL MEMORY INTERFACE CONTROL; EMI0CF ; EXTERNAL MEMORY INTERFACE (EMIF) CONFIGURA TION ; EMI0TC ; EXTERNAL MEMORY;■-- <8> --定时器设置; TMOD ; TIMER MODE; TCON ; TIMER CONTROL; T2CON ; TIMER 2 CONTROL; T4CON ; TIMER 4 CONTROL; TMR3CN ; TIMER 3 CONTROL; TMR3RLL ; TIMER 3 RELOAD REGISTER - LOW BYTE; TMR3RLH ; TIMER 3 RELOAD REGISTER - HIGH BYTE; TMR3L ; TIMER 3 - LOW BYTE; TMR3H ; TIMER 3 - HIGH BYTE;■-- <9> --串行通讯; SCON0 ; SERIAL PORT 0 CONTROL; SCON1 ; SERIAL PORT 1 CONTROL; SBUF1 ; SERAIL PORT 1 DA TA; SADDR1 ; SERAIL PORT 1; PCON ; POWER CONTROL; RCAP2L ; TIMER 2 CAPTURE REGISTER - LOW BYTE; RCAP2H ; TIMER 2 CAPTURE REGISTER - HIGH BYTE; RCAP4L ; TIMER 4 CAPTURE REGISTER - LOW BYTE; RCAP4H ; TIMER 4 CAPTURE REGISTER - HIGH BYTE; SADDR0 ; SERIAL PORT 0 SLA VE ADDRESS;■-- <10> --可编程计数器阵列; PCA0CN ; PCA 0 COUNTER CONTROL; PCA0MD ; PCA 0 COUNTER MODE; PCA0CPM0 ; CONTROL REGISTER FOR PCA 0 MODULE 0; PCA0CPM1 ; CONTROL REGISTER FOR PCA 0 MODULE 1; PCA0CPM2 ; CONTROL REGISTER FOR PCA 0 MODULE 2; PCA0CPM3 ; CONTROL REGISTER FOR PCA 0 MODULE 3; PCA0CPM4 ; CONTROL REGISTER FOR PCA 0 MODULE 4;■-- <11> --SMBus通讯; SMB0CN ; SMBUS 0 CONTROL; SMB0CR ; SMBUS 0 CLOCK RA TE; SMB0STA; SMBUS 0 STA TUS; SMB0DA T ; SMBUS 0 DA TA; SMB0ADR ; SMBUS 0 SLA VE ADDRESS;■-- <12> --SPI总线通讯; SPI0CKR ; SERIAL PERIPHERAL INTERFACE 0 CLOCK RA TE CONTROL ; SPI0DA T ; SERIAL PERIPHERAL INTERFACE 0 DA TA; SPI0CFG ; SERIAL PERIPHERAL INTERFACE 0 CONFIGURA TION; SPI0CN ; SERIAL PERIPHERAL INTERFACE 0 CONTROL;-- <13> --ADC转换; AMX0CF ; ADC 0 MUX CONFIGURA TION; AMX0SL ; ADC 0 MUX CHANNEL SELECTION; ADC0CF ; ADC 0 CONFIGURA TION; ADC0CN ; ADC 0 CONTROL; ADC0L ; ADC 0 DA TA - LOW BYTE; ADC0H ; ADC 0 DA TA - HIGH BYTE; ADC1CF ; ADC 1 ANALOG MUX CONFIGURA TION; AMX1SL ; ADC 1 ANALOG MUX CHANNEL SELECT; ADC1CN ; ADC 1 CONTROL; ADC0GTL ; ADC 0 GREA TER-THAN REGISTER - LOW BYTE; ADC0GTH ; ADC 0 GREA TER-THAN REGISTER - HIGH BYTE; ADC0LTL ; ADC 0 LESS-THAN REGISTER - LOW BYTE; ADC0LTH ; ADC 0 LESS-THAN REGISTER - HIGH BYTE; REF0CN ; VOLTAGE REFERENCE 0 CONTROL; ADC1 ; ADC 1 DA TA;■-- <14> --DAC转换; PCA0L ; PCA 0 TIMER - LOW BYTE; PCA0H ; PCA 0 TIMER - HIGH BYTE; DAC0CN ; DAC 0 CONTROL; DAC1L ; DAC 1 REGISTER - LOW BYTE; DAC1H ; DAC 1 REGISTER - HIGH BYTE; DAC1CN ; DAC 1 CONTROL;■-- <15> --比较器设置; CPT0CN ; COMPARA TOR 0 CONTROL; CPT1CN ; COMPARA TOR 1 CONTROL; EMI0TC ; EMIF TIMING CONTROL;■-- <16> --时钟/电压基准设置; CKCON ; CLOCK CONTROL; SADEN1 ; SERIAL PORT 1 SLA VE ADDRESS MASK; SADEN0 ; SERIAL PORT 0 SLA VE ADDRESS MASK; P1MDIN ; PORT 1 INPUT MODE; PSW ; PROGRAM STA TUS WORD; B ; B REGISTER; WDTCN ; W A TCHDOG TIMER CONTROL;◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆;;==================================================================== ; function: Init_CTS 定时器/计数器,中断和串行通讯初始化子程序; input: -----------------; output: -----------------; usage: -----------------;==================================================================== THS0 equ 0a8hTLS0 equ 09ah; THS1 equ 0fah;0feh;0fah;-4800;0f4h; TLS1 equ 0fah;0feh;0fah;-4800;0f4h;; THS2 equ 0ffh;0feh;0fah;-4800;0f4h; TLS2 equ 0b8h;0feh;0fah;-4800;0f4hInit_TCS: ;定时器/计数器,中断和串行通讯初始化子程序;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓; ◆◆◆8051内部控制寄存器◆◆◆;****************************************************************************** ******;|名称| 代号| 地址|位寻| B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |;|--------|------|------|----|-----|------|------|------|------|------|------|------|;|电源控制| PCON | 87H | NO |SMOD | -- | -- | -- | GF1 | GF0 | PD | IDL |;|--------|------|------|----|-----|------|------|------|------|------|------|------|;|计时控制| TCON | 88H | YE |TF1 | TR1 | TF0 | TR0 | IE1 | IT1 | IE0 | IT0 |;|--------|------|------|----|-----|------|------|------|------|------|------|------|;|计时模式| TMOD | 89H | NO |1GA TE| 1C/T | 1M1 | 1M0 | 0GA TE| 0C/T | 0M1 | 0M0 | ;|--------|------|------|----|-----|------|------|------|------|------|------|------|;|串行控制| SCON | 98H | YE |SM0 | SM1 | SM2 | REN | TB8 | RB8 | TI | RI |;|--------|------|------|----|-----|------|------|------|------|------|------|------|;|中断允许| IE | A8H | YE |EA| -- | ET2 | ES | ET1 | EX1 | ET0 | EX0 |;|--------|------|------|----|-----|------|------|------|------|------|------|------|;|中断优先| IP| B8H | YE |-- | -- | PT2 | PS | PT1 | PX1 | PT0 | PX0 |;****************************************************************************** ******;时钟频率为:11.059200MHz;;机器周期为:12/fosc=1.085069μs;;CT0定时器设定延时为:2000μs;;CT0定时器工作于模式0;;CT0溢出处理采用中断方式;;CT0选择内部时钟;;CT0启动由TR0的0/1决定;;设定波特率为:4800bps;;串口0工作于方式1--T1定时器工作于方式2;;串口1工作于模式3--T2定时器用于波特率发生器4800bpsmov TH0, #THS0mov TL0, #TLS0; mov TH1, #THS1; mov TL1, #TLS1; mov TH2, #THS2; mov TL2, #TLS2;▲■-- <1> --电源管理;〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓;87H---PCON-------电源控制寄存器;复位值: 00000000;位7-2:保留。

看门狗——精选推荐

看门狗——精选推荐

看门狗看门狗,⼜叫 watchdog timer,是⼀个定时器电路, ⼀般有⼀个输⼊,叫喂狗,⼀个输出到MCU的RST端,MCU正常⼯作的时候,每隔⼀端时间输出⼀个信号到喂狗端,给 WDT 清零,如果超过规定的时间不喂狗,(⼀般在程序跑飞时),WDT 定时超过,就回给出⼀个复位信号到MCU,是MCU复位. 防⽌MCU死机. 看门狗的作⽤就是防⽌程序发⽣死循环,或者说程序跑飞。

⼯作原理:在系统运⾏以后也就启动了看门狗的计数器,看门狗就开始⾃动计数,如果到了⼀定的时间还不去清看门狗,那么看门狗计数器就会溢出从⽽引起看门狗中断,造成系统复位。

所以在使⽤有看门狗的芯⽚时要注意清看门狗。

硬件看门狗是利⽤了⼀个定时器,来监控主程序的运⾏,也就是说在主程序的运⾏过程中,我们要在定时时间到之前对定时器进⾏复位如果出现死循环,或者说PC指针不能回来。

那么定时时间到后就会使单⽚机复位。

TMS320F2812中涉及到看门狗的寄存器有:系统控制与状态寄存器SCSR,此寄存器包括看门狗覆盖位和看门狗中断使能/⽆效位。

⼀般系统复位时,看门狗模块使能。

F2812的看门狗模块有关寄存器:看门狗计数器寄存器(WDCNTR)15~8:Reserved7~0:WDCNTR 包含WD计数器的当前值,8位计数器以WDCLK速率连续增加。

如果计数器溢出,看门狗会初始化复位状态。

如果⽤⼀个有效的组合写WDKEY寄存器,那么计数器复位成0。

看门狗复位密钥寄存器(WDKEY)15~8:Reserved7~0:WDKEY 紧跟着OXAA写⼊OX55将清除WDCNTR位。

写⼊任何其他值则会⽴即使看门狗复位。

看门狗控制寄存器(WDCR)15~8:Reserved7:WDFLAG 看门狗复位状态标志位;6:WDDIS 向该位写1将使看门狗模块⽆效;写其他值⽴即复位。

5~3:⽆论何时执⾏写此寄存器的操作,⽤户必须总是将这些位写成1,0,1。

写其他值⽴即复位。

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

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)中。

看门狗(WatchDog)

看门狗(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)

单片机看门狗(Watchdog)的工作原理及其应用

单片机看门狗(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死机。

看门狗的作用就是防止程序发生死循环,或者说程序跑飞。

工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。

所以,在使用有看门狗的芯片时要注意清看门狗。

单片机看门狗程序

单片机看门狗程序
tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!
门狗”WDT的功能;此单片机看门狗由51hei独家提供LISTP=18F458INCLUDE”
P18F458.INC”
DEYHEQU0X20DEYLEQUDEYH+1
ORG0X00GOTOMAINORG0X30
;*************初始化子程序*****************INITIALCLRFTRISD;D口
;************单片机看门狗主程序
****************************MAINNOPCALLINITIAL;系统初始化
MOVLW0X00MOVWFPORTD;D口送00H,发光二极管亮
CALLDELAYMOVLW0XFFMOVWFPORTD;D口送FFH,发光二极管灭
LOOPGOTOLOOP;死循环,等待看门狗复位END
/*主程序*/main(){initial();/*初始化,设定看门狗的相关寄存器*/PORTD=
0X00;/*D口送00H,发光二极管亮*/DELAY();/*给予一定时间的延时*/PORTD
=0XFF;/*D口送FFH,发光二极管灭*/while(1){;}/*死循环,等待看门狗溢出
复位*/}
-------------------汇编语言版本的单片机看门狗程序----------------;此程序实现”看
单片机看门狗程序
/*此程序实现单片机”看门狗”WDT的功能*/
#include”p18f458.h”
unsignedlongi;
/*系统初始化子程序*/voidinitial(){TRISD = 0X00;/*D口设为输出*/}
/*延时子程序*/voue;}

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

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

C51单片机看门狗电路及程序设计方案院系:信息工程学院年级:2010级电子一班刘禹豪电子一班赵训虎电子二班邓启新一、引言在由单片机构成的微型计算机系统中,程序的正常运行常常会因为来自外界的电磁场干扰等原因而被打断,从而造成程序的跑飞,而陷入死循环。

由此导致单片机控制的系统无法继续工作,造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片或程序,俗称"看门狗"(watchdog)(1)看门狗电路基本原理看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连**,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。

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

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

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

常用的WDT芯片如MAX813,5045,IMP 813等,价格4~10元不等.软件看门狗技术的原理和硬件看门狗类似,只不过是用软件的方法实现(即利用单片机*此处设计原理实际上为下文中硬件看门狗设计思路。

内部定时器资源,通过编程模拟硬件看门狗工作方式),以51系列为例:因在51单片机中有两个定时器,在利用内部定时器资源来对主程序的运行进行监控时。

单片机应用系统中的_看门狗_电路及低成本实现

单片机应用系统中的_看门狗_电路及低成本实现

, 看 门 狗 电路 如 图 1 所 示. 图 中
! 63!
2008 年
商丘职业技术学院学报
74LS123 触发器的输入端接高电平 , 负脉冲触发 . 第一个触发器工作状态由单片机 P1 口的 P1 . 7 控制, 系统 开始工作时 , P1 . 7 向 2A 端输入一个负脉冲, 使 2Q 端产生一个正跳变, 但并不能触发第二个单稳态触发器 动作, 1Q 端仍为低电平. P1 . 7负触发脉冲的时间间隔取决于系统控制主程序运行周期 . 在单片机应用系统 应用程序设计中 , 软件流程要设计成循环结 构. 发出喂狗信号的指令包 含在主程序中, 使用 CLR P1 . 7和 SETB P1. 7 两条指令. 如果主程序运行周期小于单稳态触发器的暂态时间 , 则当单片机正常运行时 , 将不断 重新触发第二个单稳态触发器, 其输出端 2Q 端始终保持高电平, 1A 端保持高电平 , 第一个单稳态触发器就 不会产生动作. 如果单片机受到干扰 , 产生了死循环, 那么第二单稳态触发器的暂态时间内 , 就不会出现送 给 2A 端的负脉冲 , 第二个单稳态触发器脱离暂态 , 2Q 端回到低电平触发第一个单稳态触发器翻转到暂态 , 1Q 端产生脉冲信号, 使单片机可靠复位, 系统运行的可靠性大大提高.
[ 2 ] 374- 375
.
图 2 由计数器构成的 看门狗 电路
2 . 3 由门电路构成 看门狗 电路 在电路的设计中往往会有多余的门电路, 这时可以用作 看门狗 电路 , 既降低了成本, 又提高了电路的 可靠性 . 电路形式可以有很多种 , 特别在 89C1051 / 2051 的应用电路中, 利用其 P1 . 0 /P1. 1 口没有上拉电阻 的特点 , 可以用两个 CMOS 门电路 ( 本例中是六反相器 CD4069 中的两个空余反相器 ) 设计一个极简单的低 成本 看门狗 电路, 如图 3 . 由于需要的定时时间比较长 , 因此只能使用输入阻抗高的 CMOS 门电路, 当然也 ! 64!

基于51单片机的看门狗程序

基于51单片机的看门狗程序
/*写入一个字节,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;
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

单片机汇编语言实现看门狗

单片机汇编语言实现看门狗

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

51单片机的看门狗

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 Timer,WDT)功能应运而生。

看门狗是一种用于监控程序运行状态的设备,当程序因错误而无法正常工作时,看门狗会自动复位系统,从而保证系统的稳定运行。

为了提高对看门狗功能的理解和应用能力,本次实训旨在通过实际操作,掌握看门狗功能的原理、设置方法以及在实际应用中的调试技巧。

二、实训目标1. 理解看门狗功能的原理及作用。

2. 掌握STM32单片机看门狗功能的配置方法。

3. 学会使用看门狗功能防止程序跑飞和死循环。

4. 掌握看门狗功能在实际应用中的调试技巧。

三、实训内容1. 看门狗功能原理及作用看门狗是一种定时器,用于监控程序运行状态。

当程序正常运行时,需要定期对看门狗进行喂狗操作,以防止看门狗超时。

如果看门狗超时,则认为程序出现错误,看门狗会自动复位系统,使程序重新开始执行。

2. STM32单片机看门狗功能配置(1)硬件电路:在STM32单片机中,看门狗功能主要由独立看门狗(IWDG)和窗口看门狗(WWDG)实现。

IWDG使用独立的RC振荡器工作,适用于对时间精度要求不高的场合;WWDG则要求在精确的计时窗口内起作用,主要用于需要精确控制时序的应用。

(2)软件配置:在STM32CubeMX中,可以通过以下步骤配置看门狗功能:① 打开STM32CubeMX软件,选择相应的STM32单片机型号。

② 在“System Core”选项卡中,勾选“IWDG”和“WWDG”选项。

③ 在“IWDG”选项卡中,设置预分频系数、重装值等参数。

④ 在“WWDG”选项卡中,设置预分频系数、重装值、窗口值等参数。

⑤ 生成代码,并在Keil uVision中编译、下载程序。

3. 使用看门狗功能防止程序跑飞和死循环(1)程序跑飞:当程序进入死循环时,看门狗会因未进行喂狗操作而超时,系统自动复位,从而避免程序跑飞。

看门狗

看门狗

端口初始化程序如下:
片不带喂狗端口
方式1中所采用的是带WDI端口的看门狗芯片,但有些芯片是不带WDI端口的,这时看门狗用于电源检测,当低于设定电压时,输出复位信号,使系统复位。第二种方法也采用2812的引脚配合方式,但不需要时时刻刻喂狗。图3为所采用的看门狗芯片MAX708。图4为MAX708与2812的接口电路。
{
EALLOW;
SysCtrlRegs.WDCR= 0x0068;//0110 1000
EDIS;
}//使看门狗无效
void KickDog(void)
{
EALLOW;
SysCtrlRegs.WDKEY = 0x0055;
SysCtrlRegs.WDKEY = 0x00AA;
这里利用while(1)的死循环等待看门狗的计数器超过设定值,然后WDRST信号输出低电平;而WDRST接到XRS上,所以整个系统复位,重新开始执行程序。
看门狗程序如下:
结 语
第一种和第二种方式基于硬件的实现,更加可靠些,第三种方式则可以节约电路板的空间和成本。需要注意的是,采用软件看门狗时调用喂狗程序的间隔不能大于设定值。
TMS320F2812(以下简称2812)是TI公司2000系列的新型DSP芯片,具有32位低功耗定点处理器,最高主频150 MHz,有强大的操作能力和快速的中断响应处理能力。片内有18 K字高速RAM,128 K字的可加密Flash ROM。片上还集成了丰富的片内外设.有SPI、SCI、eCAN和McB—SP等多个串口外围设备,16通道的12位模数转换器(ADC),2个事件管理器(EVA、EVB),56个独立的可编程、多用途通用I/O口(GPIO)。该DSP芯片集成了大量工业控制领域应用的外设接口,能大大简化电路设计,同时它也具有足够的处理能力,是应用于控制领域的一款高性能DSP处理器。

第八章 单片机8051内部资源C语言编程

第八章 单片机8051内部资源C语言编程

第八章 8051内部资源C语言编程一、I/O口编程例1:用按键控制发光二极管。

并口是用的最多的资源,下面以P1口为例,见电路图,P1口低4位接了4个按钮,高4位接了4个指示灯,要求按下相应的按钮,对应的指示灯亮。

P10对应P14,依次类推。

指示灯是端口输出高电平亮。

源程序如下:#include<at89x51.h>void main(){unsigned char data x,i;while(1){P1=P1|0x0f; //给低4位置1,高4位不变x=P1&0x0f; //读低4位x=~x; //低4位取反P1=x<<4; //左移4位for(i=0;i<255;i++); //延时}}(端口编程)注意上面几种常见的用法。

二、中断的C语言编程C51编译器支持在C源程序中直接开发中断程序。

前面已经讲过,中断服务程序是通过按规定语法格式定义的一个函数。

(中断有关内容)Array中断服务程序的函数定义的语法格式如下:Void 函数名(void) interrupt m [using n] { 中断程序代码;}m为MCS-51中断源编号,见表using n 选项用于实现工作寄存器组的切换,n是中断服务子程序中选用的工作寄存器组号(0- 3)。

例2:设AT89C52 的时钟频率为12MHz,利用定时中断在其P1.0 引脚输出周期为4ms,占空比为1:1的方波。

确定定时器工作方式和计算定时器初值。

选用定时器T0工作方式1,每个机器周期为1μs,翻转一次电平需要2ms,则计数次数n=2000/1=2000,初值x=65536-2000=63536=F830H参考程序如下:#include<REG52.h>sbit P10 = P1^0;//定义位void clock_initial() reentrant using 0//在中断中调用,定义为重入函数{TR0=0;TH0=0XF8;//装载计数初值TL0=0X30;TR0=1;}main( ){TMOD = 0x01; //定时器T0方式1 工作P10 = 0; //初始值为低电平TF0=0;//清除中断标志位clock_initial();ET0=1;EA=1;do{ } while(1); //死循环,等价于汇编语言的SJMP $}void clk_int ( void ) interrupt 1 using 0{P10= !P10;//逻辑变量clock_initial();}(延时中断)例3:图示是利用优先权解码芯片74LS148,在单片机8031的一个外部中断INT1上扩展多个中断源的原理电路图。

单片机测控系统“看门狗”技术的设计与实现

单片机测控系统“看门狗”技术的设计与实现
1 “ 门 狗 ” 术 原 理 看 技 电路 , 看 门 狗 ” “ 电路 产 生 复 位 信 号使 系 统 可 靠 复 位 , 复位 后 程 序 “ 门 狗 ” 质 上 是 一 个 程 序 监 视 定 时 器 , 的定 时 时 间 是 重 新 纳 入 正 常 的工 作 循 环 中 。 系 统 运行 的可 靠 性 大 大 提 高 。 看 实 它 使
固 定 不 变 的 , 旦 定 时 时 间 到 , 生 中 断 或 溢 出脉 冲【】 利 用 这 2 计 数 器 型 “ 门 狗 ” 一 产 2。 2 看 原 理 给单 片 机 测 控 系 统 加 一 个 “ 门 狗 ” 看 电路 , 利 用 单 片 机 或 利用两片 C 44 D o 0十 二 位 二 进 制 串行 计 数 器 构 成 的 “ 门 看 内部 的 定 时/ 数 器 T 、 1 “ 门 狗 ” 程 序 正 常 运 行 时 , 果 狗 ” 计 OT 作 看 。 如 电路 如 图 2所 示 。 计 数 器在 下 降 沿进 行 计 数 , R S T输 入 将 E E
境 , 用 程 序 监 视 技 术 , 称 为 “ 门 狗 ” 术 ( th o )使 系 于 定 时 时 间 ( .8 ) 不 断 地 扫 描 访 问 “ 门 狗 ” 采 又 看 技 Wacd g , 1 s内 9 看 电路 , 旦 系 统 一 统脱离死循环。 受 到 干 扰 程 序失 控 或 进 入 死 循 环 , P C U不 能 正 常 访 问 “ 门 狗 ” 看

在 小 于定 时 时 间 内 对 定 时 器 进 行 刷 新 ( 时 器 清 零 ) 定 时 器 处 端 置 于 高 电平 或正 脉 冲. 定 , 可使 计 数 器 的输 出全 部 为 低 电 平 。若 单 于 不 断 的 重 新 定 时过 程 。 不会 产 生 中断 或 溢 出 脉 冲 ; 程 序 因 片 机 时 钟 振 荡 频 率 fs 6 z A E输 出 的 频 率 为 l fs , 就 当 oc= MH , L / oc 则 6 干 扰 失 控 或 进 入 死循 环 时 , 不能 在 小 于定 时 时 间 内 对 其 刷 新 , 当 A 信 号 周 期 为 1 ,第 一 个 计 数 器 Q 2端 脉 冲 出现 时 间 为 E L s 1 定 时 时 间 到 时 , 时 器 产生 中断 , 中 断 服 务 程序 中使 其 返 回 到 1 x m 40 6 s 第 二 个 计 数 器 Q 定 在 2 -. m , _ 9 8端 的 脉 冲 出 现 时 间 为 起 始 程 序 。 利 用 溢 出产生 的控 制 脉 冲使 单 片 机 复 位 。 或 4 9 m x 81 d s . 6 s 2= . 8 。测 控 系 统 应 用 程 序 在 循 环 过 程 中 , 1口 的 0 0 P 2 硬件“ 门狗” 看 P - 出定 时 周 期 小 于 1 d s清零 脉 冲 信 号 . 能 保 证 第 二 个 13发 . 8 O 就

51单片机 c语言看门狗程序怎么写

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系列都不带狗。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
~2~
值得提一下: 由于现在 AT89S52 应用比较广泛,所以我先说说 ATMEL 的看门狗;再说
说本次试验用的 STC89C52RC 的看门狗;注意两个丌一样!!! AT89S52 单片机看门狗定时器是 14 位的,最大计数 214=16384 个数,每计
16384 个时钟周期就溢出一次。也就是说如果使用 12M 晶振的话,至少应该在 16.384ms 内喂一次狗。
~5~
程序代码:
/*************************************************************************** 程序功能:本程序演示 STC51 单片机看门狗程序 程序设计:燕山大学 鲁信琼 晶振选择:11.0592MHz, 如果晶振不匹配,请修改延时函数参数
候一直亮着;用于指示系统是否重启
uchar timer0_ctr,i;
const uchar str[]="I love MCU!"; //定义一句话,让他从串口输出,只有系统重启的时候才输 出一次,所以也是用于********************************************************************/ //延时函数,11.0592MHz 晶振下延时约 xms 毫秒 void delay_ms(unsigned xms) {
//初始化时两盏灯都熄灭 LED=1; LED_busy=1;
TMOD=0x21; 为串行口波特率发生器
TH0=0x4C; TL0=0x00; IE=0x82; TR0=1;
//定时器 0 工作在方式 1,作为 16 位定时器;定时器 1 工作在方式 2,作
//定时器 0 装初值:每隔 50ms 溢出一次
***************************************************************************/
#include <Reg52.H>
sfr WDT_CONTR=0xE1;
//定义特殊功能寄存器:STC 单片机看门狗控制寄存器
#define uchar unsigned char
由于现在 AT89S52 用的很广泛,所以我先说说 ATMEL 的看门狗;再说说本次试验用的 STC89C52RC 的看 门狗;注意两个不一样!!!
★下面是关于 ATMEL-51 单片机看门狗的描述 【看门狗计数器】(watchdog timer)是一个 14 位的计数器,它以机器周期(晶振频率/12)增加,
unsigned x,y; for(x=xms; x>0; x--)
for(y=110; y>0; y--); } /*************************************************************************/
/*************************************************************************/ //主程序初始化函数 void InitMain() {
上电会通过串行口发送一次“I love MCU!”字符串,通过串口调试助手可 以查看;
同时信号灯每隔 1.5s 闪一下; 工作指示灯在上电约 800ms 会点亮,只要系统正常运行会一直亮着。 3. 我们通过设置 while 大循环中的延时时间来调节喂狗时间,如果在 1s 内喂狗, 系统会正常运行,如果超过 1s,比如 2 秒喂狗一次,那么看门狗就会复位系 统,表现的现象就是:通过串口不停地发送字符串,同时两盏灯都不亮。
~6~
关于实验的注意事项:
1. 本次试验使用的是 11.0592MHz 晶振,设置 WDT_CONTR=(0011 0100)B,32 预分频,单片机使用 12 指令周期模式。
计算看门狗溢出时间:[12*32*32768/(11059200)]≈1s。 2. 本次试验的硬件电路很简单,就是最小系统上增加两个 LED 灯,原理图见正文,用户可以很容易实现。
看门狗定时器预分频器,下表中 Prescale 表示预分频数
PS2 PS1 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 时钟周期模式
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 系列单片机的看门狗更有优势一些。当 然这个也是个人的选择,如果对时间要求的丌苛刻的话,勤喂几次狗也没关系。
注解:这里顺便说一下,一般教材上叫“看门狗定时器”,其实定时器原理 还是计数器,只是计的是时钟周期,所以我为了初学者好理解叫统一叫“计数 器”,这里阐明一下。
明白了上面的原理,我们在设计程序时,先根据看门狗计数器的位数和系统 的时钟周期算一下计数器计满数需要的时间,就是说在这个时间内“看门狗”计 数器是丌会装满的,然后在这个时间内告诉它重新开始计数,就是把计数器清零,
STC89C5X 系 列 单 片 机 由 于 采 用 了 “ 预 分 频 技 术 ” , 它 的 溢 出 时 间 是 =(N*Prescale*32768)/晶振频率(不要问我为什么,他们就是这么设计的,我们就 这么用就行)。
其中 N 是单片机的时钟周期,STC89C5X 系列单片机提供 6 时钟周期和 12 时钟周期两种时钟周期,可以在烧写程序时修改;
#define true 1
#define false 0
#define WEIGOU WDT_CONTR=0x34
//看门狗启动设置和“喂狗”操作
sbit LED=P1^6; sbit LED_busy=P1^7;
//信号灯,系统正常工作就一闪一闪的 //工作灯,上电灭一会儿(约 800ms),然后正常工作的时
★下面是关于 STC89C5XX-51 单片机看门狗的描述(详细请看 STC89C51RC-RD 单片机使用说明)
WDT_CONTR 位置 0xE1; [-] [-] [EN_WDT] [CLR_WDT] [IDLE_WDT] [PS2] [PS1] [PS0]
EN_WDT: 看门狗允许位,置 1 启动看门狗,看门狗不能自动启动,需要设置该位后启动,一旦启
如果没有我们的实验板,请按照下面的硬件原理图自己在最小系统上搭建一 个实验环境也很容易。 硬件电路图:
图 1. STC89C52 最小单片机系统+两个指示灯
~4~
图 2. 串行口接口(用于下载程序和测试本次试验) 实验现象及解释: 1. 我们设置 32 分频,看门狗溢出时间约为 1s。 2. 如果系统正常运行:
动不能关闭(只能系统重新上电和看门狗复位可以关闭)
CLR_WDT: 看门狗计数器清零位,置 1 清零看门狗计数器,当计数器开始重新计数,硬件清零该位。
IDLE_WDT: 单片机 IDLE 模式看门狗允许位,当 IDLE_WDT=1 时,单片机在 IDLE 模式(空闲模式)
依然启用看门狗
PS2~PS0:
很多人初次接触丌太理解怎么用,书上也讲的含含糊糊,故意说的很复杂很 玄妙(可能是现在写书人的通病,生怕写的简单的别人觉得他没水平)。其实要 是说明白点:“看门狗”就是一个计数器,由于位数有限计数器能够装的数值是有 限的(比如 8 位的最多装 256 个数、16 位的最多装 65536 个数),从开启“看门狗” 那刻起,它就开始丌停的数机器周期,数一个机器周期就计数器加1,加到计数 器盛丌下了(术语叫溢出)就就产生一个复位信号,重启系统。
文章:STC89C5X 单片机“看门狗”原理、详细说明和演示程序 作者:老鲁
原文地址:/article/45 (附 C 语言源程序)
“看门狗定时器”是这样一种东西,从功能上说它可以让微控制器在意外状 况下(比如程序陷入死循环)重新回复到系统上电状态,以保证系统出问题的时 候重启一次。就跟我们用电脑一样,死机了你就按一下 reset 键重启一次电脑, 看门狗就是负责干这个事儿的。它是 52 单片机增加的一个功能,以前 Intel 8031、……、AT 89C51 时代单片机片内都没有“看门狗”功能,需要我们外扩看门 狗芯片,比如 X5045。
当计数值计满(16383/0x3FFF)了就使单片机软复位; 当启动了【看门狗计数器】之后,我们需要在它计数没有满之前复位计数器强制它不能够溢出,这个
过程称作喂狗。
"看门狗"原理: 1. 系统上电并不启动看门狗计数器,通过设置【看门狗重置寄存器(WDTRST SFR)】启动【看门狗计 数器】,一般设置是给 WDTRST 写入 0x1E 和 0xE1 启动; 2. 【看门狗计数器】一旦启动不可停止,除非是硬件 RST 或者看门狗的软复位才能使其停止; 3. 设计程序在适当的时间喂狗一次,使其不能计满,程序就能不间断执行; 4. 如果程序中出现死循环或者执行某一步超时,看门狗计数器就会计满溢出,(这个时候我们认为程 序没有按照预定计划执行--程序跑飞),则复位系统。
相关文档
最新文档