📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by: Chenxibing
** Modified date: 2005-01-19
** Version:
** Descriptions: 看门狗溢出复位演示实验,在Flash中进行。
**
********************************************************************************************************/
#include "config.h"
#define LED1 1 << 18 // P0.18控制LED1
#define KEY1 1 << 16 // P0.16
#define KEY2 1 << 17 // P0.17
#define BEEP 1 << 7 // P0.7控制蜂鸣器
/*
********************************************************************************************************
** 函数名称: main
** 功能描述: 打开看门狗,KEY1停止喂狗,KEY2清除看门狗溢出标志
*******************************************************************************************************
*/
int main(void)
{
uint32 i,j;
IO0DIR = BEEP; // 蜂鸣器控制口输出
IO1DIR = LED1; // LED1控制口输出
IO0SET = BEEP; // 关闭蜂鸣器
/* 如果曾经发生过看门狗复位,则等待清除看门狗超时标志,在未清除之前蜂鸣器一直鸣叫 */
while(( WDMOD & 0x04 ) == 0x04) // 判断看门狗超时标志
{
/* 看门狗超时标志未清除 */
for(j = 0; j < 0xFFFFF; 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;
/* 正常情况下,闪烁LED1 */
while(1)
{ /* 用按键模拟导致无法周期性喂狗的意外情况 */
while((IO0PIN & KEY1) == 0); // 如果按键1按下,就停止喂狗
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;
}
return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -