📄 看门狗溢出复位演示实验.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 + -