www.pudn.com > lpc213X_C_application.rar > main.c, change:2005-04-20,size:3469b
/****************************************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; PINSEL0 = 0x00000000; // 管脚连接GPIO PINSEL2 = PINSEL2 & (~0x08); // P1[25:16]连接GPIO 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 ********************************************************************************************************/