⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 看门狗溢出复位演示实验.c

📁 针对PP2132V1开发的详细的实验教程
💻 C
字号:
/****************************************Copyright (c)**************************************************
**--------------File Info-------------------------------------------------------------------------------
** File name:			4。41WDT(P366)
** Created by:			程剑锋 chengjianfeng@tyut.edu.cn
** Descriptions:		看门狗溢出复位演示实验
**
********************************************************************************************************/
/**************************************************************
实验名称:看门狗溢出复位演示实验
实验目的:熟悉看门狗的使用
实验日期:2008,3,30
作者:    刘启明
***************************************************************/
#include "iolpc2132.h"

#define 	LED1 	1 << 18		// P0.18控制LED1,接LED。
#define 	KEY1 	1 << 16		// P0.16接按键,按按键的时间不能太短,建议2S以上。
#define 	KEY2 	1 << 17		// P0.17接按键,按按键的时间不能太短,建议2S以上。
#define 	BEEP 	1 << 7		// P0.7控制蜂鸣器


void main(void)
{                                   
    unsigned int i,j;

    IO0DIR = BEEP;				// 蜂鸣器控制口输出
    IO1DIR = LED1;				// LED1控制口输出
    IO0CLR = BEEP;				// 关闭蜂鸣器,高电平有效。
	
	/* 如果曾经发生过看门狗复位,则等待清除看门狗超时标志,在未清除之前蜂鸣器一直鸣叫 */
    
    while(( WDMOD & 0x04 ) == 0x04)             // 判断看门狗超时标志。开始的时候,标志位是置1的。
    { 
      	/* 看门狗超时标志未清除 */ 
        for(j = 0; j < 0x3FFFF; j++);		// 蜂鸣器鸣叫周期             
        if((IO0SET & BEEP) == 0)
    	{
    		IO0SET = BEEP;			// 关闭蜂鸣器
     		if((IO0PIN & KEY2) == 0)	// 等待按键KEY2
     			WDMOD = 0x00;		// 如果KEY2按下,则软件清零看门狗超时标志位
     	}
   		else    IO0CLR = BEEP;		// 蜂鸣器鸣叫   	
    }
    
    /* 如果没有发生看门狗复位或者看门狗超时标志已经清除,则初始化看门狗 */    
	WDTC  = 0xff000;		        // 设置看门狗定时器参数
	WDMOD = 0x03;                   	// 设置看门狗模式:中断且复位
        WDFEED = 0xAA;				// 第一次喂狗启动WDT
	WDFEED = 0x55;
	IO0CLR = BEEP;	
        
    /* 正常情况下,闪烁LED1 */
    while(1)
    {	
      /* 用按键模拟导致无法周期性喂狗的意外情况 */
        while((IO0PIN & KEY1) == 0);            // 如果按键1按下,就停止喂狗,程序复位。重新执行程序。
        IO0CLR = BEEP;	
        for(j = 0; j < 0xFF; j++)		// LED1闪烁周期
        {
            for(i = 0; i < 0x0FFF; i++); 	// 喂狗周期       
            WDFEED = 0xAA;			// 喂狗时序
	    WDFEED = 0x55;
        }
        
        /* 闪烁LED1 */
        
        if((IO1SET & LED1) == 0)  IO1SET = LED1;
        else	IO1CLR = LED1;
    }
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -